0

我正在尝试使用 XNA 进行 3D 开发,但我有一个看似简单的查询,但我似乎无法找到答案。

我们有顶点着色器,如果我理解正确的话,它是用来转换顶点的。但是,我在 Matrix 类中也有各种方法,例如CreateRotationY等,它们似乎做同样的事情。

我应该用什么来转换我的顶点?顶点着色器或矩阵内部的方法?两者之间有什么区别吗?

4

2 回答 2

1

Matrix 类中的各种方法,例如 CreateRotationY 等,它们似乎做同样的事情

当您使用 时Matrix.CreateRotationY(),您实际上并没有转换任何顶点。您正在创建(计算)一个矩阵,该矩阵最终将被发送到顶点将被它转换的着色器。

因此,即使您在 C# 中使用 Matrix 方法,顶点变换的繁重工作也始终在着色器中完成。将这两个选项(Xna 与 HLSL 中的矩阵方法)视为实现同一目标的两种独立方法是没有意义的。它们都代表了难题的不同且必要的部分。

于 2013-07-11T17:49:46.687 回答
1

顶点着色器在 GPU 上运行,您所说的矩阵用于使用 CPU 对 RAM 中的对象进行操作。

我应该用什么来转换我的顶点?

这取决于。

顶点着色器非常快,因为它们在 GPU 上运行,因此通过运行一些惊人的效果,您可以释放 CPU 来做其他事情,并将所有工作负载都放在 GPU 上,GPU 的架构专门针对矩阵和矢量运算进行了专门设计。

在 CPU 上,使用矩阵你可以做小而短的不太(“非常”是相对于你的程序性能问题的概念)计算密集型操作,因为将计算移动到 GPU,有它的成本。但这一切都取决于您的应用程序在做什么,因此您必须进行衡量。

一般来说,他们建议尽可能使用着色器进行快速计算。

于 2013-07-11T09:23:06.443 回答