OpenGL立方体贴图中的面约定

20
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  |
         |________|
2个回答

23
但我总是在Y轴上出错,所以我不得不用负面的Y面来反转正面的Y面。为什么?
啊,是的,这是立方体贴图中最奇怪的事情之一。放心,你并不是唯一陷入困境的人。你看:
立方体贴图已被规定遵循RenderMan规范(出于某种原因),而RenderMan假定图像原点位于左上角,与通常的OpenGL行为相反,后者将图像原点放在左下角。这就是为什么在Y方向上会发生交换的原因。它完全违反了通常的OpenGL语义,根本没有意义。但现在我们却被困在其中。
请注意,左上角与左下角是在从模型空间到NDC空间的身份转换的上下文中定义的。

1
好的,所以这不是我的错!这只是OpenGL的一种奇怪行为!谢谢! - linello

17

以下是OpenGL立方体贴图中坐标轴的示意图:

enter image description here


2
在OpenGL中,-z通常指向前方而不是+z,这对于立方体贴图是否有所不同?此外,如果正X纹理的左下角是立方体的底部最远右侧角落,那么与您的轴相比,-Y指向的方向不正确吗? - user673679
“在OpenGL中,-z通常不是指向前方而是+z吗?”这并不适用于立方体贴图。规范对此非常清楚。“如果正X纹理的左下角是立方体的底部、最远、右侧角落”,那么它不是这样的。+X面的左下角映射到立方体的“顶部”、“右侧”、“远角”。请记住:由于GL使用底部左侧坐标系来处理其面,因此OpenGL纹理往往是倒置的。 - Nicol Bolas
以上图像显示的是立方体贴图面从内部(立方体贴图中心)还是外部? - Irbis
@Irbis:立方体贴图根据方向纹理坐标计算像素,好像该方向在立方体内部一样。因此,每个面都代表立方体的内部,就像上面的图示一样。 - Nicol Bolas
当我在着色器中进行采样时,我是否还需要考虑Z轴被翻转的情况?例如,如果我有一个世界空间方向,是否应该反转该方向的Z轴以正确地采样立方体贴图?我进行了一些小实验,看起来是的,Z轴必须被反转。但我不完全确定,也许我在其他地方犯了错误。 - tuket
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接