小小菜鸟的web菜园子

web开发学习。好记性不如烂笔头。每天进步一点点!

导航

学习一下papervision3D。Papervision3D Essentials学习笔记(一)

1:场景Scene
Scene是在3D空间由3D对象组成的一个整体。你可以认为它是有x、y、z三个有的flash舞台,每个你希望可以看到的对象都应该添加到场景。如果你不把对象添加到场景,那么这些对象是不会显示在你的屏幕上的。
2:摄像机Camera
你可以认为这是真正的摄像机,它在 3d 空间中不断的记录场景的活动.摄影机确定了查看场景的
点.因为3d空间的相机不是可视对象,它不是场景的组成部分不必添加它.摄影机可以像真实的相机
一样缩放和聚焦.
  3d空间的相机可以做更多的事.如,在3d中对象距离相机过近或过远时将剔除此对象防止它被
渲染.相机可以忽略某些在不可见区域的对象.这些都是出于性能考虑的.对象距离太远或处于相机
后面,不需来记录,这时会节省很多计算的资源.
3:观察口 Viewport
观察口是一个舞台上的sprite容器,输出相机记录下来的对象.对象介绍中,观察口好比相机的镜头.
镜头是我们放在 3d 场景上面的窗口.
我们可以缩小这个窗口则可以只看到 3d 场景的一小部分,放大一些就看的多一些.观察口如现实中
真实窗口一样—窗口越大看到的外面世界越大,它影响到我们究竟可以看到多少场景.


要把渲染结果输出到屏幕上我们需要一个 场景,摄像机,观察口,有材质的 3d
对象,和一个渲染引擎.

 

package {
    import flash.display.Sprite;
    import flash.events.Event;
    
    import org.papervision3d.cameras.Camera3D;//摄像机
    import org.papervision3d.objects.primitives.Sphere;
    import org.papervision3d.render.BasicRenderEngine;//引擎
    import org.papervision3d.scenes.Scene3D;//场景
    import org.papervision3d.view.Viewport3D;//观察口

    public class FirstApplication extends Sprite
    {
       
 //场景是必须的,是 3D 对象的载体.创建了一个无参的 Scene3D 类的实例
        private var scene:Scene3D;
       
 //添加一个 Camera3D,跟创建场景一样容易. 摄像机在创建时可以指定参数,现在使用默认值.
        private var camera:Camera3D;
        
//一个内置的球体.
        private var sphere:Sphere;
        
//现在我们拥有了一个场景,一个摄像机,和一个球体,现在我们需要建立好可以观察到 3D 场景的窗口.我们需要定义观察口并将其加入到舞台以使其可见. 创建新观察口时,我们可以传递可选的参数,否则观察口将使用默认的参数.
        private var viewport:Viewport3D;
        private var renderEngine:BasicRenderEngine;
        
        public function FirstApplication()
        {
            stage.frameRate = 40;
            scene = new Scene3D();
            camera = new Camera3D();
            
            sphere = new Sphere();
            scene.addChild(sphere);
            
            viewport = new Viewport3D();
            addChild(viewport);
            
//  现在距离完工只有一步之遥了.我们需要获取到我们滚动的摄像机.这是渲染引擎定义好的,它将渲染场景并将拍到的图像发送至观察口. 
            renderEngine = new BasicRenderEngine();
            renderEngine.renderScene(scene, camera, viewport);
            //
            addEventListener(Event.ENTER_FRAME, render);
        }
        
        private function render(e:Event):void
        {
            sphere.localRotationY +=1;
            renderEngine.renderScene(scene, camera, viewport);
        }
    }
}

 

 

使用更短的代码:

每次我们准备创建一个 Papervision3D 应用我们可以拷贝这个类到新的应用中去.但有没有更简洁的方式呢?每个
Papervision3D 项目都包含了基本的组件—摄影机、场景、渲染器、观察口.每次定义并引入这些类都在重复劳动.聪明的程序员便想办法找出一个更高效的方案.很幸运,Papervision3D
包含了一个 BasicView 类.此类包含我们需要的基本组件.BasicView 是继承自 Sprite 的,我们可以实例化它并加入到舞台去或用来扩展我们的文档类.本书将使用它.

 

package { 
  import flash.events.Event; 
  
  import org.papervision3d.objects.primitives.Sphere; 
  import org.papervision3d.view.BasicView; 
  
  public class BasicViewExample extends BasicView 
  { 
    private var sphere:Sphere; 
    public function BasicViewExample() 
    { 
      stage.frameRate = 40; 
  
      sphere = new Sphere(); 
      scene.addChild(sphere); 
      
      startRendering(); 
    } 
    
    override protected function onRenderTick(e:Event=null):void 
    { 
      sphere.localRotationX +=1; 
      super.onRenderTick(); 
    } 
  } 

 

 

posted on 2010-08-24 09:40  『小小菜鸟』  阅读(1260)  评论(0编辑  收藏  举报