WebGL에서 텍스처를 사용하여 여러 개의 4x4 행렬을 버텍스 쉐이더로 보내려면 어떻게해야합니까? 골격 변형을 위해이 작업을 수행하고 싶습니다. 이 모든 것을 CPU에서 수행하면 프레임 속도가 떨어집니다.텍스처에서 4x4 행렬을 버텍스 쉐이더로 보내려면?
1
A
답변
2
텍스처에 행렬을 넣지 마십시오. 대신 균일 한 배열을 사용해야합니다.
uniform mat4 skelMats[X];
원하는대로 유니폼을 채울 수 있습니다. 분명히 이것에서 벗어날 수있는 균일 한 행렬의 수에는 제한이 있지만 대부분의 구현은 적어도 64 개의 행렬을 지원해야합니다. 당신이 모두에서
uniform mat4 theMatrix;
에게 다음은 시작에서 설정 한 행렬은 모두 쉐이더에서 사용할 수있는 정점과 프래그먼트 쉐이더를 정의하는 경우
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>
.