天空盒不随相机移动

SkyBox does not move with camera

在我的 OpenGL 应用程序中,我创建了一个天空盒,如果我从原点渲染它,它会很好用。我用 PVMatrix (ProjectionMatrix * ViewMatrix [Camera]) 渲染它,正如我所说,如果我从原点渲染它,一切都很好。但是,如果我将相机移动到比方说 (0,6,-8),它就不起作用并且 SkyBox 被渲染为普通立方体。

我认为为SkyBox 创建一个ModelMatrix 并将其中的位置设置为相机的位置就足够了,但这没有帮助。当然,我现在使用新的 MVPMatrix 渲染 SkyBox。您知道为什么这不起作用吗?我该怎么做才能让它起作用?

一般来说,将天空盒转换为相机应该可行。你有没有检查过它是否移动到正确的位置?

最常见的故障之一是您将相机移动到与对象相同的方向,这会导致对象在错误的方向上移动两次。为了解释这一点,让我们看看不同的坐标系:

每个模型都在其自己的模型中定义 space。让我们称之为 space M。使用模型矩阵 (m),我们能够从模型 space 转换为世界 space (W)。

M ---m---> W

现在我们的场景中有第二个对象,即相机,其视图 space V 和相机模型矩阵 c。我们可以再次变换

V ---c---> W

但是因为我们需要视野中的所有东西 space 而不是让相机到达世界 space,所以我们必须反转这个转换

W ---v---> V

一般来说,这是由 v = c^-1 给出的,这是应用程序中指定的视图矩阵。通过了解这一点,应该很清楚为什么当您的视图矩阵包含对 z=8 的转换时(因为 T(8) = T(-8)^-1),您必须将对象移动 z=-8。有关详细信息,请查看 this presentation(从幻灯片 6 开始)