Papervision3D入门第6步

分享Flash3DPapervision3D by 达达 at 2007-10-28

呵呵,终于还是写了。。本来不想这篇的,我觉得没什么好写的,看官方例子就懂了。但是少了建模工具的协作,教程似乎少了些实际意义,所以还是写了。

建模过程略,如果有人需要我可以做个简单视频。

达达不会用3Ds MAX,所以这篇教程选择的是Google SketchUp Pro 6,它是我见过最容易上手的3D建模工具了。。。我刚使用,就能建出我在3Ds MAX建不出来的模型,所以挺喜欢它的 :) 。虽然不是用3Ds MAX,但是最后导出的模型都是Collada文件,所以不用担心你用的建模工具和我的不一样,有兴趣就继续往下吧。

直接进入主题,使用Collada模型文件,和我们前面的基本教程中教的内容没有多大差别,唯一不同的地方就是显示对象换成了Collada类型,并且需要根据Collada的模型文件中的材质贴图设置,相应的在AS3代码中进行贴图。这一步也是初使用Collada模型的朋友,最容易失败的地方,这个地方处理好了,就没什么难度了 :)

这里我只写出代码有变化的地方,完整代码请参考以前的教程。首先,需要引用Collada类,并将3D模型文件作为内嵌资源,嵌入到程序中:

//...
import org.papervision3d.objects.Collada;
//...

[SWF(width='400',height='400',backgroundColor='0xFFFFFF',frameRate='30')]
public class Main extends Sprite
{
    //...
    [Embed(source='Demo.dae', mimeType='application/octet-stream')]
    private static var DemoModel:Class;
    //...
}

主意Embed标签的source和mimeType值,source是模型文件的相对路径,mimeType一定不要搞错了。

接着,我们需要在初始化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; 这样就可以了 ;)

显示效果如下:

PV3D对SkechUp导出的Collada模型似乎支持得不好,或者是SketchUp的Collada模型导出功能还不够完善,所以显示出来的效果和建模时的效果有些差别。

modeling3.png

完整项目文件:try08_sketchmodeling.rar