简体   繁体   中英

OpenGL ES Android Bitmap Texture not showing

I'm trying to draw a square and add a texture to it. I'm just starting with OpenGL and I'm following this tutorial http://blog.uncle.se/2012/02/opengl-es-tutorial-for-android-part-vi-textures/ .

Here is the code for my squares draw procedure:

public void draw(float[] mvpMatrix) {
    // Add program to OpenGL environment
    GLES20.glUseProgram(mProgram);

    // get handle to vertex shader's vPosition member
    mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");

    // Enable a handle to the triangle vertices
    GLES20.glEnableVertexAttribArray(mPositionHandle);

    // Prepare the triangle coordinate data
    GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX,
                                 GLES20.GL_FLOAT, false,
                                 vertexStride, vertexBuffer);

    // get handle to fragment shader's vColor member
    mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor");

    // Set color for drawing the square
    GLES20.glUniform4fv(mColorHandle, 1, color, 0);

    /** now trying to add the texture */

    Bitmap bitmap = BitmapFactory.decodeResource(chamRenderer.context.getResources(), 
            R.drawable.ic_launcher);

    // Create an int array with the number of textures we want, 
    // in this case 1.
    int[] textures = new int[1]; 
    // Tell OpenGL to generate textures.
    GLES20.glGenTextures(1, textures, 0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
    // Scale up if the texture if smaller.
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, 
            GLES20.GL_TEXTURE_MAG_FILTER, 
            GLES20.GL_LINEAR); 
    // scale linearly when image smalled than texture
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, 
            GLES20.GL_TEXTURE_MIN_FILTER, 
            GLES20.GL_LINEAR);

    // get handle to shape's transformation matrix
    mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
    Renderer.checkGlError("glGetUniformLocation");

    // Apply the projection and view transformation
    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);
    Renderer.checkGlError("glUniformMatrix4fv");

    // Draw the square
    GLES20.glDrawElements(GLES20.GL_TRIANGLES, drawOrder.length,
                          GLES20.GL_UNSIGNED_SHORT, drawListBuffer);

    // Disable vertex array
    GLES20.glDisableVertexAttribArray(mPositionHandle);
}

The blue colour display fine but theirs no hope with the texture, no errors, just nothing their. Like I said I'm very now to OpenGL. Thanks :)

If I am reading this right it is displaying the blue and white squares (that looks like tiles) but not the texture? The texture is the image stored in bitmap variable. You do not do anything after creating the bitmap. It looks like you have not finished the tutorial yet; the code is that they use to render it is not in your code. Look under the part that says UV mapping and look at that code and make sure you include that code.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM