9


Mobile Graphics の使用

この章では、グラフィックスコンテンツの操作について概要を説明します。Sun JavaTM Wireless Toolkit for CLDC には、対話型 2D および 3D グラフィックスの総合的な機能を提供する 3 つの API が用意されています。


9.1 Mobile 3D Graphics API の使用

JSR 184 は、J2ME 用の Mobile 3D Graphics (M3G) API を定義する仕様です。この API は、CLDC や MIDP 準拠のデバイスに適したコンパクトなパッケージで 3D 機能を提供します。この API では、2 つの方法で 3D グラフィックスコンテンツを表示できます。「即時モード」の API を使用すると、アプリケーションで 3D 要素を直接作成および操作できます。このモードの上に、「シーングラフ」または「リテインモード」と呼ばれる API があります。これを使用すると、あらかじめ作成されている 3D シーン全体をロードして表示できます。アプリケーションでは、リテインモード API と即時モード API のどちらか適切な方を使用するか、両方を組み合わせて使用することができます。JSR 184 仕様では、シーングラフのファイル形式 (.m3g) も定義されています。

詳細については、次の JSR 184 仕様を参照してください。
http://jcp.org/en/jsr/detail?id=184

JSR 184 には、新世代の 3D アプリケーションを作成できる、CLDC/MIDP デバイス用の標準 API が用意されています。これに対し、即時モード API には、軽量な標準 3D グラフィックス API である OpenGL ES との互換性があります。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 の開発における難問の 1 つは、デバイスの環境に制約があることです。デスクトップコンピュータに比べて、MIDP デバイスのプロセッサは低速で、メモリも少量です。この問題は 3D グラフィックスにも関連します。さまざまな実装に対応するため、JSR 184 仕様には 3D シーンをできるだけ効率よく表示するためのさまざまなメカニズムが用意されています。

その 1 つは「スコーピング」と呼ばれる手法です。この手法では、3D グラフィックスの実装に対して、どのような場合にオブジェクト間の相互作用を無効にするかを指示できます。たとえば、家のシーングラフを定義する場合、地階のライトが 2 階の寝室の外観に影響を与えないよう、スコーピングを使って指定できます。スコーピングを使用すると、シーンの表示に必要な計算回数が減少し、実装での処理が簡単になります。

ただし、3D シーンの描画速度を向上させるには、品質の面でいくらか妥協するのが最良の方法です。Mobile 3D Graphics API には「描画のヒント」が含まれており、品質面で妥協して描画速度を向上させる方法をアプリケーションで参照できます。

9.1.4 Mobile 3D Graphics コンテンツの作成

モバイル用 3D アプリケーションのほとんどは、リソースファイル内のシーングラフを使ってオブジェクト、シーン、および文字を記述します。通常は、プログラマではなくグラフィックデザイナーやグラフィックアーティストが、標準の 3D モデリングツールを使用してシーングラフを作成します。

一部のベンダーは、コンテンツ作成ツールや、ファイルを JSR 184 形式に変換するツールを提供しています。Superscape (http://superscape.com/) もこのようなベンダーの 1 つです。

アプリケーションで即時モード API を使って 3D グラフィックスコンテンツの作成や操作を行うことは、比較的難しい作業です。したがって、ほとんどのアプリケーションでは、できる限りシーングラフファイルが利用されます。設計時にできるだけ多くの情報をシーングラフファイルに含めることで、アプリケーションでの実行時の処理がかなり簡素化されます。


9.2 Scalable Vector Graphics コンテンツの描画

Scalable Vector Graphics (SVG) は、World Wide Web Consortium で定義された標準です。これは、高度な対話型 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 は、高度な対話型アニメーション 2D コンテンツを記述するための、コンパクトで強力な XML 形式です。

テキストエディタでも SVG コンテンツを作成することはできますが、多くの場合は作成ツールを使用します。ここでは、3 つのツールを紹介します。

SVG コンテンツを使用する Java ME アプリケーションでは、ユーザーのディスプレイの画面解像度とフォームファクタに適合したグラフィックス効果を作成できます。

SVG の画像は、2 つの方法でアニメートできます。1 つは、説明的アニメーションを使用する方法です。もう 1 つは、API 呼び出しを通して SVG 画像のパラメータ (色や位置など) を継続的に変更する方法です。説明的アニメーションについては、A.21.3, Play SVG Animationで説明します。


9.3 OpenGL® ES の概要

JSR 239 では、OpenGL® for Embedded Systems (OpenGL® ES) と EGL の 2 つの API を結び付ける Java プログラミング言語バインディングが定義されています。OpenGL® のサブセットである OpenGL® ES は、3D グラフィックスの標準 API であり、デスクトップコンピュータ上で広く使用されています。EGL は、標準的なプラットフォームのインタフェース層です。OpenGL® ES と EGL のどちらも、Khronos Group (http://khronos.org/opengles/) によって開発されています。

オブジェクト指向の JSR 184 では高度な機能が要求されますが、OpenGL® はハードウェアで高速化された 3D グラフィックスへのアクセスに適した低レベルなグラフィックスライブラリです。OpenGLESDemo サンプルプロジェクトのコードを参照してください。