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 に答える