哪一个在矩阵乘法中更好? GLM的重载*运算符或直接使用着色器

时间:2016-08-15 00:24:29

标签: c++ glsl opengl-3 glm-math

在GLM中,我们有一个重载的'*'运算符用于乘法矩阵。

我们可以在GLM中使用此运算符进行矩阵乘法:

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

但在其他方面,我们可以将投影,视图和模型传递给三种不同的制服,并在着色器程序中进行乘法。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

我认为我太快回答,但这可能与问题Should I calculate matrices on the GPU or on the CPU?非常相似