颠倒的质地? | OpenGL-ES 2.0(android)

我试图将我的纹理映射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 }; 

我怎样才能实现右侧视图?

这看起来像是一个常见的错误。 您需要考虑到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); }