我正在尝试使用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>
因此,verticies存储在名为<source>
的{{1}}标记内,法线存储在名为"position"
的{{1}}标记和<source>
标记列表中哪个UV坐标和法线与哪个顶点相关联。
我认为三角形是以“直线”或“剥离”的方式列出的,但它并没有说出我尝试的哪一个,它们都显示出锯齿状,乱七八糟的三角形。
有没有人知道是否有其他网格数据我错过了在dae的另一部分或我可能出错的地方?如有必要,我可以发布我在网格数据中加载的函数。
编辑:补充说明:我确定.dae文件是正确有效的,因为它可以正确加载到PhyreEngine中(我使用的是去年用于大学项目的.dae)。 / p>
答案 0 :(得分:3)
我意识到这是一个相对古老的问题,但由于它还没有真正得到回答,我会为后人采取行动。
你是正确的,位置,法线等作为浮点数组存储在<source>
元素中。 <p>
(&#34; primitive&#34;)元素存储紧接在<triangles>
元素之前列出的三个输入的索引。也就是说,前3个整数(例如&#34; 0 0 0&#34;)指向第一个顶点的相应VERTEX,NORMAL和TEXCOORD(UVChannel)值。它在<triangles>
元素中表示每组3个顶点(9个索引整数)描述了一个新的三角形,因此没有一个索引被重用。如果几何体设置为使用条带(重用前两个顶点)或扇形(重复使用第一个和前一个顶点),则父元素将分别称为<tristrips>
或<trifans>
。第二组3个整数(例如&#34; 1 1 1&#34;)描述第一个三角形中的第二个顶点,依此类推。
此外,正如@jterrace指出的那样,几何坐标是几何中描述的对象的内部。要将对象作为一个整体正确放置在场景中,您必须按照<translate>
中的说明从场景中应用适当的转换(<rotate>
,<library_visual_scenes>
等)。
答案 1 :(得分:2)