18

OpenGL 对立方体贴图的约定是什么?

我遵循了这个约定(在网站上找到)并使用对应的 GLenum 来指定 6 个面GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT,但我总是弄错 Y,所以我必须用负 Y 面反转正 Y。为什么?

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

2 回答 2

21

但我总是弄错 Y,所以我必须用负 Y 面反转正 Y。为什么?

啊,是的,这是关于 Cube Maps 最奇怪的事情之一。请放心,你不是唯一一个爱上它的人。你看:

Cube Maps 已被指定为遵循 RenderMan 规范(无论出于何种原因),并且 RenderMan 假定图像的原点位于左上角,这与图像原点位于左下角的通常 OpenGL 行为相反。这就是为什么事情会在 Y 方向交换。它完全打破了通常的 OpenGL 语义,根本没有意义。但现在我们被困住了。

请注意,左上角和左下角是在从模型空间到 NDC 空间的恒等转换的上下文中定义的

于 2012-07-27T15:06:06.587 回答
17

这是一个方便的图表,显示了轴在 OpenGL 立方体贴图中是如何工作的:

在此处输入图像描述

于 2012-07-27T19:20:23.207 回答