これは、.xメッシュを表示するための私のプログラムです。メッシュtiger.xを表示することはできますが、 ball.xを表示することはできません。2つのメッシュの違いは何ですか?コードで処理する必要があるものはありますか?ただし、DirectX SDKに付属しているような標準のメッシュビューアを使用して、両方のメッシュを表示できます。
ありがとう。
これは、.xメッシュを表示するための私のプログラムです。メッシュtiger.xを表示することはできますが、 ball.xを表示することはできません。2つのメッシュの違いは何ですか?コードで処理する必要があるものはありますか?ただし、DirectX SDKに付属しているような標準のメッシュビューアを使用して、両方のメッシュを表示できます。
ありがとう。
ただし、ball.xを表示することはできません。
質問は不明確です。メッシュはロードされますか?頂点/面が含まれていますか?または多分それはアプリをクラッシュさせますか?または読み込みに失敗しますか?
2つのメッシュの違いは何ですか?
違いは、2番目のメッシュ(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ファイルを直接使用してからしばらく経ちましたが、私が知る限り、すべての「非標準」テンプレートのテンプレートをファイルに含める必要があります。つまり、ファイルがID3DXFileまたはIDirectXFileのRegisterTemplatesメソッドを使用して登録されていないテンプレートを持つオブジェクトを使用している場合、テンプレートがファイルの先頭に書き込まれていないと、ファイルはロードされません。原因が見つかるまで、ball.x内のすべての疑わしい構造のテンプレート定義を追加してみてください。「ヘッダー」から始めます。
問題が階層にある場合は、別の読み込み方法を試す必要があります。
DirectXSDKに付属しているような標準のメッシュビューアを使用します。
AFAIK、メッシュビューアにはソースコードが付属しています。ソースを読んで、それがどのように機能するかを確認してください。
メッシュには問題はありませんが、ビューです。ズームインしすぎて画像を表示できませんでした。次のマトリックスを使用して画像を投影し、メッシュを正しく表示することができました。
//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);