2010-08-05 2 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) не включает в себя «шаблоны».

I.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; 
} 

I.e. шаблоны/объявления структуры.

Кроме того, в шарике ball.x находится часть иерархии фреймов. В tiger.x это не так и хранится на верхнем уровне иерархии.

Прошло некоторое время с тех пор, как я в последний раз использовал * .x файл, но, насколько мне известно, вам нужно включить шаблоны для всех «нестандартных» шаблонов в файл. то есть если файл использует объект с шаблоном, который не был зарегистрирован с использованием метода RegisterTemplates для ID3DXFile или IDirectXFile, тогда файл не будет загружаться, если шаблон не написан в начале файла. Попробуйте добавить определения шаблонов для каждой подозрительной структуры в ball.x, пока не найдете виновника. Я бы начал с «Заголовка».

Если проблема связана с иерархией, вам нужно попробовать другой метод загрузки.

используя стандартные сетевые зрители, подобные тем, которые поставляются с DirectX SDK.

AFAIK, mesh viewer поставляется с исходным кодом. Прочтите источник и посмотрите, как он работает.

Смежные вопросы