package com.wistron.WiGallery; import static android.opengl.GLES10.GL_CCW; import static android.opengl.GLES10.GL_FLOAT; import static android.opengl.GLES10.GL_TEXTURE_2D; import static android.opengl.GLES10.glEnable; import static android.opengl.GLES10.glFrontFace; import static android.opengl.GLES10.glTexCoordPointer; import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import javax.microedition.khronos.opengles.GL10; import javax.microedition.khronos.opengles.GL11; import com.wistron.swpc.wicamera3dii.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.opengl.GLUtils; public class PhotoCube{ // int resId = R.raw.robot; private Context mContext; private int[] buffers= new int[9]; // private final static int VERTS = 6; private final static int numFaces = 1; public FloatBuffer mFVertexBuffer; public FloatBuffer mTexBuffer; private float[][] colors = { // Colors of the 6 faces {1.0f, 0.5f, 0.0f, 1.0f}, // 0. orange {1.0f, 0.0f, 1.0f, 1.0f}, // 1. violet {0.0f, 1.0f, 0.0f, 1.0f}, // 2. green {0.0f, 0.0f, 1.0f, 1.0f}, // 3. blue {1.0f, 0.0f, 0.0f, 1.0f}, // 4. red {1.0f, 1.0f, 0.0f, 1.0f} // 5. yellow }; private float cubeHalfSize = 1.0f; private int[] textureIDs = new int[numFaces]; private Bitmap[] bitmap = new Bitmap[numFaces]; float faceLeft = 0; float faceRight = 0; float faceTop = 0; float faceBottom = 0; public PhotoCube(Context context) { mContext = context; // Allocate vertex buffer. An float has 4 bytes ByteBuffer vbb = ByteBuffer.allocateDirect(12 * 4 * numFaces); vbb.order(ByteOrder.nativeOrder()); mFVertexBuffer = vbb.asFloatBuffer(); // Read images. Find the aspect ratio and adjust the vertices accordingly. float faceWidth = 4.0f; float faceHeight = 4.0f; faceLeft = -faceWidth / 2; faceRight = -faceLeft; faceTop = faceHeight / 2; faceBottom = -faceTop; // Define the vertices for this face float[] vertices = { faceLeft, faceBottom, 0.0f, // 0. left-bottom-front faceRight, faceBottom, 0.0f, // 1. right-bottom-front faceLeft, faceTop, 0.0f, // 2. left-top-front faceRight, faceTop, 0.0f, // 3. right-top-front }; mFVertexBuffer.put(vertices); // Populate ByteBuffer tbb = ByteBuffer.allocateDirect(numFaces * 4 * 8); tbb.order(ByteOrder.nativeOrder()); mTexBuffer = tbb.asFloatBuffer(); // Allocate texture buffer. An float has 4 bytes. Repeat for 6 faces. float[] texCoords = { 0.0f, 1.0f, // A. left-bottom 1.0f, 1.0f, // B. right-bottom 0.0f, 0.0f, // C. left-top 1.0f, 0.0f // D. right-top }; for (int face = 0; face < numFaces; face++) { mTexBuffer.put(texCoords); } mFVertexBuffer.position(0); // Rewind mTexBuffer.position(0); } public void draw(GL10 gl, int textureID, FloatBuffer vertex) { glFrontFace(GL_CCW); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mFVertexBuffer); glEnable(GL_TEXTURE_2D); glTexCoordPointer(2, GL_FLOAT, 0, mTexBuffer); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); // gl.glPushMatrix(); gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); // gl.glPopMatrix(); // gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); // gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); } }