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 閱讀(2249) 評論(0)  編輯  收藏 所屬分類: Flex+ActionScript
          主站蜘蛛池模板: 太仆寺旗| 怀安县| 丹江口市| 司法| 富平县| 莱芜市| 辛集市| 云南省| 柯坪县| 长治县| 休宁县| 蓬莱市| 潼南县| 裕民县| 绥滨县| 阿尔山市| 桐庐县| 固安县| 金阳县| 老河口市| 烟台市| 康平县| 墨竹工卡县| 手机| 大埔区| 贵德县| 葵青区| 安福县| 阜平县| 墨脱县| 锡林浩特市| 财经| 电白县| 楚雄市| 东台市| 玉林市| 任丘市| 三门县| 河源市| 得荣县| 宁陵县|