我正试图通过XNA了解3D开发,我有一个看似简单的查询,似乎无法找到答案。
我们有顶点着色器,如果我理解正确的话,用于变换顶点。但是,我在Matrix类中也有各种方法,例如CreateRotationY
等,它们似乎做同样的事情。
我应该用什么来转换我的顶点?矩阵着色器或Matrix内部的方法?这两者有什么不同吗?
答案 0 :(得分:1)
Vertex着色器在GPU上运行,您正在谈论的Matrix用于使用CPU对RAM中的对象进行操作。
我应该用什么来转换我的顶点?
这取决于。
顶点着色器非常快,因为它们在GPU上运行,因此通过运行一些令人惊讶的效果,您可以释放CPU来执行其他操作,并且所有工作负载都可以在GPU上进行调整通过其架构进行矩阵和向量运算。
在CPU上,使用矩阵你可以做很小而不是很短(“非常”相对于你的程序性能问题概念)计算密集型操作,因为移动计算到GPU,有其成本。但这一切都取决于你的应用程序在做什么,所以你必须衡量。
一般来说,他们建议在可能的情况下使用着色器进行快速计算。
答案 1 :(得分:1)
Matrix类中的各种方法,如CreateRotationY等 这似乎做同样的事情
使用Matrix.CreateRotationY()
时,实际上并没有转换任何顶点。您正在创建(计算)一个矩阵,该矩阵最终将被发送到着色器,在该着色器中顶点将被变换。
因此,即使在C#中使用Matrix方法,也总是在着色器中完成顶点变换的繁重工作。将这两个选项(Xna与HLSL中的矩阵方法)视为实现相同目标的两种独立方法是没有意义的。它们都代表了难题的不同和必要部分。