/**/

補遺 B:
OpenGLマトリックスフォーマット

マトリックス、ビデオ、およびOpenGL

OpenGLは、数値のリストを2Dイメージに変える仮想マシンの標準的な仕様です。そのリストは、線やポリゴンをつなげる頂点の3D位置を含むことができます。また、それらは、テクスチャマッピングのための座標、ライティングに対する法線、色、エッジフラグのような他のデータを含むこともできます。

Jitterは、一般的なマトリックスシステムで処理可能なタイプのデータとしてビデオを扱います。Jitter でビデオデータを操作するとき、マトリックスの各セルは一つのピクセルを表します。マトリックスの4つのプレーンは、そのピクセルのA、R、G、B要素を格納します。これは、ビデオを格納するための Jitter の仕様です。

また、Jitter はマトリックスにOpenGL互換画像の内容を格納するにあたって、GLグループのすべてのオブジェクトに使われる約束ごとがあります。データの内容はビデオデータのように様々なオブジェクトで読み出され、処理され、出力されることが可能です。このドキュメントではマトリックスへのOpenGLデータの格納や、それらのマトリックスを含む jit.gl.render オブジェクトへのメッセージ構文における Jitter の約束ごとを記述します。

このリファレンスを必要とするとき

GLグループのオブジェクトは、その matrixoutput アトリビュートに 1 が設定されたときに、ここで説明するフォーマットでマトリックスを出力します。あなた自身のパッチを通してこれらのジオメトリを処理するためには、このフォーマットを知っておく必要があるでしょう。もし、jit.op や他のマトリックス演算子を直接利用してジオメトリを作りたい場合もそのフォーマットを知っておく必要があるでしょう。しかし、あなたの描画ニーズに JitterのGL グループオブジェクトで充分なら、OpenGLマトリックスのフォーマットに関する知識が何もなくても、これらのオブジェクトを「シーンの裏方」としたままで、描画を行なうことができます。

GLマトリックスリファレンス

メッセージフォーマット

OpenGLデータは次のような Max メッセージの形式で jit.gl.render オブジェクトに渡すことができます。

jit_matrix [geometry matrix]

jit_matrix [geometry matrix] [draw primitive]

jit_matrix [geometry matrix] [connections matrix] [draw primitive]

描画プリミティブ

描画プリミティブは、ジオメトリマトリックスの頂点間のつながりをどのように描画するかを指定します。ジオメトリマトリックスと共に、 jit.gl.render オブジェクトに描画プリミティブが渡されなかった場合には、jit.gl.render オブジェクトのカレント(現在の)プリミティブが使われます。カレントプリミティブは、単にプリミティブだけを含むメッセージを送ることによって変更されます。描画プリミティブが、ジオメトリクスマトリックスと一緒に渡された場合、その描画プリミティブはそのジオメトリを描画するためだけに使われ、カレントプリミティブは変更されません。

描画プリミティブは次のようなシンボルのうちの1つです。
points 各頂点を単独の点として描画します。
lines 頂点をペアに分けて線でつなぎます。頂点A、B、C、Dがあるジオメトリマトリックスでは線分ABとCDを描画します。
line_strip 頂点のペア毎に線でつなぎます。頂点A、B、C、Dがあるジオメトリマトリックスでは、線分AB、BC、CDを描画します。
line_loop line_stripに似ていますが、マトリックスの最後の頂点と最初の頂点がつながって線分が描画されます。
triangles 離れた三角形を描画します。頂点A B C D E Fが与えられれば、三角形ABCとDEFを描画します。
tri_strip つながった三角形の細片を描画します。頂点A B C D E Fが与えられれば、三角形ABC、CBD、CDE、EDFを描画します。頂点の順番に注意して下さい。すべての三角形の表面が同じ方向を向くように頂点の順番が入れ替えられます(チュートリアル33:「ポリゴンモード、カラー、ブレンド」を参照してください)。
tri_fan 三角形で扇形を描きます。頂点A B C D E Fが与えられれば、三角形ABC、ACD、ADE、AEFを描画します。
quads 離れた四角形を描画します。頂点A B C D E F G Hが与えられれば、四角形ABCDとEFGHを描画します。
quad_strip つながった四角形を描画します。頂点A B C D E Fが与えられれば、四角形ABCDとCDFEを描画します。
polygon マトリックス内のすべての頂点を使い、一つのポリゴンを描画します。そのポリゴンが単純かつ凸状でない場合、その結果は定まりません。
tri_grid ジオメトリマトリックスが2次元の場合、面を形成するために各頂点がマトリックスでの近い点につながって三角形が描画されます。
quad_grid ジオメトリマトリックスが2次元の場合、面を形成するために各頂点がマトリックスでの近い点につながって四角形が描画されます。

接続マトリックス

接続マトリックスは、1次元で long か char データのどちらかを含んでいなければなりません。これが存在する場合、ジオメトリマトリックスの頂点をつなげる順番を指定します。ジオメトリマトリックスを一定にしておき、それにインデックスをつける接続マトリックスを変えることで、同じ頂点の間のつながりの変化が描画されるようになります。

ジオメトリマトリックス

ジオメトリマトリックスは、long、float32、float64のいずれかの形式のデータを含まなければなりませんが、float32が最も一般的な選択となります。float64型は、画面にレンダリングするために標準的に必要とされるものより高い精度を持ちます。long型は値を整数に制限するもので、一般的に座標を指定するときには使われません。

マトリックスの各セルは、一つの頂点を表します。画像は、マトリックスの行や列のどちらかに沿って頂点間のつながりを描画することでレンダリングされます。1セル幅のマトリックスは、列に沿ってつながれます。1セル高のマトリックスは、行に沿ってつながれます。マトリックスの幅と高さの両方が2つ以上のセルになっている場合には、jit.gl.render オブジェクトのgeom_rowsアトリビュートが、行と列のどちらに従えば良いのかを決めます。tri_gridかquad_gridプリミティブが指定されている場合には、常にマトリックスの行と列の両方がつながれます。

2つから13のプレーンを持ったマトリックスであれば、どのようなものでも使用できます。プレーン13以上は、後ほどの利用のために予約され、現在は無視されます。各プレーンは、頂点、テクスチャ座標、法線、頂点の色、エッジの5つのグループのうちの1つで、様々な値を表します。あるグループを指定するために充分なプレーンが存在する場合、そのグループはマトリックスのレンダリングに使われます。頂点のグループを除いて、使用されるためには、各グループは完全な形で存在しなければなりません。頂点に対する x と y の値だけがある場合には、全頂点のz座標には0が設定され、xy平面上の2D画像になります。

プレーン 0: 頂点のx座標
プレーン 1: 頂点のy座標
プレーン 2: 頂点のz座標
プレーン 3: テクスチャがあれば、頂点でのテクスチャのs座標
プレーン 4: テクスチャがあれば、頂点でのテクスチャのt座標
プレーン 5: 頂点でのライティング法線のx要素
プレーン 6: 頂点でのライティング法線のy要素
プレーン 7: 頂点でのライティング法線のz要素
プレーン 8: 頂点の色の赤要素
プレーン 9: 頂点の色の緑要素
プレーン10: 頂点の色の青要素
プレーン11: 頂点の色のアルファ要素
プレーン12: 隣の頂点へのつながりに対するエッジフラグ:0未満なら線が描画されません