math - 矩阵乘法 - View /投影、世界/投影等

标签 math directx matrix syntax-highlighting hlsl

在 HLSL 中有很多矩阵乘法,虽然我了解如何以及在何处使用它们,但我不确定它们是如何导出的或它们的实际目标是什么。

所以我想知道是否有在线资源可以解释这一点,我特别好奇将世界矩阵乘以 View 矩阵并将世界+ View 矩阵乘以投影矩阵的目的是什么。

最佳答案

您可以在 this wikipedia article 上从数学角度获得一些信息。或在 msdn .

本质上,当您将 3d 模型渲染到屏幕上时,您从散布在 3d 空间中的简单顶点集合开始。这些顶点都有自己在“对象空间”中表达的位置。也就是说,它们通常具有在正在渲染的场景中没有意义的坐标,而仅表示同一模型的一个顶点与另一个顶点之间的关系。
例如,模型顶点的位置只能在 -1 到 1 之间(或类似,这取决于模型的创建方式)。

为了在正确的位置渲染模型,您必须缩放、旋转并将其转换到场景中的“真实”位置。你移动到的这个位置用“世界空间”坐标表示,它也表达了场景中顶点之间的真实关系。为此,您只需将每个顶点的位置与其世界矩阵相乘。必须创建此矩阵以包含您需要应用的平移/旋转/缩放参数,以便对象出现在场景中的正确位置。

此时(将所有模型的所有顶点与世界矩阵相乘后)您的顶点以世界坐标表示,但您仍然无法正确渲染它们,因为它们的位置与您的“ View ”(即您的相机)无关。因此,这次您使用 View 矩阵将所有内容相乘,该矩阵反射(reflect)了您渲染场景的视点的位置和方向。

所有顶点现在都在正确的位置,但为了模拟 perspective您仍然必须将所有内容与投影矩阵相乘。最后的乘法决定了顶点的位置如何根据与相机的距离而变化。

现在终于所有顶点,从它们在“对象空间”中的位置开始,都被移动到屏幕上的最终位置,在那里它们将被渲染、光栅化然后呈现。

关于math - 矩阵乘法 - View /投影、世界/投影等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1283865/

相关文章:

java - 计算 Inv 卡方 Java

java - 对于循环变量数学不计算(z/loopLength *100)

directx - 解除绑定(bind)着色器资源

c# - 我的 SharpDX 应用程序中存在内存泄漏

c++ - 在 Direct X 9.0c 中获取 LPDIRECT3DTEXTURE9 的尺寸?

r - 计算 R 矩阵中每列特定整数的数量

matrix - 如何使用 rand() 和特定比例的 1 创建二进制矩阵?

math - 最小化两个数据集之间的插值误差

c++ - 水平/垂直均匀分布网格单元?

python - numpy 中的对称矩阵?