1: package com.programmez.opengl.exercice1;
2:
3: import java.nio.ByteBuffer;
4: import java.nio.ByteOrder;
5: import java.nio.IntBuffer;
6:
7: import javax.microedition.khronos.opengles.GL10;
8:
9: import android.content.Context;
10: import android.graphics.Bitmap;
11: import android.graphics.BitmapFactory;
12: import android.opengl.GLUtils;
13:
14: class GLCube {
15: private final IntBuffer mVertexBuffer;
16: private final IntBuffer mTextureBuffer;
17:
18:
19: public GLCube() {
20:
21: int one = 65536;
22: int half = one / 2;
23: int vertices[] = {
24: // FRONT
25: -half, -half, half, half, -half, half,
26: -half, half, half, half, half, half,
27: // BACK
28: -half, -half, -half, -half, half, -half,
29: half, -half, -half, half, half, -half,
30: // LEFT
31: -half, -half, half, -half, half, half,
32: -half, -half, -half, -half, half, -half,
33: // RIGHT
34: half, -half, -half, half, half, -half,
35: half, -half, half, half, half, half,
36: // TOP
37: -half, half, half, half, half, half,
38: -half, half, -half, half, half, -half,
39: // BOTTOM
40: -half, -half, half, -half, -half, -half,
41: half, -half, half, half, -half, -half, };
42:
43:
44:
45: int texCoords[] = {
46: // FRONT
47: 0, one, one, one, 0, 0, one, 0,
48: // BACK
49: one, one, one, 0, 0, one, 0, 0,
50: // LEFT
51: one, one, one, 0, 0, one, 0, 0,
52: // RIGHT
53: one, one, one, 0, 0, one, 0, 0,
54: // TOP
55: one, 0, 0, 0, one, one, 0, one,
56: // BOTTOM
57: 0, 0, 0, one, one, 0, one, one, };
58:
59:
60:
61: // Buffers to be passed to gl*Pointer() functions must be
62: // direct, i.e., they must be placed on the native heap
63: // where the garbage collector cannot move them.
64: //
65: // Buffers with multi-byte data types (e.g., short, int,
66: // float) must have their byte order set to native order
67: ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
68: vbb.order(ByteOrder.nativeOrder());
69: mVertexBuffer = vbb.asIntBuffer();
70: mVertexBuffer.put(vertices);
71: mVertexBuffer.position(0);
72:
73:
74:
75: // ...
76: ByteBuffer tbb = ByteBuffer.allocateDirect(texCoords.length * 4);
77: tbb.order(ByteOrder.nativeOrder());
78: mTextureBuffer = tbb.asIntBuffer();
79: mTextureBuffer.put(texCoords);
80: mTextureBuffer.position(0);
81:
82: }
83:
84:
85: public void draw(GL10 gl) {
86: gl.glVertexPointer(3, GL10.GL_FIXED, 0, mVertexBuffer);
87: gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, mTextureBuffer);
88:
89:
90:
91: gl.glColor4f(1, 1, 1, 1);
92: gl.glNormal3f(0, 0, 1);
93: gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
94: gl.glNormal3f(0, 0, -1);
95: gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);
96:
97: gl.glColor4f(1, 1, 1, 1);
98: gl.glNormal3f(-1, 0, 0);
99: gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);
100: gl.glNormal3f(1, 0, 0);
101: gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);
102:
103: gl.glColor4f(1, 1, 1, 1);
104: gl.glNormal3f(0, 1, 0);
105: gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);
106: gl.glNormal3f(0, -1, 0);
107: gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
108: }
109:
110:
111: static void loadTexture(GL10 gl, Context context, int resource) {
112: Bitmap bmp = BitmapFactory.decodeResource(
113: context.getResources(), resource);
114: GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
115: gl.glTexParameterx(GL10.GL_TEXTURE_2D,
116: GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
117: gl.glTexParameterx(GL10.GL_TEXTURE_2D,
118: GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
119: bmp.recycle();
120: }
121:
122: }
123: