在我的OpenGL应用程序中,我创建了一个SkyBox,如果我从原点渲染它,效果很好。我使用PVMatrix(ProjectionMatrix * ViewMatrix [Camera])渲染它,正如我所说,如果我从原点渲染它,一切都很好。但是如果我移动相机让我们说(0,6,-8)它不起作用并且SkyBox被渲染为普通立方体。
我认为应该为SkyBox创建一个ModelMatrix,并将其中的位置设置到相机的位置,但这没有用。当然,我现在用新的MVPMatrix渲染SkyBox。你有什么想法,为什么这不起作用,我能做些什么来使它工作?
答案 0 :(得分:1)
一般情况下,将天空盒翻译成相机应该可以解决问题。你有没有检查过你是否把它移到了正确的位置?
最常见的失败之一是您将相机移动到与物体相同的方向,这会导致物体以错误的方向移动两次。为了解释这一点,让我们看看不同的坐标系:
每个模型都在其自己的模型空间中定义。让我们称这个空间为M.使用模型矩阵(m),我们能够从模型空间转换到世界空间(W)。
M ---m---> W
现在我们的场景中有第二个物体,即相机,其视野空间为V,相机模型矩阵为c。我们可以再次转换
V ---c---> W
但是既然我们需要视图空间中的所有内容而不是将相机带到世界空间,我们必须反转这种转换,以便
W ---v---> V
一般来说,这是由v = c^-1
给出的,它是应用程序中指定的视图矩阵。从了解这一点开始,当你的视图矩阵包含z = 8的转换(因为T(8)= T(-8)^ - 1)时,你必须清楚为什么必须将对象移动z = -8。有关详细信息,请查看this presentation(从幻灯片6开始)