Как отправить матрицы 4х4 в текстуре в вершинный шейдер? - PullRequest
1 голос
/ 14 августа 2011

Как мне отправить множество матриц 4х4 в вершинный шейдер с использованием текстур в WebGL?Я хотел бы сделать это для трансформации скелета.Выполнение всего этого в процессоре убивает мою частоту кадров.

Ответы [ 2 ]

2 голосов
/ 15 августа 2011

Вы не должны пытаться помещать матрицы в текстуры. Вместо этого вы должны использовать однородные массивы:

uniform mat4 skelMats[X];

Вы можете заполнить эту форму, как пожелаете. Очевидно, что существует ограничение на число однородных матриц, которые вы можете из этого извлечь, но большинство реализаций должны поддерживать по крайней мере 64 матрицы.

0 голосов
/ 17 марта 2012
<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;

в вершинном и фрагментном шейдерах, тогда матрица, которую вы установили из инициации, может использоваться в обоих шейдерах.

...