・ステップ1、頂点を定義する。
 サンプル中のint型の配列verticesは立方体の8つの頂点座標を指定している。
 3つ区切りで、3次元の(x,y,z)の座標を表す。
 此の時点では頂点だけが有るだけで、辺や面はまだ無いイメージ
・ステップ2、頂点ごとに色を定義する
 同じくint型の配列colorsで指定されている。
 こちらは4つ区切りで、それぞれ(R,G,B,alpha)を表しているみたい。
 verticesと対応している
・ステップ3、インデックスを定義
 配列indicesでインデックス(というか面?)を定義しています。
 3つの数字の組が12個あり、それぞれが1つの三角形の面となります。
 ここで使われている数字はステップ1のvertices配列のインデックスに対応します。
 つまり、一つ目の面  0, 4, 5は頂点(-one,  -one, -one)、(-one,  -one, one)、(one,  -one, one)の3つの頂点からなる面を表します。
この時注意すべき事は、面には裏表が有るという事です。
 どちらが表で、どちらが裏かは頂点を指定する順番に寄ります。
 頂点を時計回りの順番で指定したときと、反時計回りで指定したときでは表裏が逆になります。
 詳しくはこちらのURLを見てみるとわかりやすいかも
 http://www.komoto.org/opengl/sample10.htm
 ・com.exampleandroid.apis.graphics.Cube
01.
02.
03.
04. Cube
05.
06. Cube()
07.
08. one  = 0x10000;
09. vertices[]  = {//頂点情報。1点につきx,y,z軸の3つの情報がいるため、ここで定義してるのは8点分。
10.//indexからみると0
11.//indexからみると1
12.//indexからみると2
13.//indexからみると3
14.//indexからみると4
15.//indexからみると5
16.//indexからみると6
17.//indexからみると7
18.
19.
20. colors[]  = { //色情報。R,G,B,A(透過率)の4情報もってて、8点分。verti順番に対応
21. 0,    0,   one,
22. 0,    0,   one,
23. 0,   one,
24. 0,   one,
25. 0,   one,  one,
26. 0,   one,  one,
27.
28.
29.
30.
31. indices[]  = { //vertecesで定義した頂点情報を元に図形を定義。glDrawElementsにてTRIANGLESを指定してるので、三角形で表現していく。よって3点ずつで図形を形成していく。
32. 4, 5,    0, 5, 1,
33. 5, 6,    1, 6, 2,
34. 6, 7,    2, 7, 3,
35. 7, 4,    3, 4, 0,
36. 7, 6,    4, 6, 5,
37. 0, 1,    3, 1, 2
38.
39.
40./  Buffers to be passed to gl*Pointer() functions
41./  must be direct, i.e., they must be placed on the
42./  native heap where the garbage collector cannot
43./  move them.
44./
45./  Buffers with multi-byte datatypes (e.g., short,  int, float)
46./  must have their byte order set to native order
47.
48.//メモリ確保
49.//今の環境がリトルエンディアンかビッグエンディアンかを指定
50.//intbufferですよ。
51.//頂点情報ぶっこみます。
52.//現在位置を最初に戻す。
53.
54.//メモリ確保。ガベコレガン無視。
55.
56.//色情報
57.
58.
59.
60.
61.//頂点情報の順番を指定してるindex配列を渡す。
62.
63.
64.
65. void draw(GL10 gl)
66.
67.//カリング指定。こっち向いてる面(時計周り)しか描画しないよ。
68. 0, mVertexBuffer); //頂点情報を設定
69. 0, mColorBuffer); //色情報を設定
70. 36, gl.GL_UNSIGNED_BYTE, mIndexBuffer); //三角形で36点を指定する。(三角形二つで四角の面を形成。キューブをあらわすのに6面いるので、3(三角形の頂点の数)*2*6=36点となる)
71.
72.
73. IntBuffer   mVertexBuffer;
74. IntBuffer   mColorBuffer;
75. ByteBuffer  mIndexBuffer;
76.
 
0 件のコメント:
コメントを投稿