GLCube.java
上传用户:xmjingguan
上传日期:2009-07-06
资源大小:2054k
文件大小:4k
源码类别:

android开发

开发平台:

Java

  1. /***  * Excerpted from "Hello, Android!",  * published by The Pragmatic Bookshelf.  * Copyrights apply to this code. It may not be used to create training material,   * courses, books, articles, and the like. Contact us if you are in doubt.  * We make no guarantees that this code is fit for any purpose.   * Visit http://www.pragmaticprogrammer.com/titles/eband for more book information. ***/
  2. package org.example.opengl;
  3. import java.nio.ByteBuffer;
  4. import java.nio.ByteOrder;
  5. import java.nio.IntBuffer;
  6. import javax.microedition.khronos.opengles.GL10;
  7. import android.content.Context;
  8. import android.graphics.Bitmap;
  9. import android.graphics.BitmapFactory;
  10. import android.opengl.GLUtils;
  11. class GLCube {
  12.    private final IntBuffer mVertexBuffer;
  13.    
  14.    
  15.    private final IntBuffer mTextureBuffer;
  16.    
  17.    public GLCube() {
  18.       
  19.       int one = 65536;
  20.       int half = one / 2;
  21.       int vertices[] = {              // FRONT
  22.             -half, -half, half, half, -half, half,
  23.             -half, half, half, half, half, half,
  24.             // BACK
  25.             -half, -half, -half, -half, half, -half,
  26.             half, -half, -half, half, half, -half,
  27.             // LEFT
  28.             -half, -half, half, -half, half, half,
  29.             -half, -half, -half, -half, half, -half,
  30.             // RIGHT
  31.             half, -half, -half, half, half, -half,
  32.             half, -half, half, half, half, half,
  33.             // TOP
  34.             -half, half, half, half, half, half,
  35.             -half, half, -half, half, half, -half,
  36.             // BOTTOM
  37.             -half, -half, half, -half, -half, -half,
  38.             half, -half, half, half, -half, -half, };
  39.       
  40.       
  41.       int texCoords[] = {
  42.             // FRONT
  43.             0, one, one, one, 0, 0, one, 0,
  44.             // BACK
  45.             one, one, one, 0, 0, one, 0, 0,
  46.             // LEFT
  47.             one, one, one, 0, 0, one, 0, 0,
  48.             // RIGHT
  49.             one, one, one, 0, 0, one, 0, 0,
  50.             // TOP
  51.             one, 0, 0, 0, one, one, 0, one,
  52.             // BOTTOM
  53.             0, 0, 0, one, one, 0, one, one, };
  54.       
  55.       
  56.       // Buffers to be passed to gl*Pointer() functions must be
  57.       // direct, i.e., they must be placed on the native heap
  58.       // where the garbage collector cannot move them.
  59.       //
  60.       // Buffers with multi-byte data types (e.g., short, int,
  61.       // float) must have their byte order set to native order
  62.       ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
  63.       vbb.order(ByteOrder.nativeOrder());
  64.       mVertexBuffer = vbb.asIntBuffer();
  65.       mVertexBuffer.put(vertices);
  66.       mVertexBuffer.position(0);
  67.       
  68.       
  69.       // ...
  70.       ByteBuffer tbb = ByteBuffer.allocateDirect(texCoords.length * 4);
  71.       tbb.order(ByteOrder.nativeOrder());
  72.       mTextureBuffer = tbb.asIntBuffer();
  73.       mTextureBuffer.put(texCoords);
  74.       mTextureBuffer.position(0);
  75.       
  76.    }
  77.    
  78.    public void draw(GL10 gl) {        gl.glVertexPointer(3, GL10.GL_FIXED, 0, mVertexBuffer);
  79.       
  80.       
  81.       gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, mTextureBuffer);
  82.       
  83.       
  84.       gl.glColor4f(1, 1, 1, 1);
  85.       gl.glNormal3f(0, 0, 1);
  86.       gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
  87.       gl.glNormal3f(0, 0, -1);
  88.       gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);
  89.       gl.glColor4f(1, 1, 1, 1);
  90.       gl.glNormal3f(-1, 0, 0);
  91.       gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);
  92.       gl.glNormal3f(1, 0, 0);
  93.       gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);
  94.       gl.glColor4f(1, 1, 1, 1);
  95.       gl.glNormal3f(0, 1, 0);
  96.       gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);
  97.       gl.glNormal3f(0, -1, 0);
  98.       gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
  99.    }
  100.    
  101.    
  102.    static void loadTexture(GL10 gl, Context context, int resource) {
  103.       Bitmap bmp = BitmapFactory.decodeResource(
  104.             context.getResources(), resource);
  105.       GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
  106.       gl.glTexParameterx(GL10.GL_TEXTURE_2D,
  107.             GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
  108.       gl.glTexParameterx(GL10.GL_TEXTURE_2D,
  109.             GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
  110.       bmp.recycle();
  111.    }
  112.    
  113. }