Quintin B
Quintin B

Reputation: 5881

Android OpenGL ES 2.0: Sphere Texture Mapping

I have created 2 sphere's, and I am currently trying to texture them. However the texture coordinates seem to be a bit off.

The Texture (Just supposed to be a window or some kind of break):
Texture

The result of the texture being applied to both spheres (You can ignore the black lines not around the square, that's just the camera - yes it's an AR app):

SpaceShip

Now I exported the Sphere using a perl script I found that converts obj files to a list of vertices and texture coords OBJ2OPENGL. And the obj file has been converted with 2160 Vertices.

When I render the sphere:

    GLES20.glVertexAttribPointer(vertexHandle, 3, GLES20.GL_FLOAT,
            false, 0, ufo_sphere.getVertices());
    GLES20.glVertexAttribPointer(normalHandle, 3, GLES20.GL_FLOAT,
            false, 0, ufo_sphere.getNormals());
    GLES20.glVertexAttribPointer(textureCoordHandle, 3,
            GLES20.GL_FLOAT, false, 0, ufo_sphere.getTexCoords());

    GLES20.glEnableVertexAttribArray(vertexHandle);
    GLES20.glEnableVertexAttribArray(normalHandle);
    GLES20.glEnableVertexAttribArray(textureCoordHandle);

    // activate texture 0, bind it, and pass to shader
    GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,
            mTextures.get(textureIndex).mTextureID[0]);
    GLES20.glUniform1i(texSampler2DHandle, 0);

    // pass the model view matrix to the shader
    GLES20.glUniformMatrix4fv(mvpMatrixHandle, 1, false,
            modelViewProjection, 0);


    //GLES20.glDrawElements(GLES20.GL_TRIANGLES, sphere.getNumObjectVertex(), GLES20.GL_UNSIGNED_SHORT, 0);
    GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, sphere.getNumObjectVertex()); // I have tried TRIANGLES and TRIANGLE_FAN as well

    // disable the enabled arrays
    GLES20.glDisableVertexAttribArray(vertexHandle);
    GLES20.glDisableVertexAttribArray(normalHandle);
    GLES20.glDisableVertexAttribArray(textureCoordHandle);

Upvotes: 0

Views: 695

Answers (1)

Reigertje
Reigertje

Reputation: 725

I can see at least one thing which seems to be wrong...

GLES20.glVertexAttribPointer(textureCoordHandle, 3,
        GLES20.GL_FLOAT, false, 0, ufo_sphere.getTexCoords());

Texture coordinates typically have a size of 2 (u, v). So you could try this instead:

GLES20.glVertexAttribPointer(textureCoordHandle, 2,
        GLES20.GL_FLOAT, false, 0, ufo_sphere.getTexCoords());

Also, in the link you provided they use the GL_TRIANGLES format instead of GL_TRIANGLE_STRIP so you should switch back to that.

Upvotes: 1

Related Questions