如何使用Papervision3d(更新,工具改用 Flex 2)

PaperVision3D(简称PV3D)是由Carlos Ulloa创建,后加入的人有John Grden,Ralph Hauwert.
John Grden可是大名鼎鼎啊(Red 5和Xray的作者).他用PaperVision3d写了个游戏,非常酷.
http://www.rockonflash.com/demos/pv3d/macworld/demo/as3/index.html

http://www.paperworld3d.com/demos/obstaclecourse/ObstacleCourse.html

我简单介绍一个简单的PV3D例子(见注释):

package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
   
    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.core.proto.MaterialObject3D;
    import org.papervision3d.materials.*;
    import org.papervision3d.core.geom.Mesh3D;
    import org.papervision3d.objects.*;
    import org.papervision3d.scenes.Scene3D;

    [SWF(width='800',height='600',backgroundColor='0x000000',frameRate='60')]
    public class TestSphere extends Sprite
    {
        private var scene:Scene3D;
        private var camera:Camera3D;
        private var container:Sprite;

        private var sphere:Mesh3D;
        public function TestSphere()
        {
            // Setup Papervision3D
            setupPV3D();
            addEventListener(Event.ENTER_FRAME, render);            
        }
        private function setupPV3D():void
        {
            // PV3D需要一个容器来包含所有需要渲染的3d物体.
            container = new Sprite();
            container.x = 400;
            container.y = 300;
            addChild(container);
            
           /**
            * 所有3d物体都要添加到scene中
            *Scene分为两种Scene3D和MovieScene3D.
            *Scene3D中,所有3d物体都直接绘制在container中.
            *MovieScene3D中,3d物体都直接绘制在物体自身的container中,所有这些container都在主容器(container)内.
            */
            scene = new Scene3D(container);
            camera = new Camera3D();
            //PV3D目前的材质类型有4中(线框贴图,颜色贴图,位图贴图,影片贴图)
            var wireframeMaterial:MaterialObject3D=new WireframeMaterial(0x0000ff,50);
            /**
             *PV3D中所有物体都继承自DisplayObject3D(包括Camera3D)
             *DisplayObject3D的一些属性和普通的MovieClip相似,见下面sphere.
             */
            sphere=new Sphere(wireframeMaterial,800);
            sphere.x=sphere.y=sphere.z=100;
            sphere.rotateX=sphere.rotateY=sphere.rotateZ=10;
            sphere.scaleX=sphere.scaleY=sphere.scaleZ=100;
            sphere.visible=true;
            //最后要把物体添加到场景中.用addChild,删除用removeChild.
            scene.addChild(sphere);
        }
        private function render(event:Event):void
        {
            sphere.rotationY += 3;
            sphere.rotationX = container.mouseY / 2;
            //调用它渲染整个场景
            scene.renderCamera(camera);
        }
    }
}
 
这样,第一个PV3D例子就出来了.

PV3D的优点: 渲染速度快,支持较大的屏幕尺寸.
PV3D的缺点: 伪3D,不能正确的透视,不能正确的裁剪

和PV3D刚好相反的是:伟大的SWFZ(改写自Irrlicht)
SWFZ_DEMO2
SWFZ的缺点: 渲染速度较慢(其实已经非常快了),支持较小的屏幕尺寸(由于BitmapData.setPixel()的限制).
SWFZ的优点:  True 3D,正确的透视,正确的裁剪

我把Papervision3d的一些例子集中起来,大家可以学习一下.
可以从这里下载Papervision3d:http://svn1.cvsdude.com/osflash/papervision3d/
http://blog.papervision3d.org/

我也打包了一份.PV3D.rar

Share

0 条评论

留下评论