Pregunta

Este es mi programa para mostrar una malla .X. Soy capaz de mostrar la malla tiger.x pero no capaz de mostrar ball.x . ¿Cuál es la diferencia entre las dos mallas? ¿Hay algo que debería manejar en el código? Pero yo soy capaz de ver tanto las mallas utilizando los espectadores de malla estándar como el que viene con DirectX SDK.

Gracias.

¿Fue útil?

Solución 2

La malla no tiene ningún problema, pero la vista. Fue demasiado el zoom para visualizar la imagen. Proyecté la imagen utilizando la siguiente matriz y era capaz de ver la malla correctamente.

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

Otros consejos

  

pero no es capaz de mostrar ball.x.

La pregunta no es clara. Hace la carga de malla? ¿Contiene vértices / caras? O tal vez de que se estrelle aplicación? O la carga falla?

  

¿Cuál es la diferencia entre las dos mallas?

La diferencia es que la segunda malla (ball.x) no incluye "plantillas".

es decir. esta parte:

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

es decir. declaraciones templates / estructura.

También, en ball.x malla es una parte de la jerarquía de fotogramas. En tiger.x no lo es, y se almacena en el nivel superior de la jerarquía.

Ha sido un tiempo desde la última vez que utilicé * .x archivo directamente, pero por lo que sé, se tendrá que incluir plantillas para todas las plantillas "no estándar" en el archivo. es decir, si el archivo utiliza un objeto con plantilla que no fue estàs registrado utilizando el método RegisterTemplates de ID3DXFile o IDirectXFile, a continuación, el archivo no se cargará si la plantilla no está escrito en el comienzo de archivo. Trate de añadir definiciones de plantillas para cada estructura sospechosa en ball.x, hasta encontrar al culpable. Yo empezaría con "cabecera".

Si el problema es debido a la jerarquía, tendrá que probar otro método de carga.

  

usando los espectadores de malla estándar como el que viene con DirectX SDK.

AFAIK, malla espectador viene con código fuente. Leer la fuente y ver cómo funciona.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top