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例子(见注释):
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例子(见注释):
CODE:
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);
}
}
}
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
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
