2

我正在一个简单的平面上绘制纹理。渲染代码基本上是这样的:

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer);

gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, _textureBuffer);

gl.glDrawArrays(GL10.GL_TRIANGLES, 0, _vertexBuffer.capacity()/3);

使用 _vertextBuffer 作为

new float[] {
    0, 0, 0,
    0, height, 0,
    width, height, 0,
    width, height, 0,
    width, 0, 0,
    0, 0, 0
};

其中宽度和高度是正值。_textureBuffer 是

new float[] {
    0, 0,
    0, 1,
    1, 1,
    1, 1,
    1, 0, 
    0, 0
}

有了这个,纹理被翻转和镜像或翻转 180 度。我究竟做错了什么?

4

1 回答 1

3

这是因为 OpenGL 纹理坐标约定与正常约定“颠倒”,要修复它,翻转你的 t 纹理坐标 (0 -> 1, 1 -> 0)。

于 2011-04-16T14:09:11.393 回答