在HLSL中有很多矩阵乘法,虽然我知道如何以及在何处使用它们但我不确定它们是如何派生出来的或它们的实际目标是什么。
所以我想知道是否有在线资源可以解释这一点,我特别好奇是通过投影矩阵将世界矩阵乘以视图矩阵和世界+视图矩阵背后的目的是什么。
答案 0 :(得分:12)
您可以从数学角度,this wikipedia article或msdn获取一些信息。
基本上,当您将3d模型渲染到屏幕时,您将从分散在3d空间中的简单顶点集合开始。这些顶点都有自己的位置,用“对象空间”表示。也就是说,它们通常具有在被渲染的场景中没有意义的坐标,但仅表示一个顶点与同一模型中的另一个顶点之间的关系。 例如,模型顶点的位置只能从-1到1(或类似,取决于模型的创建方式)。
为了将模型渲染到正确的位置,您必须缩放,旋转并将其转换为场景中的“真实”位置。您要移动到的位置以“世界空间”坐标表示,该坐标也表示场景中顶点之间的真实关系。为此,您只需将每个顶点的位置与其 World 矩阵相乘。必须创建此矩阵以包含需要应用的平移/旋转/缩放参数,以使对象显示在场景中的正确位置。
此时(在将所有模型的所有顶点与世界矩阵相乘之后),您的顶点以世界坐标表示,但您仍然无法正确渲染它们,因为它们相对于您的位置不 “查看”(即你的相机)。所以,这次你使用View矩阵将所有东西相乘,该矩阵反映了渲染场景的视点的位置和方向。
现在所有顶点都处于正确的位置,但为了模拟perspective,你仍然必须将所有顶点与Projection矩阵相乘。最后一次乘法确定顶点位置如何根据与相机的距离而变化。
现在终于所有顶点,从它们在“对象空间”中的位置开始,已经移动到屏幕上的最终位置,在那里它们将被渲染,栅格化然后呈现。
答案 1 :(得分:1)