2013-05-11 8 views
8

OpenGL 2.0で作成した正方形にテクスチャをマッピングしようとしましたが、そうするとテクスチャが上下逆さまに見えますが、マッピングが間違っていますか?それとも私はそれを描いているのですか?ここでは、それがどのように見えるかの写真です:逆さまのテクスチャ? | OpenGL-ES 2.0(アンドロイド)

Upside Down

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

どのように私は右側のビューを達成することができますか?

答えて

6

これはよくある間違いのようです。 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); 
} 
+10

は、GPU上で行う必要があるために無用の計算です。テクスチャを読み込んで一度ひっくり返すと、逆さまのテクスチャが検出されるのが最善の選択肢です。 – GraphicsMuncher

関連する問題