我在线阅读,如果我们想直接计算世界以查看矩阵,如果您具有相机位置,相机正在查看的位置和向上的位置,则可以使用OpenGL的Lookat函数-向量。
但是,这是我的混乱,该功能在以下内容中:
lookAt(const Vector3& vEye, const Vector3& vAt, const Vector3& vUp)
,如果我的相机简单地看着带有任意z挡板值的正Z轴,"增值税"向量是什么?我知道这是相机正在看的是你,但是如果我只是在z轴上看,而不是在任何特定的时候?
在我看来,您对轴系统感到困惑。简短的解释:
因为您确实需要一个相机(或者您喜欢的眼睛)才能看到世界,所以所有内容都必须在相机坐标(或者您喜欢的情况下查看空间)中定义。
通常,世界是在右撇子系统中定义的。这意味着z轴中的向量是x和y轴中向量的交叉产品: Vz = Vx x Vy
。如果更改订单(vz'= vy x vx),则获得左手轴系统,即Vz'= -VZ
通常在右撇子坐标系中定义了视图空间。将X轴朝右侧定义,将Y轴向上定义,使Z轴向背部(或者您喜欢的相机后面)生长。这意味着您可以看到的一切都在您面前,在您的视图空间坐标系统中具有负z坐标,而不是世界一个。 为了构建典型的" lookat"矩阵,您需要相机的位置(因为必须在此翻译所有内容),以定义视图方向(向Z轴的向量)和定义倾斜的上矢量,与肩膀有关的头部角度。使用这些向量的跨产品计算矩阵成员。它也可以使用旋转获得,但是跨产品包括旋转,并且更便宜。 构建此智能" Lookat"矩阵的方式需要这三个数据(位置,目标,UP)在World Coordinates System 中定义的。 最后您的问题:您的相机位于(XC,YC,ZC),并查看正Z轴的一个点。那还不够。Z轴的任何点为(0,0,ZP)。选择与" ZC"相关的" ZP":如果您希望相机查看世界正Z轴向方向,则需要 记住:世界坐标系统中的所有内容。
一点也不重要。您需要的只是一个很好的变换矩阵,可以考虑到这一点。zp > zc
。" ZP"有多大都没关系。好吧,除了数字问题。