. x 파일 구조 분석

이전에 directx 프로 그래 밍 을 할 때 3D 격자 모델 데 이 터 를 조직 하 는 파일 에 대해 저 는 몇 가지 형식 을 사용 한 적 이 있 습 니 다. 그것 은 바로. x, obj, sdkmesh 등 입 니 다. x 파일 을 많이 사 용 했 습 니 다. obj 파일 은 비교적 간단 합 니 다. sdkmesh 는 directx SDK 안의 도구 로 전환 해 야 합 니 다. SDK 문 서 를 보면 추천 합 니 다. 효율 적 이기 때 문 입 니 다 (오래 전에 본 것 같 습 니 다. 그런 것 같 습 니 다)。여기 서. x 파일 을 분석 해 보면 나중에 physX, bullet 등 을 사용 하여 물리 적 시 뮬 레이 션, 충돌 검 측 등 을 하 는 데 도움 이 될 것 입 니 다. 이전에 physX SDK 에 있 는 sample 은. obj 파일 을 분석 한 다음 에 cook 을 충돌 검 측 에 사용 할 수 있 는 모델 로 만 들 었 기 때 문 입 니 다.
1. 모든. x 파일 은 하나의 header 로 시작 합 니 다. 다음 과 같 습 니 다.xof 는 이것 이. x 파일 이 고 0302 는. x 파일 을 대표 합 니 다. 3.2 버 전의 템 플 릿 을 사용 합 니 다. txt 는 다음. x 파일 을 바 이 너 리 가 아 닌 text 형식 으로 저장 합 니 다.마지막 0032 는 부동 소수점 32 자리 입 니 다.
xof 0302txt 0032

2.. x 파일 에서 많은 templates 를 볼 수 있 습 니 다. template 는 데이터 대상 을 어떻게 저장 하 는 지 정의 합 니 다. 사용 자 는 구체 적 인 형식 을 정의 할 수 있 습 니 다. c + 안의 클래스, template 의 인 스 턴 스 를 데이터 대상 으로 상상 할 수 있 습 니 다.template 마다 하나의 GUID 가 있 고 DirectX 는 이 큰 숫자 로 template 를 식별 합 니 다.Directx3D 에서 미리 정 의 된 template 는 rmxftmll. h 에 있 고 GUID 는 rmxfguid. h 에 있 습 니 다.템 플 릿 이 허용 하 는 데이터 형식 은 선택 가능 한 구성원 이 됩 니 다. 이 선택 가능 한 구성원 들 은 데이터 대상 의 하위 대상 으로 저장 되 며, 하위 대상 은 다른 데이터 형식의 참조 가 될 수 있 습 니 다.모든 템 플 릿 은 모든 종류의 데 이 터 를 수용 할 수 있 고 모든 데이터 형식의 조합 은 하나의 템 플 릿 에서 사용 할 수 있 습 니 다.
        다음은 템 플 릿 입 니 다.템 플 릿 의 이름 은 Header 입 니 다. 숫자, 문자, 밑줄 로 구성 할 수 있 지만 숫자 로 시작 할 수 없습니다.두 번 째 줄 은 GUID 이 고, 세 번 째 줄 은 데이터 멤버 입 니 다.
template Header {
 <3D82AB43-62DA-11cf-AB39-0020AF71E433>
 WORD major;
 WORD minor;
 DWORD flags;
}

템 플 릿 중 하 나 는 사용자 가 템 플 릿 을 제어 하 는 제한 정도 이 고 하나의 템 플 릿 은 개방 적 이 고 닫 히 거나 제 한 될 수 있 습 니 다.열 린 템 플 릿 의 정 의 는 끝 부분 에 펼 쳐 질 괄호 가 있 습 니 다.
[...] 다른 데이터 형식 을 포함 할 수 있 음 을 나타 낸다. 폐쇄 템 플 릿 은 다른 데이터 구 조 를 포함 할 수 없고 제 한 된 템 플 릿 은 특정한 데이터 구조 만 포함 할 수 있다.아래 템 플 릿 을 볼 수 있 는 마지막 부분 은 [...] 입 니 다.
template Mesh
{
    <3D82AB44-62DA-11CF-AB39-0020AF71E433>
    DWORD nVertices;
    array Vector vertices[nVertices];
    DWORD nFaces;
    array MeshFace faces[nFaces];
    [...]
}

. x 파일 에서 프레임 을 사용 하여 격자 모델 의 다른 부분 을 조직 하고 관리 합 니 다.프레임 워 크 는 하나의 케이스 일 뿐 프레임 워 크 에 구체 적 인 격자 와 하나의 프레임 워 크 변환 행렬 을 포함 해 야 합 니 다. 그 중에서 프레임 워 크 변환 행렬 은 이 프레임 에 포 함 된 부분 과 전체 모델 의 초기 위 치 를 지정 하 는 데 사 용 됩 니 다. FrameTransformMatrix 는 프레임 워 크 를 정의 하 는 로 컬 변환 행렬 로 4X4 의 행렬 로 모두 16 개의 부동 소수점 데이터 입 니 다.프레임 워 크 는 끼 워 넣 을 수 있 습 니 다. 즉, 하나의 넓 은 휴가 는 많은 하위 프레임 으로 구성 할 수 있 습 니 다.. x 파일 에서 Frame Frame 을 볼 수 있 습 니 다.SCENE_ROOT, 이것 은 최상층 의 틀 입 니 다.
template Frame
{
    < 3D82AB46-62DA-11CF-AB39-0020AF71E433 >
    [...]			
} 
template FrameTransformMatrix
{
    < F6F23F41-7686-11cf-8F52-0040333594A3 >
    Matrix4x4 frameMatrix;
} 
template Matrix4x4
{
    < F6F23F45-7686-11cf-8F52-0040333594A3 >
    array float matrix[16];
} 

2.. x 파일 은 mesh 정 보 를 포함 하 는 데 널리 사용 되 고 표준 Mesh 템 플 릿 은 너무 많은 정 보 를 포함 하 며 선택 할 수 있 는 것 이 많 습 니 다.
애니메이션 세트 애니메이션 의 조합 은 여러 개의 애니메이션 을 포함 합 니 다.
Animation 은 애니메이션 을 설명 합 니 다. 하나 이상 의 AnimationKey 를 포함 합 니 다.
AnimationKey 애니메이션 키 는 열 회전, 이동, 축소, 행렬 변환 을 포함 하여 구체 적 인 동작 데 이 터 를 정의 합 니 다.
ColorRGB 는 R, G, B 등 3 개의 Float 값 을 포함 한 RGB 대상 을 정의 합 니 다.
ColorRGBA 는 RGBA 대상 을 정의 합 니 다.R, G, B, 알파 등 네 개의 Float 값 을 포함한다.
Coords2d 는 무늬 좌표 벡터 를 정의 합 니 다. 두 개의 Float 값 을 포함 하고 각각 u, v 입 니 다.
FloatKeys 는 부동 소수점 배열 을 정의 하고 애니메이션 키 수 치 를 정의 합 니 다. 두 부분 을 포함 합 니 다. 부동 소수점 값 개수, 부동 소수점 값 목록 입 니 다.
Material 는 재질 정 보 를 정의 하여 완전한 Mesh 대상 에 도 적용 할 수 있 고 그 중의 한 면 에 도 적용 할 수 있 습 니 다.1. FaceColor 환경 광 2. Power 미 러 반사 강도 3. specularcolor 미 러 반사 등 을 포함 합 니 다.
Matrix4X 4 는 4X4 매트릭스, 16 개의 부동 소수점 수 치 를 정의 합 니 다.
Mesh 는 Mesh 대상 을 정의 합 니 다. 모두 9 개의 부분 으로 구성 되 어 있 습 니 다. 1. 포 함 된 정점 2, 정점 목록, 하나의 정점 은 세 개의 부동 소수점 3, 면 수 4, 면 의 정점 색인 목록 을 포함 하고 빵 마다 세 개의 정점 5, MeshFaceWraps 를 포함 합 니 다. 구조, 일시 적 무용 6, MeshTextureCoords 텍 스 처 좌표, 7, MeshNormals 선택 가능 법 방향, 선택 가능 8, MeshVertexColors 정점 색상, 기본 값 은 흰색 9, MeshMaterialList 소재, 제공 되 지 않 으 면 기본 화이트.
MeshFace 면 색인 은 두 부분 을 포함 합 니 다. 면 수, 고정 색인 으로 구 성 된 면 배열 입 니 다.
MeshTextureCoords 는 무늬 좌 표를 정의 합 니 다. 이 는 무늬 좌표 의 개수, 무늬 좌표 (각 무늬 좌 표 는 두 개의 부동 소수점 값 이 있 습 니 다) 를 포함 합 니 다.
MeshMaterialList 는 재질 의 응용 을 정의 합 니 다. 이 는 몇 개의 재질 이 사용 되 고 재질 의 영향 면 의 개수, 면 색인 을 포함 합 니 다.
MeshNormals 는 Mesh 의 법 적 벡터 를 정의 합 니 다. 4 부분 을 포함 합 니 다. nNormals 법 적 벡터 의 개수 = 정점 수, Normals 정점 법 적 벡터 목록, nFaceNormals 면 의 개수, FaceNormals 가 대응 하 는 법 적 벡터 를 포함 합 니 다.
MeshVertexColors  원래 소재 대신 정점 색상 을 지정 합 니 다. 포함: 정점 수, 색상 색인
TextureFilename  텍 스 처 이름, 문자열 형식.
VertexDuplicationIndices  던 전 보존, Mesh 작업 간소화 에 사용, 포함: 정점, 원시 정점, 실제 정점.
XSkinMeshHeader  내 보 낸 SkinMesh 관련 정 보 를 설명 하고 한 정점 의 최대 변환 수량 에 영향 을 주 며 각 면 의 세 정점 의 최대 변환 수량 에 영향 을 주 고 한 정점 의 골격 수 에 영향 을 줍 니 다.
TimedFloatKeys 시간 값 은 Animaterkey 에서 시간 간격 을 정의 하 는 데 사 용 됩 니 다.
Vector 3 차원 벡터, 세 개의 부동 소수점 값.
SkinWeights 뼈 영향 가중치 정의.다음 과 같은 몇 가지 부분 을 포함 합 니 다. 뼈의 이름, 몇 개의 가중치, 정점 의 색인 목록 이 있 습 니까? 이에 대응 하 는 영향 정점 색인 목록, 로 컬 에서 행렬 을 바 꾸 고 뼈 공간 으로 전환 합 니 다.

좋은 웹페이지 즐겨찾기