2016-08-15 23 views
0

在GLM中,我们有一个超载的运算符用于乘法矩阵运算。矩阵乘法中哪一个更好? GLM的超载*运算符或直接着色器使用

我们可以做矩阵乘法这样在GLM使用此运算符:

glm::mat4 MVP = Projection * View * Model; 
//after that pass MVP to uniform 'MVP' 

但在其他的方式,我们可以通过投影,视图和模型,以三种不同的制服,在着色器程序做乘法。

GLM在CPU上运行,但着色器程序在GPU上运行。由于GPU的架构,在着色器程序中我们可以比CPU更快地进行矩阵运算。

但我无法确定。哪种方式更快?

+2

经常测量。这取决于你的代码。 – Rakete1111

+0

谢谢你,照亮我脑海的黑暗面。 –

回答

1

理想情况下,如果你需要在着色器中单独使用它们以实现其他目的,则可以单独通过它们。如果你所需要的只是MVP,那么最好将MVP作为单个矩阵乘以并传递给着色器。

什么是最好的,很大程度上取决于渲染的顶点数量以及渲染是否具有多个绘制调用以及少量顶点或少量绘制具有多个顶点的调用。

总是 CPU上的乘法会更好,因为它每次绘制调用一次,而不是每个顶点一次。如果需要在着色器之间改变值,则必须在着色器中执行乘法。

我想我是太急于回答,但是这可能是非常相似的问题Should I calculate matrices on the GPU or on the CPU?

+0

大多数情况下?什么是例外? –

+0

如果你有很多的矩阵乘法,并且每个点只渲染具有不同矩阵的点,并且每个点都是一次绘制调用,那么如果CPU已经在执行其他物理计算使得它成为瓶颈,GPU方法中的乘法可能会更快渲染每一帧。 – Harish

+0

像粒子效应? –