2012-10-07 6 views
1

바이너리 파일에서 사용자 정의 모델을로드했지만 지금은 뼈대 데이터를 사용하는 방법을 알지 못합니다. ModelBone 또는 이와 비슷한 것을 사용할 수 있습니까? 나는 CustomBone []을 가지고 있습니다 :XNA 뼈를 만드는 방법

class CustomBone 
{ 
    int parentIndex; 
    Vector3 positionAbs; 
    Quaternion rotationAbs; 
    Vector3 positionRel; 
    Quaternion rotationRel; 
} 

또는 ModelBoneCollection을 채우는 방법은 무엇입니까?

답변

1

우선 - 런타임에 Model을 만들거나 수정할 수 없습니다 (details). 사실, 필요한 경우 implement your own으로되어 있습니다. Model은 시작할 수있는 최소한의 기능입니다.

콘텐츠 파이프 라인을 통해 빌드시에 Model을 만들 수 있습니다.

또는 더 구체적으로 NodeContent을 출력하는 사용자 지정 콘텐츠 가져 오기 프로그램을 만들 수 있습니다. 차례로 이것은 내용 파이프 라인을 통해 ModelContent을 출력하는 ModelProcessor (또는 사용자가 파생 한 클래스)으로 전달할 수 있습니다. ModelContent을 유용하게 수정할 수 없습니다. ModelContent은 직렬화 된 다음 런타임에 Model으로로드됩니다.

출력 할 NodeContent은 모델을 나타내는 트리 구조입니다. 실제로 MeshContentBoneContent 개의 노드 (이들은 NodeContent에서 파생 된 클래스입니다)로 구성됩니다.

사실 트리의 정확한 구조는 추적하기가 까다 롭습니다. 문서는 매우 부족합니다. Here은 정확한 답을 찾아 줄 질문과 답변입니다. 행운을 빌어도 FbxImporter 내장 모델을 사용하고 행운을 빌어 XNA Content Pipeline Debugger (일반적으로 자신의 가져 오기 도구를 구현하는 동안 편리하게 사용할 수있는 도구)을 사용하여 출력을 검사 할 수 있습니다.


뼈 데이터 BoneContent.Transform에서 Matrix로서 저장된다. 이 행렬을 만들려면, 당신은 같은 것을 할 필요가 믿는 : 당신은 런타임에 Quaternion로 뼈의 데이터를 유지하려면

boneContent.Transform = Matrix.Transform(
     Matrix.CreateTranslation(customBone.positionRel), 
     customBone.rotationRel); 

, 당신은 Model에 자신의 대안을 구현해야합니다.

관련 문제