9


使用 Mobile Graphics

這一章簡介如何使用圖形內容。Sun JavaTM Wireless Toolkit for CLDC 提供三個 API,以提供完整的互動 2D 與 3D 圖形能力:


9.1 使用 Mobile 3D Graphics API

JSR 184 是定義 Mobile 3D Graphics (M3G) API for the J2ME 的規格。這個 API 以精簡的套裝軟體,提供適合 CLDC/MIDP 裝置的 3D 功能。此 API 提供二種顯示 3D 圖形內容的方法。立即模式 API 讓應用程式能夠立即建立與處理 3D 元素。在這一層之上是場景圖形 API (又稱為保留模式),它可讓應用程式能夠載入與顯示事先設計好的完整 3D 場景。應用程式可以自由使用最適合的方法,或混合使用立即模式與保留模式 API。JSR 184 規格也為場景圖形定義一種檔案格式 (.m3g)。

如需詳細資訊,請於 http://jcp.org/en/jsr/detail?id=184 參閱 JSR 184 規格。

JSR 184 為 CLDC/MIDP 裝置提供標準的 API,促成了新一代的 3D 應用程式。接著立即模式與 OpenGL ES (3D 圖形的標準輕型 API) 相容。如需 OpenGL ES 的詳細資訊,請參閱 http://khronos.org/

9.1.1 立即模式

立即模式適合用於以演算法產生 3D 圖形內容的應用程式,例如科學可視化或統計圖形。應用程式會建立 3D 物件,並直接進行處理。

如需立即模式的範例,請參閱 Demo3D 應用程式範例中的 Life3D MIDlet。

9.1.2 保留模式

大部分應用程式 (尤其是遊戲) 使用保留模式或稱場景圖形 API。在此方法中,圖形設計者或藝術家使用 3D 模型建立軟體,來建立場景圖形。場景圖形儲存成 JSR 184 格式的檔案。場景圖形檔與應用程式隨附在一起。在執行階段,應用程式使用場景圖形 API 載入及顯示檔案。

應用程式可以處理載入場景圖形的不同部分,讓角色更生動或建立其他效果。基本策略是儘可能在模型建立軟體中處理各項工作。在執行階段,應用程式可以抓取並處理場景圖形的不同部分,這也包括動畫或其他效果的路徑。

如需保留模式的範例,請參閱 Demo3D 應用程式範例中的 retainedmode MIDlet。

9.1.3 品質與速度之間的取捨

開發 MIDP 時的一大難題,是一般裝置的環境都受到限制。與桌上型電腦相比,MIDP 裝置的處理器速度較慢,記憶體也比較少。這些難題也一樣影響 3D 圖形。為配合各式各樣不同的實作,JSR 184 規格提供各種機制,以儘可能提高 3D 場景的顯示效率。

一種作法是 scoping (範圍),這種技術的作法是由您告訴 3D 圖形實作,物件何時不會彼此互動。例如,如果定義一個房子的場景圖形,就可以用 scoping 指定地下室的光線不會影響二樓臥室的外觀。Scoping 會減少顯示某個場景所需的計算次數,讓實作的工作變得比較容易。

但是一般而言,提高 3D 場景描繪速度的最佳方法,是犧牲一些品質。Mobile 3D Graphics API 包含描繪提示,讓應用程式可以建議實作如何犧牲品質,以改善描繪速度。

9.1.4 建立 Mobile 3D Graphics 內容

大部分行動 3D 應用程式會使用資源檔案中的場景圖形,來描述物件、場景與角色。場景圖形的建立,通常是由圖形設計者或藝術家 (而不是程式設計者) 使用標準 3D 模型工具來進行。

有數家供應商提供工具,可編寫內容,並將檔案轉換成 JSR 184 格式。Superscape (http://superscape.com/) 就是供應商之一。

因為在使用立即模式 API 的應用程式中,不太容易建立與處理 3D 圖形內容,所以大部分應用程式會儘可能依靠場景圖形檔。藉由儘可能在設計時將最多的內容放入場景圖形檔,將會大量簡化應用程式在執行階段的工作。


9.2 描繪可縮放式向量圖形內容

可縮放式向量圖形 (SVG) 是由全球資訊網協會定義的標準。它是用來描繪精緻互動式 2D 圖形的 XML 語法。

Sun JavaTM Wireless Toolkit for CLDC 模擬器支援 JSR 226,即 Scalable 2D Vector Graphics API for J2ME。JSR 226 是用於載入、處理、描繪與播放 SVG 內容的 Java ME API。SVG Tiny 使用精簡但功能強大的 XML 格式,描繪精緻互動式的動畫 2D 內容。

儘管使用文字編輯器也可製作 SVG 內容,但大多數使用者更喜歡使用編寫工具。以下提供了三種工具︰

使用 SVG 內容的 Java ME 應用程式建立的圖形效果,可適應使用者顯示器的顯示解析度和尺寸外型。

SVG 影像可使用兩種方式成為動畫。一種是使用宣告式動畫 (Declarative Animation)。另一種是藉由 API 呼叫重複修改 SVG 影像參數 (例如顏色或位置)。 第 A.21.3 節, 播放 SVG 動畫將說明宣告式動畫。


9.3 OpenGL® ES 簡介

JSR 239 定義兩個 Java 程式設計語言連結:API OpenGL® for Embedded Systems (亦稱為 OpenGL® ES) 與 EGL。OpenGL® ES 屬於 OpenGL®,是用於 3D 圖形的標準 API,普遍應用於桌上型電腦。EGL 是標準平台介面層。OpenGL® ES 與 EGL 均由 Khronos Group (http://khronos.org/opengles/) 開發。

物件導向的 JSR 184 要求極強的功能,而 OpenGL® 是低階圖形程式庫,適於存取硬體加速 3D 圖形。請研究 OpenGLESDemo 範例專案程式碼。