开源Flash 3D引擎Papervision3d

开源Flash 3D引擎Papervision3d

这两天需要学习Flash 3D相关技术,找到了开源Flash 3D引擎Papervision3d,在众多开源3D引擎中,pv3d在渲染方面占用CPU是最少的,其最新框架是用AS3编写的。

Papervision3d官方网站: http://www.papervision3d.org/

pv3d原理解释:
要使papervision3D成像,必须至少初始化下面4个东西。
窗口:用户观看的窗口,简单的可以想成就是flash里面的画布大小。窗口也可以理解成渲染的尺寸,否则画面就无限大了。
场景:场景是指整个三维的场景。
摄像机:控制镜头、视角。
渲染器:如果没有这个东西,所有以上的东西都只是数据,渲染器就是把所有数据变成图像的东西。



先看效果:



下面我们使用pv3d包做一个简单的例子:

先下载pv3d傻瓜包,新建的flash文件要和解压的文件com、org等包在同一个目录,如下图
pv3d


1、新建一个文件夹,把pv3d解压后的所有包放到这个文件夹里面,我们就可以开始了。


打开flash CS3(或cs4)新建一个fla文件,以"test01.fla"为文件名保存在主包里,和刚才解压的pv3d的包在同一个包中。
下面属性框中:
祯数调到30fps;
窗口大小用400*400;
文件类:test01
(另外语言如果默认不是actionscript3需要改成actionscript3)
pv3d


2、新建一个ActionScript文件,"test01.as"为文件名保存,里面写:

Package{
 public class test01 extends Sprite {
  public function test01():void {
  }
 }
}
知道as3的都知道,这个是基本的类结构吧。所有成品的pv3d程序,都需要继承于Sprite类。Test01里含有一个test01构造函数,程序自动会先找这个运行。


3、初始化好了4要素

private var viewport:Viewport3D=new Viewport3D(400,400); //初始化窗口
private var scene:Scene3D =new Scene3D; //初始化场景
private var camera:FreeCamera3D =new FreeCamera3D; //初始化摄像机
private var renderer:BasicRenderEngine= new BasicRenderEngine; //初始化渲染器


4、运用上面的四个对象记得把窗口加入到stage里,别忘了哟,所以要写上这句

addChild(viewport);

这句就可以渲染一张图勒。
renderer.renderScene(scene,camera,viewport); 

但是我们肯定不想就渲染一张图就完毕,我们想能动起来,所以需要能1秒钟渲染30张左右。
//所以加入一个enterframe
addEventListener(Event.ENTER_FRAME,process); 
private function process(evt:Event):void { 
//把刚才那句渲染的句子放到enterframe这里面来,每秒渲染器就会尽最大努力刷新30次,我们的场景就会动起来了。
renderer.renderScene(scene,camera,viewport); 
}

现在我们试着放一个球到场景里去。先在主包里面放一张任意的jpg图片(随便什么jpg图都可以),命名为‘map.jpg’。
构造Sphere的4个参数分别代表:贴图,半径大小,横行段数,竖行段数
private var sphere:Sphere= new Sphere(new BitmapFileMaterial('map.jpg'),400,12,12);

new BitmapFileMaterial('map.jpg')是直接构建一个位图贴图的快捷写法。‘map.jpg’就是主包里面那张图。如果你非要把图放在其他包里,就写‘其它什么什么包/map.jpg’。

这里看清楚哟~是场景在addChild
scene.addChild(sphere);

为了让我们的程序可以执行,我们必须在开始导入这些类。
import flash.display.Sprite;
import flash.events.Event;
import org.papervision3d.cameras.FreeCamera3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.primitives.Sphere;




这时我们运行程序,就能看到一个我们可爱的小球(没有动的)了。

为了不至于错觉图像定住了(实际上没有定住,只是场景里面没有东西在动而已,渲染器仍然在以每秒30张图的速度刷新着一个相同位置的小球而已。),所以我们在enterframe的方法里加入一句。
延Y轴以顺时针方向,小球每祯转1。
sphere.rotationY+=1; 


ctrl+enter,运行发动!

兴奋吧,去泡杯茶小小的庆祝一下吧~站起来跳两下也可,身边有MM也可拥抱(别太久=_=)。

想学习更多有关flash 3d的技术,可到flash社区天地会

posted on 2010-06-30 16:31 发布:水寒冰 阅读(215) 评论(0) 收藏 所属分类: FLASH AS
  • 评论
  • 点击刷新
  • [使用Ctrl+Enter键可以直接提交]

表情图标

[smile][confused][cool][cry][eek][angry][wink][sweat][lol][stun][razz][redface][rolleyes][sad][yes][no][heart][star][music][idea]
Advertise
Category
Time Counter

离十一还有

Recent Article
Statistics
Recent Comments
Archive
Links
Support
《良机》 鲜果阅读器订阅图标
 
TOP