网上关于PV3D导入DAE模型的例子都非常多,可惜我研究了半天,一个都没成功,或者是破面问题,或者是贴图不显示,再或者贴图乱掉了。今天晚上终于搞定,心得发上来。
制作模型的软件是SketchUp Pro 7.1,选这个主要是体积小,建模方便,毕竟Maya和3Ds max都上是GB的体积,SketchUp才30MB。
在SketchUp中建好模,注意不能让模型成组,选择文件-导出3D模型,注意右下角的选项,勾上“输出材质纹理”,其他都可以不选,导出格式选dae即可。
找到这个dae文件,用记事本打开,dae其实就是个xml文件,打开后搜索init_from,然后在下方不远处会看到大致如下的内容:
<image id="ID171"><init_from>car/texture0.jpg</init_from></image>
这里显示的就是模型贴图的路径(如果贴了图的话就有),改成这样:
<image id="ID171"><init_from>texture0.jpg</init_from></image>
也就是删掉目录,只剩贴图文件名,然后相应地,将car文件夹里的贴图全部复制出来。
不知道问什么,PV3D似乎不会去搜索文件夹下的东西,只认和dae文件同目录下的贴图,这就是我一直没搞定贴图的元凶。
然后是PV3D的调用代码,代码一贯很简洁,只要3行即可,创建DAE对象需要引入org.papervision3d.objects.parsers.DAE,创建代码如下:
1
2
3
|
var mod:DAE = new DAE();
mod.addEventListener(FileLoadEvent.LOAD_COMPLETE, onload); mod.load( "house.dae" );
|
这里使用了addEventListener来监视模型的载入,接着相应LOAD_COMPLETE事件;
1
2
3
4
|
private function onload(e:FileLoadEvent): void
{ mod.scale= 20 ;<br> scene.addChild(mod);
} |
需要注意的是,SketchUp里的坐标单位和PV3D里的单位不同(应该有个对应关系,至少我现在没发现),所以SketchUp里看起来很大的模型,放在PV3D里也许小到被忽略,所以用scale放大20倍,其他模型再具体调整。