強火で進め

このブログではプログラム関連の記事を中心に書いてます。

(Mac・iPhone)頂点配列を使った色付き三角形の描画

前回解説したこちらの「頂点配列を使った三角形の描画」では色が設定されていません(デフォルトの白のまま)でした。

(MaciPhone)頂点配列を使った三角形の描画 - 強火で進め
http://d.hatena.ne.jp/nakamura001/20081221/1229857148

今回はこちらの三角形に色を付ける方法を解説します。

基本的には前回のものとの差分について解説します。今回のサンプルコードはこちらにMac版iPhone版がありますのでダウンロードして下さい。

Mac版の解説

追加するコマンドは以下の2つだけです。

	glColorPointer(4, GL_UNSIGNED_BYTE, 0, triangleColors);
	glEnableClientState(GL_COLOR_ARRAY);

glColorPointer() でカラー配列をを設定し、 glEnableClientState(GL_COLOR_ARRAY) で有効化します。

glColorPointer()の引数は先頭から順番に

  • カラー情報の数(RGBで表現する場合は3、RGBAで表現する場合は4となります。なおRGBで指定した場合のA(アルファ値)は常に255となります)
  • データの型
  • オフセット(配列のどの部分から使用するかを指定)
  • 実際にカラー情報を格納した配列へのポインタ

カラー情報はR、G、B、Aの順番で指定します。
今回はデータの型を GL_UNSIGNED_BYTE としたので値の範囲は 0〜255 となります。今回は赤、緑、青の順で指定しています。

// カラー配列情報
const GLbyte triangleColors[] = {
	255,   0,   0, 255, // 1つ目のカラー情報(RGBA)
	0,   255,   0, 255, // 2つ目のカラー情報(RGBA)
	0,     0, 255, 255, // 3つ目のカラー情報(RGBA)
};

こちらの実際の描画を実行している glDrawArrays() にはまったく変更はありません。

    glDrawArrays(GL_TRIANGLES, 0, 3);

こちらのコマンドは

  • カラー配列のデータが設定されている
  • カラー配列が有効化されている

の条件が整っていればカラー情報を使いますがそれ以外の場合は「デフォルトの白で描画される」というルールになっているようです。

なお、RGBの3つのデータで指定する事もでき、その場合はカラー配列はRGBのみの指定となり、

const GLbyte triangleColors[] = {
	255,   0,   0, // 1つ目のカラー情報(RGB)
	0,   255,   0, // 2つ目のカラー情報(RGB)
	0,     0, 255, // 3つ目のカラー情報(RGB)
};

データ数の指定も3にする変更で設定できます。

    glVertexPointer(3, GL_FLOAT, 0, triangleVertices);

※なおこちらはiPhoneで指定した場合、正しく描画されませれませんでした。おそらくiPhone(OpenGL ES)では対応していないのではないかと思います。iPhoneの場合はRGBAで指定しましょう。

iPhone版の解説

Mac版と同様に追加することで対応できるので省略(^_^;)
OpenGLの移植性すばらしい\(^_^)/

iPhone3Dプログラミング講座の一覧はこちら