나는 내 자신의 COLLADA 수입업자를 쓰고있다. 메쉬와 재료 등을 적재하고 있습니다. 그러나 나는 애니메이션에 걸림돌을 쳤다. 특히 관절 회전. COLLADA : 잘못된 공간에서 역 바인드 포즈?
내 메쉬를 스키닝을 위해 사용하고 공식
은 솔직하다 : 이weighted;
for (i = 0; i < joint_influences; i++)
{
weighted +=
joint[joint_index[i]]->parent->local_matrix *
joint[joint_index[i]]->local_matrix *
skin->inverse_bind_pose[joint_index[i]] *
position *
skin->weight[j];
}
position = weighted;
그리고 지금까지 문헌에 관한 한,이 올바른 공식이다. 이제 COLLADA는 관절에 대해 두 가지 유형의 회전을 지정합니다. 조인트에 대한 로컬 변환을 얻으려면 회전을 연결해야합니다.
COLLADA 문서에서 구별되지 않는 것은 조인트의 로컬 회전과 조인트의 전역 회전입니다. 그러나 내가 본 대부분의 모델에서 회전은 rotate
(글로벌) 또는 jointOrient
(로컬) 중 하나의 ID를 가질 수 있습니다.
전역 회전을 무시하고 로컬 회전 만 사용하면 모델의 바인드 포즈가 생깁니다. 그러나 조인트의 지역 변형에 글로벌 회전을 추가하면 이상한 일이 발생하기 시작합니다.
이
글로벌 회전을 사용하지 않고 있습니다 :을 그리고 이것은 글로벌 회전 함께 :
내가 선을 사용하여 골격을 그리기있어 두 스크린 샷에서만에 첫눈은 관절이 메쉬 안에 있기 때문에 보이지 않습니다. 두 번째 스크린 샷에서 꼭지점이 모든 곳에 있습니다!
그것은 볼 어렵습니다,하지만 당신은 관절이 두 번째 스크린 샷에서 올바른 위치에 있는지 볼 수 있습니다
는 비교를 위해,이 두 번째 스크린 샷 이과 같아야 것입니다.
하지만 지금 이상한 일. 내가 COLLADA에 의해 지정된 포즈 역 바인드를 무시하고 대신 공동의 부모의 역을 맡으면 지역 공동의 지역 변환 시간을 변환, 나는 다음과 같은 얻을 :
를이 스크린 샷에서 나는 그리기 해요 각 꼭지점에서 영향력이있는 관절까지의 선. 수식 지금이되기 때문에 나는 포즈 바인드를 얻을 사실은 이상한되지 않습니다 :
world_matrix * inverse_world_matrix * position * weight
을하지만 COLLADA의 역 바인드가 잘못된 공간에 포즈 의심하는 날 리드.
내 질문은 : 어떤 공간에서 COLLADA가 역 바인드 포즈를 지정합니까? 그리고 어떻게 역 바인드 포즈를 필요한 공간으로 변환 할 수 있습니까?
1.4.1 사양의 "COLLADA에서 스켈레톤 스키닝"섹션을 읽으셨습니까? 귀하의 공식은 – jterrace