使用DirectX 9显示网格-网格差异

使用DirectX 9显示网格-网格差异,directx,mesh,Directx,Mesh,是显示.x网格的程序。我可以显示网格,但无法显示。两个网格之间有什么区别?代码中有什么我应该处理的吗?但我可以使用标准网格查看器查看这两个网格,就像DirectX SDK附带的一样 谢谢 但不能显示球 问题还不清楚。网格是否加载?它是否包含顶点/面?或者它会使应用程序崩溃?还是加载失败 两个网格之间有什么区别 区别在于第二个网格(ball.x)不包含“模板” 即本部分: template Header { <3D82AB43-62DA-11cf-AB39-0020AF71E433>

是显示.x网格的程序。我可以显示网格,但无法显示。两个网格之间有什么区别?代码中有什么我应该处理的吗?但我可以使用标准网格查看器查看这两个网格,就像DirectX SDK附带的一样

谢谢

但不能显示球

问题还不清楚。网格是否加载?它是否包含顶点/面?或者它会使应用程序崩溃?还是加载失败

两个网格之间有什么区别

区别在于第二个网格(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;
}
模板头{
专业词汇;
小调词;
德沃德旗;
}
模板向量{
浮动x;
浮动y;
浮动z;
}
模板坐标2d{
浮动u;
浮动v;
}
模板矩阵x4x4{
数组浮点矩阵[16];
}
模板颜色RGBA{
飘红;
浮绿;
飘蓝;
浮动α;
}
模板颜色RGB{
飘红;
浮绿;
飘蓝;
}
模板索引颜色{
德沃德指数;
ColorRGBA indexColor;
}
模板布尔值{
真假字;
}
模板布尔2D{
布尔u;
布尔v;
}
模板材料包装{
布尔u;
布尔v;
}
模板TextureFilename{
字符串文件名;
}
模板材料{
颜色RGBA脸颜色;
浮力;
彩色RGB镜面颜色;
彩色RGB发射色;
[...]
}
模板网格面{
德沃德·恩法塞维特克斯;
数组DWORD FACEVERTEXICES[NFACERTEXICES];
}
模板网格面包裹{
DWORD nFaceWrapValues;
Boolean2d FaceWrapValue;
}
模板网格纹理词{
德沃德·恩特克斯;
数组Coords2d TextureCords[NTextureCords];
}
模板材料专家{
德沃德材料公司;
德沃德指数;
数组DWORD faceIndexes[nFaceIndexes];
[材料]
}
模板网格法线{
德沃德nNormals;
数组向量法线[nnnormals];
德沃德·恩法克斯;
阵列网格面面法线[nFaceNormals];
}
模板网格顶点颜色{
德沃德·恩弗特克斯克洛斯;
数组索引颜色顶点颜色[nVertexColors];
}
模板网格{
德沃德公司;
数组向量顶点[n实体];
德沃德·恩法塞斯;
阵列网格面[NFACE];
[...]
}
模板框架转换矩阵{
矩阵x4x4帧矩阵;
}
即模板/结构声明

此外,在ball.x中,网格是帧层次结构的一部分。在tiger.x中不是,而是存储在层次结构的顶层

我上次直接使用*.x文件已经有一段时间了,但据我所知,您需要将所有“非标准”模板的模板包含到该文件中。i、 e.如果文件使用的模板对象未使用ID3DXFile或IDirectXFile的RegisterTemplates方法注册,则如果模板未在文件开头写入,则不会加载该文件。尝试为ball.x中的每个可疑结构添加模板定义,直到找到罪魁祸首。我从“头”开始

如果问题是由于层次结构造成的,则需要尝试其他加载方法

使用DirectX SDK附带的标准网格查看器


您好,mesh viewer附带源代码。阅读源代码,看看它是如何工作的。

网格除了视图之外没有任何问题。它被放大到无法显示图像。我使用以下矩阵投影图像,并且能够正确地查看网格

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