2009年1月1日星期四

在Flex中进行三维建模

这个题目起得有点不好,事实上并非在Flex中进行建模,而是通过Flex在浏览器中使用三维模型。本文主要涉及Google SketchUp的建模和Flex中使用开源(MIT许可)的Papervision3D库进行模型加载和使用。

这是一个对“水立方”进行建模表现的例子,当然,这个模型不是我做的,而是从在线模型库中下载的。事实上,使用SketchUp可以用比3DS Max等专业建模软件简单得多的操作来进行建模,同时,你也可以导入其它建模软件的模型(3ds、dwg等)。而使用SketchUp的主要目的在于其特殊的导出功能——KMZ格式。

看一下SketchUp建模的效果:

建模以后导出的格式是个问题,我采用了KMZ方案,一方面将纹理和模型全部包含在一个ZIP文件中,很清爽,Flex中也能很方便地加载;另一方面,KMZ的模型可以直接在Google Earth中打开。

把“WaterCube.kmz”放到Flex项目的bin目录下,下面就是如何在Flex中使用它了。Flex的Papervision3D库可以从 http://code.google.com/p/papervision3d/ 获得,可以导入swc库,抑或直接导入源代码都可。

对于一个KMZ的模型来说,Papervision3D的处理出奇简单,几行代码就可以搞定,免了你使用单纯顶点模型再加载纹理进行贴图的诸多麻烦:
var model:KMZ = new KMZ();
model.load("WaterCube.kmz");

this._scene.addChild(model);


具体的代码就不赘述了,看一下浏览器中的效果:

5 条评论:

Unknown 说...

在代码
this._scene.addChild(model);
中,_scene是什么组件,我怎么试了一下提示是model不是可视化对象,错误,你是如何搞的呢?请教了。。在线等!!!!谢谢!

牛魔王 说...

org.papervision3d.scenes.Scene3D

Unknown 说...

我还是搞不出来,以为Scene3D不是可视化对象,显示不出来啊!
能否把整个代码贴出来呢?

牛魔王 说...

建议你好好看看文档,你需要在一个容器中加上Viewport3D对象、Camera3D对象以及渲染引擎,然后在需要的时候使用渲染引擎的renderScene()方法。

Unknown 说...

你能不能把代码贴出来啊