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先生が教えてくれるので省略しておきます。
メモ書き、ということでここまで。