Camera/Eye坐标与世界坐标的区别

Difference between Camera/Eye coordinates and world coordinates

为了简单起见,我们以OpenGL渲染系统为例。据我了解,

OpenGL 中的相机与世界 space 的原点对齐,即 (0,0,0)。我还读到我们不移动相机,所以它会停留在世界坐标中的原始位置 (0,0,0)。相机朝向负z方向。

所以问题是,如果你不移动相机那么它会一直停留在世界space的原点(0,0,0).如果是这样的话,那么世界坐标和眼睛坐标之间就没有区别了。因为比如Object A在世界坐标中的位置是(2,2,-5)。在眼睛坐标中它将是相同的 (2-0, 2-0, -5-0) = (2,2,-5)

相机就是眼睛。如果你不移动你的相机,这意味着你的视图矩阵是一个单位矩阵,所以你乘以它的任何坐标都将保持不变。

让我们举个例子,我们有一个点正在渲染 (2.0, 2.0, -5.0)。这是点的世界space位置。这意味着无论相机在哪里,该点都位于 (2.0, 2.0, -5.0)

如果相机像你说的那样在原点,是的,眼睛(相机)space 位置与世界space 位置相同。

举个简单的例子,假设您想将相机沿正 z 轴移动 2 个单位。现在你的相机在 (0, 0, 2) 并且当你从你的相机(或眼睛)看时,该点将在 z 轴上距离原点 2 个单位,因为你将相机移回,所以眼睛 space 位置是 (2.0, 2.0, -7.0).

这就是在您的相机上进行更复杂的转换时会发生的情况。你将有一个视图矩阵,它只是你相机变换的逆矩阵,它被应用于世界中的每个点 space 以将其转换为眼睛(或相机)space.