WebGLのテクスチャを使用して、多くの4x4行列を頂点シェーダに送信するにはどうすればよいですか?私は骨格変換のためにこれをしたいと思います。これをすべてCPUで行うと、私のフレームレートが殺されます。テクスチャの4x4行列を頂点シェーダに送る方法は?
1
A
答えて
2
テクスチャに行列を配置しないでください。代わりに、均一な配列を使用する必要があります。
uniform mat4 skelMats[X];
これらの制服は、必要に応じて塗りつぶすことができます。明らかに、これから得ることができる均一な行列の数には限界がありますが、ほとんどの実装では少なくとも64個の行列をサポートする必要があります。
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;
を定義する場合は、あなたが開始してからセットアップマトリックスは、両方のシェーダで使用することができます。