0

我正在尝试绘制一个正方形并为其添加纹理。我刚开始使用 OpenGL,我正在关注本教程http://blog.uncle.se/2012/02/opengl-es-tutorial-for-android-part-vi-textures/

这是我的正方形绘制程序的代码:

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);
}

蓝色显示很好,但他们对纹理没有希望,没有错误,只是没有。就像我说的,我现在非常喜欢 OpenGL。谢谢 :)

4

1 回答 1

0

如果我没看错,它显示的是蓝色和白色方块(看起来像瓷砖),但不是纹理?纹理是存储在位图变量中的图像。创建位图后,您无需执行任何操作。看来您还没有完成教程;代码是他们用来渲染它的代码不在您的代码中。查看 UV 映射部分下方并查看该代码并确保包含该代码。

于 2013-03-29T16:39:20.217 回答