开源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等包在同一个目录,如下图
1、新建一个文件夹,把pv3d解压后的所有包放到这个文件夹里面,我们就可以开始了。
打开flash CS3(或cs4)新建一个fla文件,以"test01.fla"为文件名保存在主包里,和刚才解压的pv3d的包在同一个包中。
下面属性框中:
祯数调到30fps;
窗口大小用400*400;
文件类:test01
(另外语言如果默认不是actionscript3需要改成actionscript3)
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社区天地会
- 评论
-
- [使用Ctrl+Enter键可以直接提交]
表情图标
Advertise
Category
Time Counter
离十一还有
Recent Article
- 1.工作笔记:AS3加载外部图片,有加载百分比
- 2.document.documentElement和document.body的区别
- 3.100种增加网站流量的方法
- 4.用div+css模拟表格对角线
- 5.如何做一个好的技术型领导
- 6.苍井空是谁?
- 7."心态"新解
- 8.程序员特有的9个坏习惯
- 9.AS3入门之简单Loading效果
- 10.系统问题:浏览器无法打开png图片
- 11.AS3中以post和get方式提交数据
- 12.defaultTextFormat和setTextFormat()区别
- 13.AS3中超方便地遍历xml
- 14.pv3d中物体常用的移动属性
- 15.开源Flash 3D引擎Papervision3d
- 16.as3 判断鼠标滚轮前滚或后滚
- 17.js:行向上替换滚动效果
- 18.为什么要清净?(禅与佛)
- 19.扩展window.setTimeout方法
- 20.收集2010的搞笑短句



