Отображение сетки с использованием DirectX 9 - различия сетки - PullRequest
0 голосов
/ 05 августа 2010

Эта - моя программа для отображения сетки .x.Я могу отобразить сетку tiger.x , но не могу отобразить ball.x .В чем разница между двумя сетками?Что-то, что я должен обработать в коде?Но я могу просматривать обе сетки, используя стандартные средства просмотра сетки, такие как в комплекте с DirectX SDK.

Ответы [ 2 ]

1 голос
/ 09 августа 2010

, но не может отобразить ball.x.

Вопрос неясен.Сетка загружается?Содержит ли он вершины / грани?Или может быть приложение вылетает?Или загрузка не удалась?

В чем разница между двумя сетками?

Разница в том, что вторая сетка (ball.x) не содержит "шаблонов",

Т.е. эта часть:

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 сетка является частью иерархии фреймов.В tiger.x это не так, и хранится на верхнем уровне иерархии.

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

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

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

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

0 голосов
/ 10 августа 2010

Сетка не имеет никаких проблем, кроме вида. Он был слишком увеличен для отображения изображения. Я спроецировал изображение, используя следующую матрицу, и смог правильно рассмотреть сетку.

//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);
...