Sealyu

--- 博客已迁移至: http://www.sealyu.com/blog

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  618 随笔 :: 87 文章 :: 225 评论 :: 0 Trackbacks
你可以使用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

posted on 2008-11-13 20:54 seal 阅读(2235) 评论(0)  编辑  收藏 所属分类: Flex+ActionScript

只有注册用户登录后才能发表评论。


网站导航: