【发布时间】:2015-07-08 15:33:09
【问题描述】:
我刚刚写了一个程序来旋转一个对象。它只是使用空闲函数更新变量 theta。该变量用于创建旋转矩阵..然后我这样做..
gl_Position = rx * ry * rz * vPosition;
rx、ry 和 rz(矩阵)对于同一帧中的每个点都是相同的......但是它正在被对象中的每个点相乘......我应该使用一个统一变量mat4 存储rx* ry * rz 的相乘值并将其传递给着色器?...或者让着色器处理每个点的乘法?.....哪个更快?...
【问题讨论】:
-
问题“哪个更快?”只能通过您的仔细分析来回答。在您 (a) 确定这是您的应用程序的瓶颈并且 (b) 确定哪种方法实际上更快之前,您应该选择更简单且更具可读性的方法。
-
只是想知道矩阵乘法是否比在 cpu 和 gpu 之间传输数据成本更高......
-
我还要补充一点,编译器会在大多数情况下为您解决这种问题。就像循环展开和尾递归优化一样。就像 RedRobotHood 说的分析你的代码,看看它是否是一个瓶颈。
-
@Rob 这不是编译器会为您解决的问题。它需要更改代码以将单个矩阵数据作为统一传递,而不是传递三个。
-
@MuertoExcobito 但优化器可能会发现
rx * ry * rz的结果仅取决于制服并创建一个“预着色器”,它将在 CPU 上执行一次,然后将结果作为制服传递。不过取决于驱动程序。