Adding Shaders
Once you’ve experienced the speed of Away3dlite you next want to bump up its appearance. The best way to do that is by using Pixel Bender shaders….and with Pixel Bender the sky is the limit! In this post, you get the code that let’s you do that, and you learn to add shaders and Pixel Bender to Away3dlite. The same approach is applicable to PV3D.
Here’s the demo
Check out the video!
Download the Code
http://code.google.com/p/lv3d/downloads/detail?name=Bettershader.zip
Read Some Discussion
The key to getting this to work was to first get all the shaders over into Away3dLite, then instantiating the ExLight example in Flash Builder and using switch case to create the different materials for your model.
Here’s what the switch case code looks like. It is really simple…everything else is in the video and the download…cheers!
| override protected function onInit():void
{ var md2:MD2 = new MD2(); var light:Light = new Light(); var _texture:Bitmap = new Texture as Bitmap; var _bitmap:BitmapData = new BitmapData(_texture.width, _texture.height, false); _bitmap.draw(_texture); var _normalMap:Bitmap = new Normal as Bitmap; switch(mySwitchNum) { case 0: //Normal Shader var rLight:DirectionalLight3D = new DirectionalLight3D(); rLight.direction = new Vector3D(1, 0, 0); rLight.color = 0xFF0000; rLight.ambient = 0.1; scene.addLight(rLight); var gLight:DirectionalLight3D = new DirectionalLight3D(); gLight.direction = new Vector3D(0, 1, 0); gLight.color = 0x00FF00; gLight.ambient = 0.1; scene.addLight(gLight); var bLight:DirectionalLight3D = new DirectionalLight3D(); bLight.direction = new Vector3D(0, 0, 1); bLight.color = 0x0000FF; bLight.ambient = 0.1; scene.addLight(bLight); var material:BitmapMaterial = new Dot3BitmapMaterial(_bitmap, _normalMap.bitmapData); material.smooth = true; md2.material = material; md2.centerMeshes = true; break; case 1: //Plane Material /*var filter1:BevelFilter = new BevelFilter(10, 45, 0xFFFFFF, 0.5, 0×000000, 0.5, 10, 10, 50); var filter2:GlowFilter = new GlowFilter(0xFFFFFF, 1, 50, 50); var filter3:GlowFilter = new GlowFilter(0xFF0000, 1, 50, 50); */ var planeMaterial:BitmapMaterial = new BitmapMaterial(_bitmap); md2.material = planeMaterial; md2.centerMeshes = true; break; case 2: //Flat Shader var myFlatShader:FlatShader = new FlatShader(light); md2.material = myFlatShader; md2.centerMeshes = true; light.x=light.y =400; light.z = -400; scene.addChild(light); break; case 3: //Phong Color Shader var myPhongColorShader:PhongColorMaterial = new PhongColorMaterial(light, 0x00ff00); md2.material = myPhongColorShader; light.x=light.y =400; light.z = -400; scene.addChild(light); md2.centerMeshes = true; break; case 4: //Phong Shader var myPhongShader:PhongMaterial = new PhongMaterial(light, _bitmap); md2.material = myPhongShader; md2.centerMeshes = true; light.x=light.y =400; light.z = -400; scene.addChild(light); break; case 5: //PBJ Filter var mat:PBBitmapShader = new PBBitmapShader(light, _bitmap, _normalMap.bitmapData); md2.material = mat; md2.centerMeshes = true; light.x=light.y =400; light.z = -400; scene.addChild(light); break; case 6: //Shader var mat2:PBTransparentShader = new PBTransparentShader(light, _bitmap, _normalMap.bitmapData); md2.material = mat2; md2.centerMeshes = true; light.x=light.y =400; light.z = -400; scene.addChild(light); break; case 7: //Shader var myShader:VertexShaderMaterial = new VertexShaderMaterial(light, _bitmap); md2.material = myShader; md2.centerMeshes = true; light.x=light.y =400; light.z = -400; scene.addChild(light); break; default: trace(“Out of range”); break; } var loader:Loader3D = new Loader3D(); loader.loadGeometry(“assets/torsov2.MD2″, md2); loader.addEventListener(Loader3DEvent.LOAD_SUCCESS, onSuccess); scene.addChild(loader); camera.z = -200; } |

Posted by Mike Lively 