9

OpenGL es 2.0 で作成された正方形にテクスチャをマッピングしようとしましたが、テクスチャが上下逆さまに表示されます。マッピングが間違っていますか? またはそれを描く方法は?これがどのように見えるかの写真です:

逆さまに

ここに onDrawFrame() の私のコードがあります

public void onDrawFrame(GL10 glUnused) {
    GLES20.glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
    GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
    GLES20.glUseProgram(mProgram);
    GLES20.glEnable(GLES20.GL_BLEND);
    GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
    GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureID);

    mTriangleVertices.position(TRIANGLE_VERTICES_DATA_POS_OFFSET);
    GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT,
            false, TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);

    mTriangleVertices.position(TRIANGLE_VERTICES_DATA_UV_OFFSET);
    GLES20.glEnableVertexAttribArray(maPositionHandle);

    GLES20.glVertexAttribPointer(maTextureHandle, 2, GLES20.GL_FLOAT,
            false, TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);

    GLES20.glEnableVertexAttribArray(maTextureHandle);


    Matrix.orthoM(mProjMatrix, 0, 0, 200, 0, 100, -5, 5);
    GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mProjMatrix, 0);
    GLES20.glDrawElements(GLES20.GL_TRIANGLES, drawOrder.length,
            GLES20.GL_UNSIGNED_SHORT, drawListBuffer);
}

正方形とマッピング UV の調整は次のとおりです。

    private final float[] mTriangleVerticesData = {
        // X, Y, Z, U, V
        0f, 0f, 0, 0.0f, 0.0f,
        50f, 0f, 0, 1.0f, 0.0f,
        50f, 50f, 0, 1.0f, 1.0f,
        0f, 50f, 0.0f, 0.0f, 1.0f };
private short drawOrder[] = { 0, 1, 2, 0, 2, 3 };

どうすれば右側を上にしたビューを実現できますか?

4

1 に答える 1

8

これはよくある間違いのようです。テクスチャの OpenGL の原点が (左上隅ではなく) 左下隅にあるという事実を説明する必要があります。

補償するためにできることがいくつかあります。

  • ピクセル行を下から上に読み取ります。
  • ピクセル ラインを交換します。
  • またはテクスチャの Y 座標を交換します。

シェーダーでテクスチャ座標を交換してみることができます (ソース: http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_06 )

void main(void) {
  vec2 flipped_texcoord = vec2(f_texcoord.x, 1.0 - f_texcoord.y);
  gl_FragColor = texture2D(mytexture, flipped_texcoord);
}
于 2013-05-13T09:53:25.850 に答える