我正在尝试使用 TinyXML 将网格从 .dae 文件读取到 DirectX 项目,但我很难理解 .dae 文件如何存储网格数据。
我相信我已经找到了网格数据的存储位置:标签内<library_geometries>
有以下代码:
<library_geometries>
<geometry id="Tall_bodyShape" name="Tall_bodyShape">
<mesh>
<source id="Tall_bodyShape-positions" name="position">
<float_array id="Tall_bodyShape-positions-array" count="2910"> *** lots of numbers *** </float_array>
<technique_common>
<accessor source="#Tall_bodyShape-positions-array" count="970" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Tall_bodyShape-normals" name="normal">
<float_array id="Tall_bodyShape-normals-array" count="3948"> *** lots of numbers *** </float_array>
<technique_common>
<accessor source="#Tall_bodyShape-normals-array" count="1316" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Tall_bodyShape-UVChannel_1" name="UVChannel_1">
<float_array id="Tall_bodyShape-UVChannel_1-array" count="2892"> *** lots of numbers *** </float_array>
<technique_common>
<accessor source="#Tall_bodyShape-UVChannel_1-array" count="1446" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Tall_bodyShape-vertices">
<input semantic="POSITION" source="#Tall_bodyShape-positions"/>
</vertices>
<triangles material="Tall_bodySG" count="1883">
<input semantic="VERTEX" source="#Tall_bodyShape-vertices" offset="0"/>
<input semantic="NORMAL" source="#Tall_bodyShape-normals" offset="1"/>
<input semantic="TEXCOORD" source="#Tall_bodyShape-UVChannel_1" offset="2" set="0"/>
<p> *** lots of numbers *** </p>
</triangles>
</mesh>
<extra>
<technique profile="MAYA">
<double_sided>1</double_sided>
</technique>
</extra>
</geometry>
</library_geometries>
因此,顶点存储在<source>
名为 的标签"position"
内,法线存储在<source>
名为"normal"
的标签内,<triangles>
标签列出了哪些 UV 坐标和法线与哪个顶点相关联。
我认为三角形是以“线”或“剥离”方法列出的,但它并没有说明我尝试了哪个以及哪个,它们都显示出锯齿状的、球形的三角形混乱。
有谁知道我是否在 dae 的另一部分遗漏了其他一些网格数据,或者我可能出错的地方?如有必要,我可以发布我在网格数据中加载的函数。
编辑:附加说明:我确定 .dae 文件是正确且有效的,因为它可以正确加载到 PhyreEngine 中(我使用的是去年用于大学项目的 .dae)。