如何将纹理中的4x4矩阵发送到顶点着色器?

时间:2011-08-13 23:24:13

标签: webgl

如何使用WebGL中的纹理向顶点着色器发送许多4x4矩阵?我想为骨骼转换做这个。在cpu中执行此操作会导致我的帧速率崩溃。

2 个答案:

答案 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;

在顶点和片段着色器中,您可以在两个着色器中使用从初始设置的矩阵。