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