package com.geolo.android.polygon; import java.nio.FloatBuffer; import java.nio.IntBuffer; import javax.microedition.khronos.opengles.GL10; import com.geolo.android.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.opengl.GLUtils; public class MyCube implements Polygon{ private float vertexs[][] = { new float[]{//top -1,1,-1, -1,1,1, 1,1,1, 1,1,-1, }, new float[]{//right 1,1,1, 1,-1,1, 1,-1,-1, 1,1,-1, }, new float[]{//bottom -1,-1,-1, -1,-1,1, 1,-1,1, 1,-1,-1, }, new float[]{//left -1,1,1, -1,-1,1, -1,-1,-1, -1,1,-1, }, new float[]{//front -1,1,1, -1,-1,1, 1,-1,1, 1,1,1 }, new float[]{//back -1,1,-1, -1,-1,-1, 1,-1,-1, 1,1,-1 }, }; private float texturecoods[][] = { new float[]{ //top 0.0f,0.0f, 1.0f,0.0f, 1.0f,1.0f, 0.1f,1.0f, }, new float[]{ //right 0.0f,0.0f, 1.0f,0.0f, 1.0f,1.0f, 0.1f,1.0f, }, new float[]{ //bottom 0.0f,0.0f, 1.0f,0.0f, 1.0f,1.0f, 0.1f,1.0f, }, new float[]{ //left 0.0f,0.0f, 1.0f,0.0f, 1.0f,1.0f, 0.1f,1.0f, }, new float[]{ //front 0.0f,0.0f, 1.0f,0.0f, 1.0f,1.0f, 0.1f,1.0f, }, new float[]{ //back 0.0f,0.0f, 1.0f,0.0f, 1.0f,1.0f, 0.1f,1.0f, }, }; private float normals[][] = { new float[]{//top 0.0f,1.0f,0.0f,//��Ӧ��ÿ������ķ��� 0.0f,1.0f,0.0f, 0.0f,1.0f,0.0f, 0.0f,1.0f,0.0f, }, new float[]{//right 1.0f,0.0f,0.0f, 1.0f,0.0f,0.0f, 1.0f,0.0f,0.0f, 1.0f,0.0f,0.0f, }, new float[]{//bottom 0.0f,-1.0f,0.0f, 0.0f,-1.0f,0.0f, 0.0f,-1.0f,0.0f, 0.0f,-1.0f,0.0f, }, new float[]{//left -1.0f,0.0f,0.0f, -1.0f,0.0f,0.0f, -1.0f,0.0f,0.0f, -1.0f,0.0f,0.0f, }, new float[]{//front 0.0f,0.0f,1.0f, 0.0f,0.0f,1.0f, 0.0f,0.0f,1.0f, 0.0f,0.0f,1.0f, 0.0f,0.0f,1.0f, }, new float[]{//back 0.0f,0.0f,-1.0f, 0.0f,0.0f,-1.0f, 0.0f,0.0f,-1.0f, 0.0f,0.0f,-1.0f, }, }; private FloatBuffer vertexBuffers[] = new FloatBuffer[vertexs.length]; private FloatBuffer textureBuffers[] = new FloatBuffer[texturecoods.length]; private FloatBuffer normalBuffers[] = new FloatBuffer[normals.length]; private float angle = 0; private Bitmap mBitmap1,mBitmap2,mBitmap3,mBitmap4,mBitmap5,mBitmap6; private IntBuffer intBuffer; public MyCube(Context context){ mBitmap1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.side1); mBitmap2 = BitmapFactory.decodeResource(context.getResources(), R.drawable.side1); mBitmap3 = BitmapFactory.decodeResource(context.getResources(), R.drawable.side1); mBitmap4 = BitmapFactory.decodeResource(context.getResources(), R.drawable.side1); mBitmap5 = BitmapFactory.decodeResource(context.getResources(), R.drawable.side1); mBitmap6 = BitmapFactory.decodeResource(context.getResources(), R.drawable.side1); /////vertex for(int i=0; i < vertexBuffers.length;i++){ vertexBuffers[i] = FloatBuffer.wrap(vertexs[i]); } /////texture for(int i=0; i < textureBuffers.length;i++){ textureBuffers[i] = FloatBuffer.wrap(texturecoods[i]); } /////normal for(int i=0; i < normalBuffers.length;i++){ normalBuffers[i] = FloatBuffer.wrap(normals[i]); } } public void setupTexture(GL10 gl){ gl.glEnable(GL10.GL_TEXTURE_2D); intBuffer = IntBuffer.allocate(6); gl.glGenTextures(6, intBuffer); //////texture01 gl.glBindTexture(GL10.GL_TEXTURE_2D, intBuffer.get(0)); GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, mBitmap1, 0); gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); //////texture02 gl.glBindTexture(GL10.GL_TEXTURE_2D, intBuffer.get(1)); GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, mBitmap2, 0); gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); //////texture03 gl.glBindTexture(GL10.GL_TEXTURE_2D, intBuffer.get(2)); GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, mBitmap3, 0); gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); //////texture04 gl.glBindTexture(GL10.GL_TEXTURE_2D, intBuffer.get(3)); GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, mBitmap4, 0); gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); //////texture05 gl.glBindTexture(GL10.GL_TEXTURE_2D, intBuffer.get(4)); GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, mBitmap5, 0); gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); //////texture06 gl.glBindTexture(GL10.GL_TEXTURE_2D, intBuffer.get(5)); GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, mBitmap6, 0); gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE); mBitmap1.recycle(); mBitmap2.recycle(); mBitmap3.recycle(); mBitmap4.recycle(); mBitmap5.recycle(); mBitmap6.recycle(); } @Override public void draw(GL10 gl) { gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); gl.glEnableClientState(GL10.GL_NORMAL_ARRAY); gl.glLoadIdentity(); gl.glTranslatef(0.0f, 0.0f, -3.0f); gl.glRotatef(angle,1.0f, 1.0f, 0.5f); gl.glColor4f(0.5f, 0.5f, 0.5f, 1.0f); for(int i=0; i<6;i++){//��������6���� gl.glBindTexture(GL10.GL_TEXTURE_2D, intBuffer.get(i)); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffers[i]); gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffers[i]); gl.glNormalPointer(GL10.GL_FLOAT, 0, normalBuffers[i]); gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 4); } gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); gl.glDisableClientState(GL10.GL_NORMAL_ARRAY); angle += 1.5f; } @Override public void initData(GL10 gl) { setupTexture(gl); } }