1

我正在尝试制作一个将 90x10 矩阵与 10x1 矩阵相乘的 GLSL 着色器。90x1 结果对应于 30 个顶点的 xyz 值。第一个大矩阵仅在启动时加载。另一方面,另一个矩阵可以在每次渲染时改变。

怎么可能做到这一点?我猜第一个矩阵可以存储为纹理,但我不知道如何处理第二个。

4

1 回答 1

1

只需将第二个矩阵作为一个统一的浮点数组传递。

uniform float vec10[10];

并逐个元素地执行乘法运算。

请注意,如果这太慢,您可以尝试以这样的方式打包您的大纹理,以便您可以使用单个 texelfetch 读取 4 个元素。

如果您想查看绑定统一数组的语法,请参阅http://www.opengl.org/wiki/Uniform_(GLSL)

请注意,将第二个矩阵存储在纹理中也是完全合法的;我只是不确定这样做与作为制服发送相比对性能的影响。但是先让它工作,然后再进行分析和优化。

于 2013-03-27T13:41:53.940 回答