Systems)とは主にスマートフォンやゲーム機上で動作する2D/3DグラフィックスAPIです。クロスプラットフォーム、ロイヤリティフリーなOpenGLのサブセットです。3DS等で採用されています。ESには大きくわけて2つのバージョンがあります。1.x固定機能パイプラインにて描画されます。2.x「固定機能パイプライン」の変わりにプログラマブルシェーダを使用します。プログラマブルシェーダとは頂点情報の変換やピクセル描画方法をプログラマが独自に設定でき、高度な特殊処理が利用できます。ES(1.x)(固定パイプライン)について説明をします。†X軸を横、Y軸を上、Z軸を奥行きとします。ESはステートマシンです。ステータスを変えて処理、ステータスを変えて処理...という具合に各命令は最後に指定された行列に対して実行されます。ESでは2つの行列を使用します。モデルの移動、回転、拡大/縮小を定める「モデル変換行列」があります。行列は4x4の行列です。点(X,Y,Z,W)の座標の集合です。して内部的に表現されています。wがゼロの場合は3次元ベクトルとなります。移動頂点座標とモデル変換行列から自分で計算できますが、通常は便利な命令があるのでそちらを利用すると良いでしょう。射影変換とは射影変換行列からモデルをどのように表示するかを指定します。視線の方向、角度、表示する画面の縦横比を設定します。†シーンを写す画面の形状(比率)を指定します。画面比率はw/h、奥行きはnear〜farの範囲が表示されます。ESはOpenGLからいくつかの機能が削除されたサブセットです。以下の機能(抜粋)が削除されていますので削除された命令が記述されたOpenGLのプログラムを動作させる場合には、代替えできる命令で置き換える必要があります。Toolkit)で動作させることができます。ここではJavaで動作させる場合を解説します。AndroidアプリケーションでOpenGLを使用する際の基本的な構成について以下の図のようになります。ESで使用する2つのクラスについて解説します。ESの処理を行う機能が実装されています。・UIスレッドとは別に専用のスレッドでレンダリングします。・連続したレンダリング、又はオンデマンドのレンダリングに対応しています。・OpenGLの呼び出しのトレースとエラーチェックができます。メソッドonTouchEvent()通常のViewと同じようにタッチスクリーンの操作のハンドリングを記述します。(例:タッチ操作でモデルの移動、回転、拡大/縮小等)GLSurfaceView.Rendererフレームのレンダリングを行います。プログラマはこのクラスを継承したクラスを作成し、GLSurfaceViewに登録(setRenderer())する必要があります。メソッドonSurfaceCreated()サーフェースが作成されるときに呼び出されます。端末がスリープ状態からレジュームされた時などにコンテキストが失われる場合があります。コンテキスとが失われるとコンテキストに関連付けられたリソースが削除されますのでレンダリングを続ける為にはリソースを再作成する必要があります。通常はこのメソッド内で行うと良いでしょう。onSurfaceChanged()画面サイズが変更されたときに呼び出されます。通常はここでビューポートの設定をすると良いでしょう。onDrawFrame()フレームを描画する時に呼び出されます。このメソッド内で描画処理を行うようにプログラムを記述する必要があります。GLSurfaceViewのonResume(),onPause()を呼び出します。アクティビティのライフサイクルに合わせた動作となります。アクティビティが一時停止(onPause())するとOpenGLのレンダリングは一時停止し、アクティビティが回復(onResume())するとOpenGLのレンダリング処理は再開します。デバッグするための便利な機能があります。エラーチェックを有効な状態に設定します。呼び出す前にこのメソッドを呼び出す必要があります。ESの命令を実行した時にデバッガ(LogCat)に出力します。ESの命令を実行した時にエラーがあった場合、デバッガ(LogCat)に出力します。現在Androidはさまざまな端末で動作しています。1.1のみ対応しているかもしれません。同じバージョンであっても搭載しているグラフィックチップによって機能が制限されている場合もあります。ESの機能を把握し、プログラミングする必要があります。以下のパラメータで呼び出すことで確認できます。立方体を表示し、タッチ操作による回転を行うプログラムです。派生クラスのGLViewを変数としています。GLViewをアクティビティに張り付けます。20行目:アクティビティが一時停止(onPause())になるのでGLViewを一時停止させます。アクティビティが再開(onResume())するのでGLViewを再開させます。GLSurfaceViewを継承したGLViewを定義しています。Rendererのインターフェースを実装したクラスGLRendererを変数としています。GLRendererのインスタンスをGLSurfaceViewに登録しています。21行目〜:画面をタッチした際の処理です。タッチしながら移動したとき(MotionEvent.ACTION_MOVE)の移動量をX、Y軸で回転角に置き換え、GLRendererの変数にセットしています。サーフェースが作成されるときに呼び出されます。146行目:ビューポートの設定。これ以降の命令は射影変換行列に対して行われます。151行目:視体積の設定。}...193:}155行目:描画の度に実行される159行目:モデルビュー行列の指定。これ以降の命令はモデルビュー行列に対して行われます。165-166行目:タッチ操作から計算した回転角を設定(図3参照)176行目:立方体の頂点配列から三角形(GL_TRIANGLES,)を描画スクリーンショット画面をタッチしてスライドさせると立方体が回転します。Visualizerというアプリケーションの出力フォーマットです。多くの3Dアプリケーションでサポートされています。・コメント#で始まる行はコメント行となります。始まり、法線ベクトルの座標が並びます・facefaceは頂点に対応する頂点座標、テクスチャ座標、法線座標のインデックスを指しています。fで始まり、以下の形で記述されます。頂点座標...インデックスは1から始まる値で、ファイルの先頭から連番になります。