3D技術對我們來說已經非常熟悉了,最常用的3D API有OpenGL和Microsoft的Direct 3D,在桌面游戲中早已廣泛應用。對於J2ME程序而言,Mobile 3D Graphics API(JSR184)的出現,使得為手機應用程序添加3D功能成為可能。
JSR184標准(M3G:Mobile 3D Graphics)為Java移動應用程序定義了一個簡潔的3D API接口,J2ME程序可以非常方便地使用M3G來實現3D應用比如游戲等等。M3G被設計為非常輕量級的,整個API的完整實現不超過150kb。
M3G是J2ME的一個可選包,以OpenGL為基礎的精簡版,一共有30個類,運行在CLDC1.1/CLDC2.0上(必須支持浮點運算),可以在MIDP1.0和MIDP2.0中使用。目前,支持M3G的手機有Nokia 6230/3650/7650/6600、Siemens S65/CX65/S55/M55、Sony-Ericsson K700i/P800/P900、Moto 220/T720等。M3G只是一個Java接口,具體的底層3D引擎一般由C代碼實現,比如許多手機廠商的3D引擎采用的便是SuperScape公司的Swerve引擎,這是一個專門為移動設備設計的高性能3D引擎。
類似於Microsoft的D3D,M3G支持兩種3D模式:立即模式(immediate mode)和保留模式(retained mode)。在立即模式下,開發者必須手動渲染每一幀,從而獲得較快的速度,但代碼較繁瑣;在保留模式下,開發者只需設置好關鍵幀,剩下的動畫由M3G完成,代碼較簡單,但速度較慢。M3G也允許混合使用這兩種模式。
3D模型可以在程序中創建,但是非常繁瑣。因此,M3G提供一個Loader類,允許直接從一個單一的.m3g文件中讀入全部3D場景。m3g文件可以通過3D Studio Max之類的軟件創建。
如果熟悉OpenGL,那麼M3G是非常容易理解的。在M3G中,Graphics3D是3D渲染的屏幕接口,World代表整個3D場景,包括Camera(用於設置觀察者視角)、Light(燈光)、Background(背景)和樹型結構的任意數量的3D物體。3D對象在計算機中用點(Point, Pixel)、線(Line, Polyline, Spline)、面(Mesh)來描述,具體存儲和運算(如旋轉、投影)都是矩陣運算和變換。
SUN的WTK2.2已經內置了M3G的實現包,如果安裝了WTK2.2,就可以在模擬器上運行3D MIDP程序。可以參考WTK2.2的示例demo3d。
下面是一個最簡單的M3G程序,來自Sony-Ericsson的示例代碼,它創建一個旋轉的金字塔,可以從 此處下載完整代碼並在WTK2.2中運行。
首先,我們要獲得唯一的Graphics3D實例,用於渲染3D場景。Graphics3D是一個Singleton實現,可以在任何地方獲得:
g3d = Graphics3D.getInstance();