2017-03-19 1 views
0

콜레다 .dae 파일 형식에서 해골을 추출하려고합니다. 루트 노드뿐만 아니라 최종 자식 노드 위치를 올바르게 얻을 수 있지만 나머지 노드는 올바르지 않은 것으로 보입니다.GLES/Java Collada (.dae) 해골 가져 오기

루트 (좋은) -> 어린이 (때로는 좋은/때로는 나쁜) -> ... -> 최종 아동 (좋은)

enter image description here enter image description here

당신이 이미지에 의해 볼 수 있듯이, 일부 조인의 올바른 위치에 있지만 제대로 연결하지 않는 것, 다른 관절은 잘못 밖으로 플랫이며, 머리, 파인더 팁, 피트와 같은 최종 관절이 맞습니다. 나는 옳은 길을 가고 있다고 생각하지만, 문제를 일으키는 것이 무엇인지 알아내는 것이 확실하지 않습니다.

다음은 공동 글로벌 행렬을 얻으려는 코드입니다.

public final float[] getGlobalMatrix() { 
     if (mParent != null) { 
      Matrix.multiplyMM(mMatrix, 0, mParent.getMatrix(), 0, mLocalBoneTransformMatrix, 0); 
     } else { 
      final float[] tmp = new float[16]; 
      Matrix.setIdentityM(tmp, 0); 
      Matrix.multiplyMM(mMatrix, 0, tmp, 0, mLocalBoneTransformMatrix, 0); 
     } 
     return mMatrix; 
    } 

그래서 나는 다음과 같은 방법을 사용하여 COLLADA 파일에서 읽어 행렬을 변환하고있어 GLEs2.0이 렌더링하고있다.

private static float[] convertToGLESMatrix(final float[] colladaMatrix) { 
     final float[] result = new float[16]; 
     result[ 0] = colladaMatrix[ 0]; 
     result[ 1] = colladaMatrix[ 4]; 
     result[ 2] = colladaMatrix[ 8]; 
     result[ 3] = colladaMatrix[12]; 

     result[ 4] = colladaMatrix[ 1]; 
     result[ 5] = colladaMatrix[ 5]; 
     result[ 6] = colladaMatrix[ 9]; 
     result[ 7] = colladaMatrix[13]; 

     result[ 8] = colladaMatrix[ 2]; 
     result[ 9] = colladaMatrix[ 6]; 
     result[10] = colladaMatrix[10]; 
     result[11] = colladaMatrix[14]; 

     result[12] = colladaMatrix[ 3]; 
     result[13] = colladaMatrix[ 7]; 
     result[14] = colladaMatrix[11]; 
     result[15] = colladaMatrix[15]; 
     return result; 
    } 

이것은 잘 작동하고있는 것처럼 보입니다. 문제가되는 경우에 대비하여 Id'e가 언급 한 것 같습니다.

답변

0

내 드로잉 기능은 순환 루프에서 참조로 일부 데이터를 전달하고 문제를 일으키는 데이터를 업데이트하는 것으로 나타났습니다.

관련 문제