/Research/Example projects/AndroidGL_0.2/AndroidGL/src/edu/union/GLTutorialEight.java

https://bitbucket.org/DeveloperUX/behaviortree · Java · 216 lines · 166 code · 38 blank · 12 comment · 2 complexity · e8d6eff7f3e45700b81ecfce45de2908 MD5 · raw file

  1. package edu.union;
  2. import java.nio.ByteBuffer;
  3. import java.nio.ByteOrder;
  4. import java.nio.FloatBuffer;
  5. import java.nio.IntBuffer;
  6. import javax.microedition.khronos.opengles.GL10;
  7. import javax.microedition.khronos.opengles.GL11;
  8. import android.content.Context;
  9. import android.graphics.Bitmap;
  10. import android.graphics.BitmapFactory;
  11. import android.graphics.Canvas;
  12. import android.graphics.OpenGLContext;
  13. import android.opengl.GLU;
  14. import android.view.View;
  15. public class GLTutorialEight extends View {
  16. private OpenGLContext glContext;
  17. float lightAmbient[] = new float[] { 0.2f, 0.3f, 0.6f, 1.0f };
  18. float lightDiffuse[] = new float[] { 0.2f, 0.3f, 0.6f, 1.0f };
  19. float matAmbient[] = new float[] { 0.6f, 0.6f, 0.6f, 1.0f };
  20. float matDiffuse[] = new float[] { 0.6f, 0.6f, 0.6f, 1.0f };
  21. int tex;
  22. Bitmap bmp;
  23. float box[] = new float[] {
  24. // FRONT
  25. -0.5f, -0.5f, 0.5f,
  26. 0.5f, -0.5f, 0.5f,
  27. -0.5f, 0.5f, 0.5f,
  28. 0.5f, 0.5f, 0.5f,
  29. // BACK
  30. -0.5f, -0.5f, -0.5f,
  31. -0.5f, 0.5f, -0.5f,
  32. 0.5f, -0.5f, -0.5f,
  33. 0.5f, 0.5f, -0.5f,
  34. // LEFT
  35. -0.5f, -0.5f, 0.5f,
  36. -0.5f, 0.5f, 0.5f,
  37. -0.5f, -0.5f, -0.5f,
  38. -0.5f, 0.5f, -0.5f,
  39. // RIGHT
  40. 0.5f, -0.5f, -0.5f,
  41. 0.5f, 0.5f, -0.5f,
  42. 0.5f, -0.5f, 0.5f,
  43. 0.5f, 0.5f, 0.5f,
  44. // TOP
  45. -0.5f, 0.5f, 0.5f,
  46. 0.5f, 0.5f, 0.5f,
  47. -0.5f, 0.5f, -0.5f,
  48. 0.5f, 0.5f, -0.5f,
  49. // BOTTOM
  50. -0.5f, -0.5f, 0.5f,
  51. -0.5f, -0.5f, -0.5f,
  52. 0.5f, -0.5f, 0.5f,
  53. 0.5f, -0.5f, -0.5f,
  54. };
  55. float texCoords[] = new float[] {
  56. // FRONT
  57. 0.0f, 0.0f,
  58. 1.0f, 0.0f,
  59. 0.0f, 1.0f,
  60. 1.0f, 1.0f,
  61. // BACK
  62. 1.0f, 0.0f,
  63. 1.0f, 1.0f,
  64. 0.0f, 0.0f,
  65. 0.0f, 1.0f,
  66. // LEFT
  67. 1.0f, 0.0f,
  68. 1.0f, 1.0f,
  69. 0.0f, 0.0f,
  70. 0.0f, 1.0f,
  71. // RIGHT
  72. 1.0f, 0.0f,
  73. 1.0f, 1.0f,
  74. 0.0f, 0.0f,
  75. 0.0f, 1.0f,
  76. // TOP
  77. 0.0f, 0.0f,
  78. 1.0f, 0.0f,
  79. 0.0f, 1.0f,
  80. 1.0f, 1.0f,
  81. // BOTTOM
  82. 1.0f, 0.0f,
  83. 1.0f, 1.0f,
  84. 0.0f, 0.0f,
  85. 0.0f, 1.0f
  86. };
  87. FloatBuffer cubeBuff;
  88. FloatBuffer texBuff;
  89. protected FloatBuffer makeFloatBuffer(float[] arr) {
  90. ByteBuffer bb = ByteBuffer.allocateDirect(arr.length*4);
  91. bb.order(ByteOrder.nativeOrder());
  92. FloatBuffer fb = bb.asFloatBuffer();
  93. fb.put(arr);
  94. fb.position(0);
  95. return fb;
  96. }
  97. float[] pos = new float[] {0,0,3,0};
  98. public int loadTexture(GL10 gl, Context c, Bitmap bmp) {
  99. ByteBuffer bb = ByteBuffer.allocateDirect(bmp.height()*bmp.width()*4);
  100. bb.order(ByteOrder.nativeOrder());
  101. IntBuffer ib = bb.asIntBuffer();
  102. for (int y=0;y<bmp.height();y++)
  103. for (int x=0;x<bmp.width();x++) {
  104. ib.put(bmp.getPixel(x,y));
  105. }
  106. ib.position(0);
  107. bb.position(0);
  108. int[] tmp_tex = new int[1];
  109. gl.glGenTextures(1, tmp_tex, 0);
  110. int tex = tmp_tex[0];
  111. gl.glBindTexture(GL10.GL_TEXTURE_2D, this.tex);
  112. gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, bmp.width(), bmp.height(), 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, bb);
  113. gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
  114. gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
  115. return tex;
  116. }
  117. public GLTutorialEight(Context c) {
  118. super(c);
  119. bmp = BitmapFactory.decodeResource(c.getResources(), R.drawable.zeus);
  120. glContext = new OpenGLContext(OpenGLContext.DEPTH_BUFFER);
  121. GL11 gl = (GL11)glContext.getGL();
  122. gl.glEnable(GL10.GL_LIGHTING);
  123. gl.glEnable(GL10.GL_LIGHT0);
  124. gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, matAmbient, 0);
  125. gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, matDiffuse, 0);
  126. gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbient, 0);
  127. gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuse, 0);
  128. gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, pos, 0);
  129. gl.glEnable(GL10.GL_DEPTH_TEST);
  130. gl.glDepthFunc(GL10.GL_LEQUAL);
  131. gl.glEnable(GL10.GL_TEXTURE_2D);
  132. gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  133. gl.glClearDepthf(1.0f);
  134. cubeBuff = makeFloatBuffer(box);
  135. texBuff = makeFloatBuffer(texCoords);
  136. gl.glVertexPointer(3, GL10.GL_FLOAT, 0, cubeBuff);
  137. gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  138. gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texBuff);
  139. gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
  140. gl.glEnable(GL10.GL_CULL_FACE);
  141. gl.glShadeModel(GL10.GL_SMOOTH);
  142. tex = loadTexture(gl, c, bmp);
  143. }
  144. float xrot = 0.0f;
  145. float yrot = 0.0f;
  146. protected void onDraw(Canvas canvas) {
  147. GL11 gl = (GL11)glContext.getGL();
  148. int w = getWidth();
  149. int h = getHeight();
  150. glContext.waitNative(canvas, this);
  151. gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
  152. gl.glMatrixMode(GL10.GL_PROJECTION);
  153. gl.glLoadIdentity();
  154. gl.glViewport(0,0,w,h);
  155. GLU.gluPerspective(gl, 45.0f, ((float)w)/h, 1f, 100f);
  156. gl.glMatrixMode(GL10.GL_MODELVIEW);
  157. gl.glLoadIdentity();
  158. GLU.gluLookAt(gl, 0, 0, 3, 0, 0, 0, 0, 1, 0);
  159. gl.glRotatef(30.0f, 1, 0, 0);
  160. gl.glRotatef(40.0f, 0, 1, 0);
  161. gl.glColor4f(1.0f, 1, 1, 1.0f);
  162. gl.glNormal3f(0,0,1);
  163. gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
  164. gl.glNormal3f(0,0,-1);
  165. gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);
  166. gl.glColor4f(1, 1.0f, 1, 1.0f);
  167. gl.glNormal3f(-1,0,0);
  168. gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);
  169. gl.glNormal3f(1,0,0);
  170. gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);
  171. gl.glColor4f(1, 1, 1.0f, 1.0f);
  172. gl.glNormal3f(0,1,0);
  173. gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);
  174. gl.glNormal3f(0,-1,0);
  175. gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
  176. glContext.waitGL();
  177. }
  178. }