뼈 / 스킨을 사용하여 애니메이션을 연습하고 있습니다. 버텍스 당 하나의 행렬을 셰이더를 보내려고합니다. 이 두 가지 접근법을 생각할 수 있습니다.
방법 1
이 뼈대마다 하나의 균일 한 핸들이 있습니다
u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]");
u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]");
그리고 onDraw
나는 그들 각각을 쉐이더에 보냅니다.
GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0);
행렬 수가 많은 경우 분명히 좋은 방법이 아닙니다. 리팩토링 할 코드가 많기 때문에 아직 시도하지 않은 두 번째 아이디어
방법 2
를 사용하여 glUniformMatrix4fv
한 번에 모두 보내기 (20 개의 행렬이 있다고 가정)
GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0);
어디 matrices
있어 float[16 * 20]
. 그러나 각 뼈의 행렬을 수정하는 것은 약간 지루합니다. 예를 들어, 3 번째 행렬을 얻으려면
float[] _3rd = Arrays.copy(matrices, 3*16, 4*16);
값을 저장하면 더욱 성 가실 수 있습니다.
지금 방법 1을 사용하고 있지만 그리 똑똑하지는 않습니다 ...
여러 행렬을 OpenGL ES 2 셰이더에 보내는 가장 좋은 방법은 무엇입니까?
LE : Android를 사용하고 있으므로 Java 솔루션을 찾고 있습니다.