這一篇,我們將一起學習使用幾個基本的PV3D內置模型,PV3D的內置模型有平面,球體,立方體,柱狀體,等等。這些模型都是些最基本的形狀,可 能對於開發比較複雜的3D應用沒有幫助,但是學習使用它們可以幫助我們深入學習PV3D,在我們做後續試驗的時候可以有實驗對象
我們從球體開始。創建球體對象的代碼如下:
1 2 3 4 5 | // 創建一個線框材質 _material = new WireframeMaterial(0x000000);
//直徑80, 高度和寬度的精度為10 _displayObj = new Sphere(_material, 80, 10, 10); |
直徑就很好理解了,精度決定了球的顯示效果,大家可以用不同精度試試看
顯示效果:
完整的代碼:
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 | package { import flash.display.Sprite; import flash.events.Event; import org.papervision3d.cameras.Camera3D; import org.papervision3d.scenes.MovieScene3D; import org.papervision3d.materials.MaterialsList; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.core.proto.MaterialObject3D; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.Sphere; [SWF(width='200',height='200',backgroundColor='0xFFFFFF',frameRate='30')] public class Main extends Sprite { private var _container :Sprite; private var _scene :MovieScene3D; private var _camera :Camera3D; private var _material:MaterialObject3D; private var _displayObj:DisplayObject3D; public function Main() { Init3D(); } private function Init3D():void { // 創建3D舞台的容器 _container = new Sprite; _container.x = 100; _container.y = 100; addChild( _container ); // 創建3D舞台 _scene = new MovieScene3D( _container ); // 創建攝像頭 _camera = new Camera3D(); _camera.z = -500; _camera.zoom = 5; // 創建一個線框材質 _material = new WireframeMaterial(0x000000); _displayObj = new Sphere(_material, 80, 10, 10); _scene.addChild(_displayObj); this.addEventListener(Event.ENTER_FRAME, OnEnterFrame); } private function OnEnterFrame(event:Event):void { _displayObj.rotationX += 5; _displayObj.rotationY += 5; _scene.renderCamera(_camera); } } } |
後面的代碼我就不重複了,變化的部分都是_material = new WireframeMaterial(0×000000); 和 _scene.addChild(_displayObj); 兩個語句之間的3D顯示對象初始化代碼,大家應該明白怎麼改。後面我只寫內置模型類的用法。
創建立方體比創建平面對象和球體複雜些,需要給立方體對象一個材質列表,告訴它每個面用什麼材質。代碼如下:
1 2 3 4 5 6 7 8 9 10 11 | var materialList:MaterialsList = new MaterialsList(); //六個面的材質 materialList.addMaterial(new WireframeMaterial(0xFF0000), "top"); materialList.addMaterial(new WireframeMaterial(0xFFFF00), "bottom"); materialList.addMaterial(new WireframeMaterial(0x0000FF), "front"); materialList.addMaterial(new WireframeMaterial(0x00FF00), "back"); materialList.addMaterial(new WireframeMaterial(0x000000), "left"); materialList.addMaterial(new WireframeMaterial(0xCC00CC), "right"); _displayObj = new Cube(materialList, 128, 128, 128, 2, 2, 2); |
顯示效果:
大家可以試著把Cube的構造函數參數做些調整,看看顯示出來是什麼樣的。
柱狀體的初始化代碼:
1 2 3 | //直徑40, 高度100, 顯示精度10,上底面直徑40 _displayObj = new Cylinder(_material, 40, 100, 10, 10, 40); |
上面代碼顯示出來是一個圓柱體,如果你把上底面直徑設置成1,就變成一個錐形體了
顯示效果(左:上下底面直徑40,右:上底面直徑1):
呵呵,這一篇的內容好像太過簡單了。。。。幾個後面試驗可能會用到的內置對象就這樣演示完了。大家可以自己調調構造函數的參數,看看不同效果。