专注于 ActionScript 3.0 在各应用领域的研究。
« PV3D应用范例精粹 (2008-04-03 更新)Papervision3D入门-PV3D程序结构及基本贴图 »

Papervision3D入门-创建PV3D基本内置模型(球体,立方体,柱状体等)

   这一篇,我们将一起学习使用几个基本的PV3D内置模型,PV3D的内置模型有平面,球体,立方体,柱状体,等等。这些模型都是些最基本的形状,可能对于开发比较复杂的3D应用没有帮助,但是学习使用它们可以帮助我们深入学习PV3D,在我们做后续试验的时候可以有实验对象   建立步骤:

   显示效果  http://flex.unbe.cn/PV3D/Try04_Sphere/Main.swf

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 PV3D_Basic1 extends Sprite
    {
         private var _container:Sprite;
         private var _scene:MovieScene3D;
         private var _camera :Camera3D;
         private var _material:MaterialObject3D;
         private var _displayObj:DisplayObject3D;  
  
         public function PV3D_Basic1()
         {
               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();
              //该值越小,_container就越小
            _camera.z = -500;
             //该值越小,_container就越小
            _camera.zoom = 5;
   
            // 创建一个线框材质
            _material = new WireframeMaterial(0xff0000);
            //直径80, 高度和宽度的精度为10 直径就很好理解了,精度决定了球的显示效果,大家可以用不同精度试试看
           _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);       
        }
    }
}
 

   这是一个球形,如果想要做成立方体,则只需修改上面代码中红色部分如下

   显示效果:http://flex.unbe.cn/PV3D/Try03_Cube/Main.swf

   /** 创建立方体 */
   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, 12, 2, 2);

   如果想要创建柱状体,则使用如下代码

   显示效果:http://flex.unbe.cn/PV3D/Try05_Cylinder/main.swf

    /** 创建柱状体 */
   _material = new WireframeMaterial(0xff0000)
   //直径40, 高度100, 显示精度10,上底面直径40
   _displayObj = new Cylinder(_material, 40, 100, 10, 10, 40);

dmh2002注:本文在原文基础上略有改变,所有代码均通过flex3,PV3D2.0测试,如有不明之处可参看原文或对PV3D构造过程还不了解,可参看。
Papervision3D入门-PV3D程序结构及基本贴图

原文地址:http://www.unbe.cn/blog/?p=320

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Walle Build 100427 Code detection by Codefense

Copyright 2008-2010 DMH2002's Blog Some Rights Reserved.沪ICP备07021739号