你可以使用3DMAX来建模,或者像我一样使用比较容易上手的建模工具Google SketchUp Pro 6,反正最后导出的文件类型都是Collada。
使用Collada模型文件,和我们前面的基本教程中教的内容没有多大差别,
唯一不同的地方就是显示对象换成了Collada类型,并且需要根据Collada的模型文件中的材质贴图设置,相应的在AS3代码中进行贴图。
这一步也是初使用Collada模型的朋友,最容易失败的地方,这个地方处理好了,就没什么难度了。
文本大部分代码建立在
Papervision3D入门-创建PV3D基本内置模型(球体,立方体,柱状体等) 一文中的代码上。
首先,需要引用Collada类,并将3D模型文件作为内嵌资源,嵌入到程序中: //...
import org.papervision3d.objects.Collada;
//...
[SWF(width='400',height='400',backgroundColor='0xFFFFFF',frameRate='30')]
public class Main extends Sprite
{
//...
// 注意Embed标签的source和mimeType值,source是模型文件的相对路径,mimeType一定不要搞错了。
[Embed(source='Demo.dae', mimeType='application/octet-stream')]
private static var DemoModel:Class;
//...
}
接着,我们需要在初始化3D场景的时候把模型一起初始化:
//...
private function Init3D():void
{
var _materialList:Object = {Sketchy_Stone_Ashlar: new BitmapFileMaterial("demo2/Sketchy_Stone_Ashlar.jpg") };
_displayObj = new Collada(XML(new DemoModel()), new MaterialsList(_materialList));
_displayObj.x = 30;
_displayObj.y = -60;
}
//...
注意上面的_materialList中的Sketchy_Stone_Ashlar属性,这个属性一定要和Collada的模型文件中的材质贴图名称一样!
否则什么也显示不出来,比如我的模型中的材质贴图信息如下:
<library_materials>
<material id="Sketchy_Stone_AshlarID" name="Sketchy_Stone_Ashlar">
<instance_effect url="#Sketchy_Stone_Ashlar-effect"/>
</material>
<material id="BackColorID" name="BackColor">
<instance_effect url="#BackColor-effect"/>
</material>
<material id="ForegroundColorID" name="ForegroundColor">
<instance_effect url="#ForegroundColor-effect"/>
</material>
</library_materials>
Sketchy_Stone_Ashlar对应的就是上面的name=”Sketchy_Stone_Ashlar”,我这里没有相应的设置
BackColor和ForegroundColor,因为这两个是SketchUp自动生成的,因为这两个材质贴图不影响我的模型的显示。
如果你是用3Ds MAX你可以在设置材质贴图的时候设置这个名称,记得这个名称要符合命名规范,3Ds MAX自动给你生成的通常是不符合命名规范的,用起来会有些问题。
其它的代码就和显示一个球体模型或者立方体模型一样了,大家参考以前的代码吧。
如果你和我一样使用SketchUp的话,那请你再继续往下看…
按我上面的步骤做,显示SketchUp导出的3D模型时是会出错的,运行时会报“无法访问空对象引用的属性或方法。”。需要对PV3D的代码做一处小修
改,来避免这个空引用异常。打开PV3D的Collada类的源文件,找到379行处的var len:Number =
semVertices.length;,将它改为var len:Number = semVertices == null ? 0 :
semVertices.length; 这样就可以了。
显示效果如下:http://flex.unbe.cn/PV3D/Try08_SketchModeling/Main.swf
PV3D对SkechUp导出的Collada模型似乎支持得不好,或者是SketchUp的Collada模型导出功能还不够完善,所以显示出来的效果和建模时的效果有些差别。
完整项目文件:try08_sketchmodeling.rar
dmh2002注:本文在原文基础上略有改变。
原文地址:http://www.unbe.cn/blog/?p=385