・ステップ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 件のコメント:
コメントを投稿