楊乾
摘要:介紹了android平臺對OpenGL的支持,流行的obj三維文件格式。并論述了如何在android平臺中對obj格式進行載人和渲染。重點是介紹了如何用程序?qū)崿F(xiàn)obj模型的載人和渲染。
關(guān)鍵詞:三維模型; opengl; obj; android; 3d
中圖分類號:TP18文獻標識碼:A文章編號:1009-3044(2012)16-3951-03
Load and Render Three-dimensional Model of Obj in the Android
YANG Qian
(Department of Automation, Xiamen University, Xiamen 361005, China)
Abstract:Introduce the support for OpenGL of the Android platform and popular obj 3D file format.discusses how to load and render the obj model in the android .the focus is how to load and render the obj model with the program.
Key words:three-dimensional model; opengl; obj; android; 3d
OpenGL是個專業(yè)的3D程序接口,是一個功能強大,調(diào)用方便的底層3D圖形庫。OpenGL的前身是SGI公司為其圖形工作站開的IRIS GL。IRIS GL是一個工業(yè)標準的3D圖形軟件接口,功能雖然強大但是移植性不好,于是SGI公司便在IRIS GL的基礎(chǔ)上開發(fā)OpenGL。Android 3D引擎采用的是OpenGL ES。OpenGL ES是一套為手持和嵌入式系統(tǒng)設計的3D引擎API,由Khronos公司維護。在PC領(lǐng)域,一直有兩種標準的3D API進行競爭,OpenGL和DirectX。一般主流的游戲和顯卡都支持這兩種渲染方式,Direc? tX在Windows平臺上有很大的優(yōu)勢,但是OpenGL具有更好的跨平臺性。由于嵌入式系統(tǒng)和PC相比,一般說來,CPU、內(nèi)存等都比PC差很多,而且對能耗有著特殊的要求,許多嵌入式設備并沒有浮點運算協(xié)處理器,針對嵌入式系統(tǒng)的以上特點,Khronos對標準的OpenGL系統(tǒng)進行了維護和改動,以期望滿足嵌入式設備對3D繪圖的要求。
Android系統(tǒng)使用OpenGL的標準接口來支持3D圖形功能,android 3D圖形系統(tǒng)也分為java框架和本地代碼兩部分。本地代碼主要實現(xiàn)的OpenGL接口的庫,在Java框架層,javax.microedition.khronos.opengles是java標準的OpenGL包,android.opengl包提供了OpenGL系統(tǒng)和Android GUI系統(tǒng)之間的聯(lián)系。
在真正的游戲中,我們要繪制的3D物體往往十分復雜,我們通常的做法都是在專門的建模工具中創(chuàng)建模型,再將模型導出為特定的格式,然后在我們的程序載入這個模型并進行渲染。在計算機平臺上,常用的3D模型有3DS、OBJ、MD2、MD3、MDL等多種格式。這里只介紹OBJ模型。
public int illum;//光照模型illum
public String textureFileKa;//環(huán)境反射指定紋理文件map_Ka
public String textureFileKd;//漫反射指定紋理文件map_Kd
public String textureFileKs;//鏡面反射指定紋理文件map_Ks
}
大模型TDModel類
public class TDModel {
Vector
public float left = 0;//模型最左邊
public float right = 0;//模型最右邊
public float front = 0;//模型最前邊
public float back = 0;//模型最后邊
public float bottom = 0;//模型最上邊
public float top = 0;//模型最下邊
public void draw(GL10 gl) {}//定義模型渲染的方法
}
同時定義了兩個輔助類對obj和mtl文件進行加載。Obj文件加載類
public class OBJParser {
//返回讀取的模型,模型坐標為opengl左手坐標,yz軸根據(jù)3dmax翻轉(zhuǎn)public TDModel parseOBJ(String fileName) {}}
mtl文件加載類
public class MTLParser {
//返回材質(zhì)庫
public static Vector
}
這些加載和渲染方法定義好之后就剩下android平臺的實現(xiàn)了。Android的界面顯示需要定義Activity,界面中需要View來顯示3d模型。Android專門定義了GLSurfaceView建立了與opengl之間的聯(lián)系。
所以定義類OBJToDATASurfaceView繼承GLSurfaceView實現(xiàn)Renderer接口。就可以繪制出obj模型了。一下是一個obj模型在android上各個側(cè)面的渲染截圖。
Obj模型文件的載人和渲染已經(jīng)完成,程序渲染效果比較理想,材質(zhì)也渲染出來了,程序還實現(xiàn)了模型貼圖的渲染。如果要實現(xiàn)android游戲的開發(fā),除了模型外,還要有動畫實現(xiàn),物理引擎等很多復雜的東西,但是模型載人是這些游戲的基礎(chǔ)。
[1]劉甫迎.Android移動編程實用教程[M].北京:電子工業(yè)出版社,2012.
[2]吳亞峰,蘇亞光. Android游戲開發(fā)大全[M].北京:人民郵電出版社,2012.
[3]郝玉龍.Android程序設計基礎(chǔ)[M].北京:清華大學出版社,2012.
[4]安吉爾.交互式計算機圖形學[M].5版.北京:電子工業(yè)出版社,2009.
[5]呂???周小平.實戰(zhàn)OpenGL三維可視化系統(tǒng)開發(fā)與源碼精解[M].北京:電子工業(yè)出版社,2009.
[6]希爾.計算機圖形學[M].3版.北京:清華大學出版社,2007.
[7]徐明亮,盧紅星,王琬.OpenGL游戲編程[M].北京:機械工業(yè)出版社,2008.