資源描述:
《在Java 3D中載入外部3D模型文件.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、在Java3D中載入外部3DJava3D雖然能支持眾多的外部3D模型文件,但能支持被Java3D使用的外部模型文件僅為.obj和.lwd兩種;分別對應(yīng)ObjectFile類和Lw3dLoader類。相比之下幾款主流的3D建模軟件都能生成.obj格式的文件,因此本文主要介紹使用ObjectFile類載入.obj文件的方法。ObjectFile類有三個構(gòu)造方法,分別為:ObjectFile()ObjectFile(intflags)ObjectFile(intflags,floatradians)其中flags為一個整型的
2、常量參數(shù),用于決定載入的3D模型以什么方式生成。參數(shù)radians用于決定載入模型的可顯示半徑。flags參數(shù)可在以下四個值之間任取一個或者用邏輯或("
3、")將幾個參數(shù)組合使用。ObjectFile.RESIZE:忽略被載入的模型大小,直接把載入的模型放在一個范圍在(1,1,1)到(-1,-1,-1)之間的立方體空間內(nèi),并把坐標(biāo)原點(diǎn)設(shè)為(0,0,0)。ObjectFile.REVERSE:反轉(zhuǎn)載入的外部模型,即可能看模型的后面。ObjectFile.TRIANGULATE:將模型的面以三角形方式顯示,此參數(shù)主要便于觀察
4、模型凹凸面。ObjectFile.STRIPIFY:以模型文件內(nèi)模型的實(shí)際情況顯示,此參數(shù)也是默認(rèn)參數(shù)。當(dāng)初始化了ObjectFile對象后就可以用load方法載入.obj格式的文件,如果模型中已包含了貼圖和光照的話也將一起被載入。load方法需要一個參數(shù)用于指出.obj格式文件所在的路徑,load方法有多個重載方法可以使參數(shù)即可以接受String類的值也可以接受Url類的值或者從輸入法流讀入,如果模型載入成功將返回一個Scene類的對象,如果載入失敗將拋異常。Java3D針對load方法定義了三個異常類:FileNo
5、tFoundException類:表示文件未找到。IncorrectFormatException類:表示文件格式不正確。ParsingErrorException類:裝載器解析文件時出錯。下面的代碼用以演示如何用load方法將一個模型載入到Scene類的實(shí)例:viewplaincopytoclipboardprint?SceneloadScene=null;intflag=ObjectFile.STRIPIFY;ObjectFileobj=newObjectFile(flag);try{loadScene=obj.l
6、oad(this.getClass().getClassLoader().getResource(filename));}catch(FileNotFoundExceptione){System.out.println("文件未找到或文件路徑不正確");e.printStackTrace();}catch(IncorrectFormatExceptione){System.out.println("文件格式不正確");e.printStackTrace();}catch(ParsingErrorExceptione){
7、System.out.println("裝載器解析文件時出錯");e.printStackTrace();}SceneloadScene=null;intflag=ObjectFile.STRIPIFY;ObjectFileobj=newObjectFile(flag);try{loadScene=obj.load(this.getClass().getClassLoader().getResource(filename));}catch(FileNotFoundExceptione){System.out.print
8、ln("文件未找到或文件路徑不正確");e.printStackTrace();}catch(IncorrectFormatExceptione){System.out.println("文件格式不正確");e.printStackTrace();}catch(ParsingErrorExceptione){System.out.println("裝載器解析文件時出錯");e.printStackTrace();}雖然至此我們已經(jīng)載入了一個.obj格式文件的3D模型,但把它載入到場景后我們卻模型并沒有按我們想像的那么顯
9、示。對比在3D建模工具中看到模型的樣子,我們的模型被繞X軸逆時針的旋轉(zhuǎn)了90度,這主要是Java3D的坐標(biāo)系和大多數(shù)的3D建模工具的坐標(biāo)系不同。我們假設(shè)用戶的顯示器是垂直于桌面上,那么在Java3D中顯示器的寬代表X軸,顯示器的高代表Y軸,顯示器垂直朝向用戶的方法為Z軸(此方向也是Z軸的正數(shù)方向)。而多數(shù)的建模工具使用的是世界坐標(biāo)