2010-08-05 5 views
0

This은 .x 메쉬를 표시하는 프로그램입니다. 메쉬 tiger.x을 표시 할 수 있지만 ball.x을 표시 할 수 없습니다. 두 메시의 차이점은 무엇입니까? 코드에서 처리해야 할 것이 있습니까? 그러나 DirectX SDK와 함께 제공되는 표준 메쉬 뷰어를 사용하여 두 메시를 모두 볼 수 있습니다.DirectX 9를 사용하여 메쉬 표시 - 메쉬 차이점

감사합니다.

답변

0

메쉬에는보기가 아니라 문제가 없습니다. 이미지를 표시하는 데 너무 확대되었습니다. 다음 매트릭스를 사용하여 이미지를 투영하고 메쉬를 올바르게 볼 수있었습니다.

//Set Projection 
D3DXMATRIXA16 matProj(1.0,0.0,0.0,0.0, 
         0.0,1.0,0.0,0.0, 
         0.0,0.0,1.0,0.0, 
         0.0,0.0,0.0,150.0); 
1

그러나 볼을 표시 할 수 없습니다. x.

질문이 명확하지 않습니다. 메쉬가로드됩니까? 정점 /면이 포함되어 있습니까? 또는 어쩌면 그것은 응용 프로그램을 충돌? 또는로드에 실패 했습니까?

두 메쉬의 차이점은 무엇입니까?

차이점은 두 번째 메쉬 (ball.x)에는 '템플릿'이 포함되지 않는다는 점입니다.

e.e. 이 부분 :

template Header { 
<3D82AB43-62DA-11cf-AB39-0020AF71E433> 
WORD major; 
WORD minor; 
DWORD flags; 
} 

template Vector { 
<3D82AB5E-62DA-11cf-AB39-0020AF71E433> 
FLOAT x; 
FLOAT y; 
FLOAT z; 
} 

template Coords2d { 
<F6F23F44-7686-11cf-8F52-0040333594A3> 
FLOAT u; 
FLOAT v; 
} 

template Matrix4x4 { 
<F6F23F45-7686-11cf-8F52-0040333594A3> 
array FLOAT matrix[16]; 
} 

template ColorRGBA { 
<35FF44E0-6C7C-11cf-8F52-0040333594A3> 
FLOAT red; 
FLOAT green; 
FLOAT blue; 
FLOAT alpha; 
} 

template ColorRGB { 
<D3E16E81-7835-11cf-8F52-0040333594A3> 
FLOAT red; 
FLOAT green; 
FLOAT blue; 
} 

template IndexedColor { 
<1630B820-7842-11cf-8F52-0040333594A3> 
DWORD index; 
ColorRGBA indexColor; 
} 

template Boolean { 
<4885AE61-78E8-11cf-8F52-0040333594A3> 
WORD truefalse; 
} 

template Boolean2d { 
<4885AE63-78E8-11cf-8F52-0040333594A3> 
Boolean u; 
Boolean v; 
} 

template MaterialWrap { 
<4885AE60-78E8-11cf-8F52-0040333594A3> 
Boolean u; 
Boolean v; 
} 

template TextureFilename { 
<A42790E1-7810-11cf-8F52-0040333594A3> 
STRING filename; 
} 

template Material { 
<3D82AB4D-62DA-11cf-AB39-0020AF71E433> 
ColorRGBA faceColor; 
FLOAT power; 
ColorRGB specularColor; 
ColorRGB emissiveColor; 
[...] 
} 

template MeshFace { 
<3D82AB5F-62DA-11cf-AB39-0020AF71E433> 
DWORD nFaceVertexIndices; 
array DWORD faceVertexIndices[nFaceVertexIndices]; 
} 

template MeshFaceWraps { 
<4885AE62-78E8-11cf-8F52-0040333594A3> 
DWORD nFaceWrapValues; 
Boolean2d faceWrapValues; 
} 

template MeshTextureCoords { 
<F6F23F40-7686-11cf-8F52-0040333594A3> 
DWORD nTextureCoords; 
array Coords2d textureCoords[nTextureCoords]; 
} 

template MeshMaterialList { 
<F6F23F42-7686-11cf-8F52-0040333594A3> 
DWORD nMaterials; 
DWORD nFaceIndexes; 
array DWORD faceIndexes[nFaceIndexes]; 
[Material] 
} 

template MeshNormals { 
<F6F23F43-7686-11cf-8F52-0040333594A3> 
DWORD nNormals; 
array Vector normals[nNormals]; 
DWORD nFaceNormals; 
array MeshFace faceNormals[nFaceNormals]; 
} 

template MeshVertexColors { 
<1630B821-7842-11cf-8F52-0040333594A3> 
DWORD nVertexColors; 
array IndexedColor vertexColors[nVertexColors]; 
} 

template Mesh { 
<3D82AB44-62DA-11cf-AB39-0020AF71E433> 
DWORD nVertices; 
array Vector vertices[nVertices]; 
DWORD nFaces; 
array MeshFace faces[nFaces]; 
[...] 
} 

template FrameTransformMatrix { 
<F6F23F41-7686-11cf-8F52-0040333594A3> 
Matrix4x4 frameMatrix; 
} 

즉. 템플릿/구조체 선언.

또한 ball.x 메시는 Frames의 계층 구조의 일부입니다. tiger.x에서는 최상위 레벨에 저장되지 않습니다.

마지막으로 * .x 파일을 마지막으로 사용한 지 오래되었지만 내가 아는 한 모든 "비표준"템플릿에 대한 파일을 파일에 포함시켜야합니다. 즉, 파일이 ID3DXFile 또는 IDirectXFile의 RegisterTemplates 메소드를 사용하여 등록되지 않은 템플리트가있는 오브젝트를 사용하는 경우 템플리트가 파일의 시작 부분에 기록되지 않으면 파일이로드되지 않습니다. 범인을 찾을 때까지 ball.x의 모든 의심스러운 구조에 대한 템플리트 정의를 추가하십시오. 나는 "Header"로 시작할 것입니다.

계층 구조로 인해 문제가 발생하면 다른 로딩 방법을 시도해야합니다.

DirectX SDK와 함께 제공되는 표준 메쉬 뷰어를 사용합니다.

AFAIK, mesh viewer는 소스 코드와 함께 제공됩니다. 소스를 읽고 어떻게 작동하는지 확인하십시오.