我试图让我的周围3D开发与XNA的头,我有一个看似简单的查询,我似乎无法找到答案。Matrix.CreateRotation VS顶点着色器
如果我理解正确,我们有顶点着色器,用于变换顶点。但是,在矩阵类中,我也有各种方法,例如CreateRotationY
等,它们似乎也是这样做的。
我应该用什么来改变我的顶点?顶点着色器或矩阵内部的方法?两者之间有什么不同吗?
我试图让我的周围3D开发与XNA的头,我有一个看似简单的查询,我似乎无法找到答案。Matrix.CreateRotation VS顶点着色器
如果我理解正确,我们有顶点着色器,用于变换顶点。但是,在矩阵类中,我也有各种方法,例如CreateRotationY
等,它们似乎也是这样做的。
我应该用什么来改变我的顶点?顶点着色器或矩阵内部的方法?两者之间有什么不同吗?
Matrix类里面各种方法,如CreateRotationY等 这似乎做同样的事情
当您使用Matrix.CreateRotationY()
,你实际上并没有将任何顶点。您正在创建(计算)矩阵,该矩阵将最终发送到着色器,顶点将由其转换。
所以顶点变换的繁重的,甚至当你使用C#矩阵方法着色器总是完成。将这两种选择(Xna vs HLSL中的矩阵方法)想象成实现相同目标的两种独立方式是没有意义的。它们代表了这个难题的不同和必要的部分。
顶点着色器在GPU上运行,矩阵你在谈论用于通过对象在你的RAM运行,使用CPU。
我应该使用变换我的顶点?
这取决于。
顶点着色器非常快,因为他们在GPU上运行,通过运行一些惊人的效果,你自由CPU做别的事情,并psuh在GPU上的所有工作负载,这是专为注重准确矩阵与向量运算通过它的结构。
在CPU,使用矩阵,你可以做小而短不是很(“非常”是相对于你的程序性能问题的概念)的计算密集型操作,如移动计算的GPU,拥有成本。但这一切都取决于您的应用程序在做什么,因此您必须进行测量。
一般而言,他们建议在可能的时候使用着色器进行快速计算。
我明白了,我可以继续假设与顶点着色器将使用HT&L功能,坐在GPU,而矩阵法将使用CPU上的SSE功能转变? – user1435899
@ user1435899:HT&L不是强制存在的(afaik),所以我不会阐述一个*方法*它应用calculaton。 – Tigran
等待,所以如果我使用Matrix.CreateRotationY(),它将使用CPU创建矩阵和GPU来基于矩阵进行最终变换?那么不管我是否使用HLSL,所有顶点最终都会通过顶点着色器发送? – user1435899
是的。通常,“Model”的未转换顶点存储在GPU内存中,并且它们不会被c#更改或访问。每个帧的副本都通过GPU的着色器进程发送,通过任何矩阵从C#(Draw方法)发送到着色器。下一帧,新的和可能不同的一组矩阵被发送到GPU以转换原始顶点的新副本。由于新副本的转换与上一帧的副本不同,因此模型似乎会移动或旋转。 –