如何使用WebGL中的纹理向顶点着色器发送许多4x4矩阵?我想为骨骼转换做这个。在cpu中执行此操作会导致我的帧速率崩溃。
答案 0 :(得分:2)
您不应该尝试将矩阵放在纹理中。相反,您应该使用统一数组:
uniform mat4 skelMats[X];
你可以按照自己的意愿填写这些制服。显然,您可以从中获得统一矩阵的数量限制,但大多数实现应该支持至少64个矩阵。
答案 1 :(得分:0)
<script id ="VERTEX" type="GL_VERTEX_SHADER">
...
uniform mat4 theMatrix;
void main(void) {
gl_Position=.... }
</script>
...
<script>
...
var A_Matrix = [
x, 0, a, 0,
0, y, b, 0,
0, 0, c, d,
0, 0, -1, 0
];
var _Matrix=gl.getUniformLocation(program,"theMatrix");
gl.uniformMatrix4fv(_Matrix,false,new Float32Array(A_Matrix));
...
</script>
如果您定义
uniform mat4 theMatrix;
在顶点和片段着色器中,您可以在两个着色器中使用从初始设置的矩阵。