AndroidNDK-r5 (3)

会社から更新しているので、基本的に自宅からは更新がありません。
これは書き溜めてた下書きを自宅からアップロードしただけ。


テクスチャの描画


取り合えず色をつけた三角形でも描画してみよう。
ああ、3Dには手を出しませんよ。 私に必要なのは平面までなので。
Z軸とか考えたくないです。


元にしてるgl2jniのrenderFrameに以下のような記述をば。

glClearColor( 0.0f, 0.0f, 0.0f, 1.0f);
glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

static const GLfloat triangleVertices[] = {
	 0.0f, 	0.5f,
	-0.5f, -0.5f, 
	 0.5f, -0.5f
};

static const GLubyte triangleColors[] = {
	255,	255,	  0,	255,
	  0,	255,	255,	255,
	255,	  0,	255,	255,
	  0,	  0,	  0,	  0
};

glVertexPointer(2, GL_FLOAT, 0, triangleVertices);
glEnableClientState(GL_VERTEX_ARRAY);

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

glDrawArrays(GL_TRIANGLES, 0, 3);

表示されましたね。 おわり。


というのは嘘で、多少私のメモ書きとして補足。
最初の

glClearColor( 0.0f, 0.0f, 0.0f, 1.0f);
glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

これはもちろん、画面のクリアです。
取り合えずこれで黒背景かな。

void glVertexPointer(GLint size ,
	GLenum type,
	GLsizei stride, 
	GLsizei count,
	const GLvoid *pointer
);

size 	: 頂点データのサイズ(頂点データが保有する座標情報の数)
	  2 : 2次元, 3: 3次元 (Z 座標を含める), 4 : wを含める
type 	: 配列の型 (GL_SHORT、GL_INT、GL_FLOAT)
stride 	: 連続する頂点間でのバイト・オフセット
	  0 を指定すれば、頂点の情報が配列ないに隙間なく収まっているということを表す
pointer	: 座標情報を含む配列へのポインタ

描画するポリゴンの座標を指定します。
OpenGL ESの座標系については……省略します。

glEnableClientState(GLenum array);
array	: 有効にする状態
	  GL_VERTEX_ARRAY / ポリゴンの頂点, GL_COLOR_ARRAY / 頂点の色

この関数を指定することで、直前に実行した頂点配列などに関する
関数を「有効化」します。

glColorPointer(GLint size, 
	GLenum type, 
	GLsizei stride, 
	const GLvoid * pointer
);

size	: 色の構成要素の数。 3か4を指定します。 初期値は「4」です。
type	: 配列の型 (GL_SHORT、GL_INT、GL_FLOAT)
stride	: 配列のオフセット
pointer : 配列のポインタ

基本的に構成要素の数には「4」を指定してください。
どうも、3つしか必要ないから「3」にしても表示されてくれない。
この辺は勉強不足。 しかし私に現状そこまで必要な知識でもなし。

glDrawArrays( GLenum mode, 
	GLint first, 
	GLsizei count
);

mode	: ポリゴンの種類 (GL_TRIANGLE_STRIP、GL_TRIANGLES、GL_LINESなど)
first	: 指定した配列のオフセット
count	: 頂点数

実際に描画を行います。 今回は三角形なのでTRIANGLEですが
四角形を書く際などはTRIANGLE_STRIPを使います。


なぜ四角形なのに「TRIANGLE」というと、それはOpenGL ESの
多角形の描画方法に関わる内容になりますが
私が解説しなくてもGoogle先生が教えてくれるので省略しておきます。


メモ書き、ということでここまで。