Конвенция лиц в OpenGL cubemapping

Что такое соглашение OpenGL для кубов?

Я следовал этому соглашению (нашел на веб-сайте) и использовал корреспондента GLenum для указания 6 граней GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT, но я всегда ошибаюсь, поэтому мне нужно инвертировать положительный Y с отрицательным Y лицом. Почему?

          ________
         |        |
         | pos y  |
         |        |
  _______|________|_________________
 |       |        |        |        |
 | neg x | pos z  |  pos x |  neg z |
 |       |        |        |        |
 |_______|________|________|________|
         |        |
         |        |
         | neg y  |
         |________|

Ответ 1

но я всегда ошибаюсь, поэтому мне нужно инвертировать положительный Y с отрицательным Y лицом. Почему?

А, да, это одна из самых странных вещей о Cube Maps. Будьте уверены, вы не единственный, кто может за это заплатить. Вы видите:

Cube Maps были указаны для соответствия спецификации RenderMan (по какой-либо причине), а RenderMan предполагает, что происхождение изображений находится в левом верхнем углу, в отличие от обычного поведения OpenGL, имеющего начало изображения в левом нижнем углу. Вот почему вещи меняются местами в направлении Y. Он полностью нарушает обычную семантику OpenGL и не имеет никакого смысла. Но теперь мы застряли с ним.

Обратите внимание, что верхний левый и нижний левые определяются в контексте преобразования идентичности из пространства модели в пространство NDC

Ответ 2

Вот удобная диаграмма, показывающая, как оси работают в кубах OpenGL:

enter image description here