gpt4 book ai didi

opengl - 立方体贴图时OpenGL旋转纹理的原因是什么?

转载 作者:行者123 更新时间:2023-12-02 06:31:58 25 4
gpt4 key购买 nike

在学习如何使用 GLSL 着色器在 OpenGL 中实现环境映射的过程中,我偶然发现了一些困惑。

我为立方体贴图的每个面使用了 6 个不同的图像,并为“天空盒”生成了几何图形,“天空盒”是一个以围绕整个场景的原点为中心的简单立方体。我确保当前正在生成网格,并且加载 targa 图像的代码不会旋转像素。

渲染时,顶点着色器只是将顶点位置复制到片段,我使用插入的顶点位置作为 (s,t,r) 坐标从立方体贴图进行采样。

顶点着色器

#version 430

layout (location = 0) in vec3 VertexPosition;

out vec3 ReflectDir;

uniform mat4 MVP;

void main()
{
ReflectDir = VertexPosition;
gl_Position = MVP * vec4(VertexPosition, 1.0);
}

片段着色器

#version 430

uniform samplerCube CubeMapTex;

in vec3 VertexPosition;

out vec4 FragColor;

void main() {
FragColor = texture(CubeMapTex, VertexPosition);
}

我注意到立方体贴图侧面的纹理旋转了 180 度。

On the left is the texture I used for the positive x face of the cube, and on the right is the rendered result

然后在试图弄清楚发生了什么之后,我发现 this tutorial并发现 OpenGL 正在以某种奇怪的方式展开立方体贴图。下图显示了我在显示展开立方体的所有 6 个面的 (s,t) 轴时得出的结论。

enter image description here

所以我真正的问题是这种实现背后的原因是什么?是否有解释为什么OpenGL以这种方式处理立方体映射?

最佳答案

是的,OpenGL 立方体贴图规范很奇怪。据我所知,立方体贴图纹理规则是从 RenderMan 的规则中逐字复制的(你知道,皮克斯开发的用于渲染他们的东西的软件)。因此,最终您必须询问皮克斯的人员,为什么他们选择特定的规则集。

一种经常出现但也是非常错误的解释是,立方体贴图的像素原点位于其各自立方体面的左上角(无论左上角是什么),并使用左手坐标系。但如果你仔细观察,情况并非如此。

更可能的解释是,对于立方体贴图,像素原点位于每个立方体面共面并对齐的基础平面的正/正象限中是有意义的。

不管怎样,我建议你不要考虑太多,因为,就像数学中的一切一样,你可以自由选择如何让事情发挥作用,只要你的规则集以某种方式与其他规则集保持一致。系统。

关于opengl - 立方体贴图时OpenGL旋转纹理的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com