代入された色はそのまま表示されます。フラグメントシェーダのソースも文字配列として定義します。\n";今回の例は非常に簡単なものですが、リアルな3次元グラフィックの表示に必要な照明や光の反射に関する計算はフラグメントシェーダ内で行うことになります。頂点バッファからバーテックスシェーダに渡すアトリビュート変数、バーテックスシェーダやフラグメントシェーダに対する引数のように使用するユニフォーム変数はシェーダ内の位置を番号として記録しておいて、値を設定するときに変数名ではなくその番号を使います。番号を記録しておくための変数をまとめて構造体で宣言しています。ShaderParams;物体の定義アプリケーションが実際に表示する物体の定義には、頂点情報と頂点を結んだ三角形の情報として与える必要があります。実行時にファイルから読みだしたり、実行時に計算して求めることもできますが、今回のサンプルでは配列に定数として格納することにします。1つの構造体にまとめて持たせています。VertexType;頂点データ実際の頂点毎のデータを上記の構造体の配列として登録しています。毎回指定して多角形を設定する事も出来ますが、貴重なGPUのメモリを有効に使うため上記の配列のインデックス(番号)で頂点を指定する事ができます。今回の例では三角形1つだけなので効果はありませんが、頂点数の多い物体を多く表示する場合には劇的な効果があります。対して送ることもできますが、GPU側に頂点データを前もってすべて転送しておくとCPUに負荷もかからず効率的に描画できます。g_ibo)もグローバル変数としていますが、この部分の扱い方が異なるだけで、アプリケーションであまり変わらない部分です。glDrawElementsで描画します。データの与え方で複数の3角形を一気に表示したり、複数回に分けて表示したりできます。関数は初期化した後、描画を6000回(10秒間)繰り返しています。引数1つ」を表します。引数4つ」を渡すことができます。引数2つ」となります。今回の三角形が移動するだけのサンプルのソースです。コンパイル用のシェルスクリプトで以下の内容です。以下のようにファイルを解凍して、コンパイル、実行できます。10秒間動作して終了します。関数の一覧を示しますが、使用頻度を大まかに示すために説明の後ろに○、◎、●を付けています。絶対的なものではありませんが目安にして下さい。●マークは通常アプリケーションの初期化時だけ使う関数を示します。○マークは物体を新たに生成する場合やその他の条件を変更する場合に使う関数です。◎は毎フレームの描画に使用する可能性の高い関数です。