Papervision3D入门第3步
这一篇,我们将一起学习使用几个基本的PV3D内置模型,PV3D的内置模型有平面,球体,立方体,柱状体,等等。这些模型都是些最基本的形状,可能对于开发比较复杂的3D应用没有帮助,但是学习使用它们可以帮助我们深入学习PV3D,在我们做后续试验的时候可以有实验对象 :-)
我们从球体开始。创建球体对象的代码如下:
// 创建一个线框材质 _material = new WireframeMaterial(0x000000); //直径80, 高度和宽度的精度为10 _displayObj = new Sphere(_material, 80, 10, 10);
直径就很好理解了,精度决定了球的显示效果,大家可以用不同精度试试看 :-)
显示效果:
完整的代码:
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(0x000000); 和 _scene.addChild(_displayObj); 两个语句之间的3D显示对象初始化代码,大家应该明白怎么改。后面我只写内置模型类的用法。
创建立方体比创建平面对象和球体复杂些,需要给立方体对象一个材质列表,告诉它每个面用什么材质。代码如下:
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的构造函数参数做些调整,看看显示出来是什么样的。
柱状体的初始化代码:
//直径40, 高度100, 显示精度10,上底面直径40 _displayObj = new Cylinder(_material, 40, 100, 10, 10, 40);
上面代码显示出来是一个圆柱体,如果你把上底面直径设置成1,就变成一个锥形体了 :-)
显示效果(左:上下底面直径40,右:上底面直径1):
呵呵,这一篇的内容好像太过简单了。。。。几个后面试验可能会用到的内置对象就这样演示完了。大家可以自己调调构造函数的参数,看看不同效果。