im trying to make a cube with a different texture on each face.

I have the front face and the rear face working now. Now i am trying
to make the right face of the cube. But something is going wrong,
because i got the right face done but the texture is showing with
errors (it's like stretched and shredded), i have something bad in my
code and i dont know what.

This is my code

    public class Cube {

        private FloatBuffer vertexBuffer;//Vertices
        private FloatBuffer textureBuffer;//Texture coordinates
        private ByteBuffer indexBuffer;//Indices
        private int[] textures = new int[6];//Texture pointer

        private float vertices[] = { //8 vertices of the cube
                        -1.0f, -1.0f, 1.0f,     // 0
                1.0f, -1.0f, 1.0f,      // 1
                -1.0f, 1.0f, 1.0f,      // 2
                1.0f, 1.0f, 1.0f,       // 3

                        -1.0f, -1.0f, -1.0f,// 4
                1.0f, -1.0f, -1.0f,     // 5
                -1.0f, 1.0f, -1.0f,     // 6
                1.0f, 1.0f, -1.0f,      // 7
        };

        private byte indices[] = { //Faces definition
                        0,1,2, 1,3,2, //front face (*)
                        6,7,5, 6,5,4, //rear face (**)
                        1,5,3, 5,7,3, //right face (***) //problems here
        };

    private float texture[] = {//Mapping coordinates for the vertices
                0.0f, 1.0f,
                1.0f, 1.0f,
                0.0f, 0.0f,
                1.0f, 0.0f,

                0.0f, 1.0f,
                1.0f, 1.0f,
                0.0f, 0.0f,
                1.0f, 0.0f,

                0.0f, 1.0f,
                1.0f, 1.0f,
                0.0f, 0.0f,
                1.0f, 0.0f,
        };

        public Cube()
        {
                ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length 
* 4);
                byteBuf.order(ByteOrder.nativeOrder());
                vertexBuffer = byteBuf.asFloatBuffer();
                vertexBuffer.put(vertices);
                vertexBuffer.position(0);

                byteBuf = ByteBuffer.allocateDirect(texture.length * 4);
                byteBuf.order(ByteOrder.nativeOrder());
                textureBuffer = byteBuf.asFloatBuffer();
                textureBuffer.put(texture);
                textureBuffer.position(0);

                indexBuffer = ByteBuffer.allocateDirect(indices.length);
                indexBuffer.put(indices);
                indexBuffer.position(0);
        }

        public void draw(GL10 gl) {
                //Point to our buffers
                gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
                gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
                //Set the face rotation
                gl.glFrontFace(GL10.GL_CCW);
                //Enable the vertex and texture state
                gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
                gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
                //para que no pinte los poligonos que no se ven
                //gl.glEnable(GL10.GL_CULL_FACE);
                for(int i=0; i<3; i++) //<6 por que tenemos 6 texturas que 
queremos
poner en las 6 caras de un cubo.
                {
                        gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i]);
                    indexBuffer.position(6*i); //como cada dos triangulos 
(cuadrado)
forman una cara, estos dos triangulos son 6 indices del array de
indices, por lo tanto avanzamos 6 posiciones en el indexBuffer para
pintar el siguiente cuadrado.
                    gl.glDrawElements(GL10.GL_TRIANGLES, 6, 
GL10.GL_UNSIGNED_BYTE,
indexBuffer); //el segundo parametro es 6 por que solo queremos pintar
una cara (cuadrado) por textura.
                }
                //gl.glDisable(GL10.GL_CULL_FACE); //para que no pinte los 
poligonos
que no se ven
                //Disable the client state before leaving
                gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
                gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        }

        public void loadGLTexture(GL10 gl, Context context) {
                loadTexture(gl,context,R.drawable.s1,0);
                loadTexture(gl,context,R.drawable.s2,1);
                loadTexture(gl,context,R.drawable.s3,2);
                loadTexture(gl,context,R.drawable.s4,3);
                loadTexture(gl,context,R.drawable.s5,4);
                loadTexture(gl,context,R.drawable.s6,5);
        }

        public void loadTexture(GL10 gl, Context context, int drawable, int
textureNumber)
        {
                //Get the texture from the Android resource directory
                InputStream is = 
context.getResources().openRawResource(drawable);
                Bitmap bitmap = null;
                try {
                        //BitmapFactory is an Android graphics utility for 
images
                        bitmap = BitmapFactory.decodeStream(is);
                } finally {
                        //Always clear and close
                        try {
                                is.close();
                                is = null;
                        } catch (IOException e) {
                        }
                }
                //Generate one texture pointer...
                gl.glGenTextures(1, textures, textureNumber);
                //...and bind it to our array
                gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[textureNumber]);
                //Create Nearest Filtered Texture
                gl.glTexParameterf(GL10.GL_TEXTURE_2D, 
GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_NEAREST);
                gl.glTexParameterf(GL10.GL_TEXTURE_2D, 
GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);
                //Different possible texture parameters, e.g. 
GL10.GL_CLAMP_TO_EDGE
                gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
GL10.GL_REPEAT);
                gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
GL10.GL_REPEAT);
                //Use the Android GLUtils to specify a two-dimensional texture 
image
from our bitmap
                GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
                //Clean up
                bitmap.recycle();
        }
    }

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to