PV3D操作节点做变型
这里看效果。点击更多看源代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | package { import com.greensock.easing.Elastic; import com.greensock.TweenLite; import flash.events.Event; import flash.events.TimerEvent; import flash.utils.Timer; import org.papervision3d.core.geom.renderables.Triangle3D; import org.papervision3d.core.geom.renderables.Vertex3D; import org.papervision3d.core.math.Number3D; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.view.BasicView; /** * @author Ryan Liu | www.ryan-liu.com * @since 2009-12-2 15:19 */ [SWF(width = "1000", height = "500", backgroundColor = "0x0")] public class MeshTransform extends BasicView { private var light:PointLight3D private var mat:FlatShadeMaterial private var mesh:DisplayObject3D; private var n3dArr:Array = []; private var timer:Timer public function MeshTransform() { initMesh(); initData(); startRendering(); timer = new Timer(1000); timer.addEventListener(TimerEvent.TIMER, onTimer); timer.start(); addEventListener(Event.ENTER_FRAME, loop); } private function initMesh():void { light = new PointLight3D(); light.y = -8000; light.x = -8000; light.z = -8000; mat = new FlatShadeMaterial(light, 0xf6a0d3, 0x236c96); mesh = new Sphere(mat, 300, 8, 8); scene.addChild(mesh); } private function initData():void { for each( var vertice:Vertex3D in mesh.geometry.vertices) { n3dArr.push(vertice.toNumber3D()); } } private function doTransform():void { for ( var index:* in mesh.geometry.vertices) { var vertice:Vertex3D = mesh.geometry.vertices[index] as Vertex3D; var n3d:Number3D = n3dArr[index] as Number3D; var tx:Number = (.5 + Math.random() * 1.5) * n3d.x; var ty:Number = (.5 + Math.random() * 1.5) * n3d.y; var tz:Number = (.5 + Math.random() * 1.5) * n3d.z; TweenLite.to(vertice, 1, { x:tx, y:ty, z:tz, ease:Elastic.easeOut } ); } var rx:Number = mesh.rotationX + (Math.random() - Math.random() ) * 90; var ry:Number = Math.random() + (Math.random() - Math.random() ) * 90; var rz:Number = Math.random() + (Math.random() - Math.random() ) * 90; TweenLite.to(mesh, .8, { rotationX:rx, rotationY:ry, rotationZ:rz, ease:Elastic.easeOut } ); } private function onTimer(e:TimerEvent):void { doTransform(); } private function loop(e:Event):void { for each(var vertice:Vertex3D in mesh.geometry.vertices) { vertice.calculateNormal(); } for each(var face:Triangle3D in mesh.geometry.faces) { face.createNormal(); } } } } |
12月 18th, 2009 at 13:44
一直想学习flash图像艺术,但是没有美术功底,那么该如何学习 as
12月 18th, 2009 at 13:45
能不能推荐些这方面的书籍,或建议,不胜感激