OpenGL ES почему моя текстура повернута на 180 градусов?

#opengl-es #texture-mapping

#opengl-es #отображение текстур

Вопрос:

я рисую текстуру на простой плоскости. Код визуализации в основном такой:

 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 градусов. что я делаю не так?

Ответ №1:

Это потому, что соглашение о текстурных координатах OpenGL «перевернуто» по сравнению с обычными соглашениями, чтобы исправить это, переверните свои t-текстурные координаты (0 -> 1, 1 -> 0).

Комментарии:

1. Спасибо за подсказку. Я исправляю это с помощью: new float[] { 0, 0, 0, -1, 1, -1, 1, -1, 1, 0, 0, 0 }