Matrix.CreateRotation与顶点着色器

时间:2013-07-11 09:18:01

标签: c# xna direct3d

我正试图通过XNA了解3D开发,我有一个看似简单的查询,似乎无法找到答案。

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

我应该用什么来转换我的顶点?矩阵着色器或Matrix内部的方法?这两者有什么不同吗?

2 个答案:

答案 0 :(得分:1)

Vertex着色器在GPU上运行,您正在谈论的Matrix用于使用CPU对RAM中的对象进行操作。

  

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

这取决于。

顶点着色器非常快,因为它们在GPU上运行,因此通过运行一些令人惊讶的效果,您可以释放CPU来执行其他操作,并且所有工作负载都可以在GPU上进行调整通过其架构进行矩阵和向量运算。

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

一般来说,他们建议在可能的情况下使用着色器进行快速计算。

答案 1 :(得分:1)

  

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

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

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