Collada(.dae)文件是结构清晰的XML文档,以“3D说明书”形式描述场景:1. <library_geometries>存顶点/法线/UV及三角面索引;2. <library_materials>与<library_effects>分离声明材质与渲染参数;3. <library_visual_scenes>构建节点树与层级变换;4. <library_controllers>处理蒙皮权重绑定;5. <library_animations>按关节存储时间-变换采样数据。

Collada(.dae)文件本质就是标准XML文档,结构清晰、层级分明,用人类可读的标签描述整个3D场景——不是直接存海量顶点二进制数据,而是像一份“3D说明书”,告诉软件:模型长什么样、用什么材质、怎么动、谁控制谁。
*DAE文件的核心结构由多个 `<library_>` 块组成**
每个库负责一类信息,彼此通过ID引用关联,不重复、不嵌套混乱:
<library_geometries>
存几何体定义,比如一个立方体的顶点坐标、法线、UV贴图坐标。数据常以<float_array>存数组,再用<source>和<accessor>描述如何读取(如 stride=3 表示每3个数是一组XYZ)。三角面则用<triangles>+<p>列出顶点索引。<library_materials>和<library_effects>
材料(如“红色塑料”)在这里声明,但真正渲染参数(漫反射色、纹理路径)写在<effect>里,通过<technique>指定OpenGL或CG等profile。纹理图名通常出现在<image>或<init_from>标签中。<library_visual_scenes>
场景树的根。包含<node>节点,每个节点有id、name、type(如JOINT或NODE),以及<matrix>变换或<translate>/<rotate>等元素。父子关系靠嵌套<node>实现,骨骼层级就靠这个组织。<library_controllers>
蒙皮绑定的核心。里面<skin>指向几何体和骨骼,<joints>列出所有关节ID,<vertex_weights>给每个顶点配权重索引——哪个关节影响它、影响多少,全靠这里查表。<library_animations>
动画数据按关节拆分。每个<animation>包含<sampler>:<input>是时间序列(float_array),<output>是对应时刻的变换矩阵(或平移/旋转分量)。插值方式(LINEAR、BEZIER)也在<technique_common>里标明。
一个最小可行片段示意(简化版)
对设计或页面进行 WCAG 2.1 AA 无障碍审计。触发关键词:“audit accessibility”、 “check a11y”、 “is this accessible?” 或在审查设计时使用。
<COLLADA xmlns="http://www.collada.org/2008/03/COLLADASchema">
<asset>
<up_axis>Z_UP</up_axis>
</asset>
<library_geometries>
<geometry id="box-geom">
<mesh>
<source id="box-positions">
<float_array id="box-positions-array" count="18">-1 -1 -1 1 -1 -1 ...</float_array>
<technique_common>
<accessor source="#box-positions-array" count="8" stride="3">
<param name="X"/> <param name="Y"/> <param name="Z"/>
</accessor>
</technique_common>
</source>
<vertices id="box-vertices">
<input semantic="POSITION" source="#box-positions"/>
</vertices>
<triangles count="12">
<input semantic="VERTEX" offset="0" source="#box-vertices"/>
<p>0 1 2 2 1 3 ...</p>
</triangles>
</mesh>
</geometry>
</library_geometries>
<library_visual_scenes>
<visual_scene id="Scene">
<node id="Box" name="Box" type="NODE">
<instance_geometry url="#box-geom"/>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>注意几个实际细节
- 所有ID都带
#引用,比如url="#box-geom"指向上面定义的geometry。 - 坐标系默认是右手Z-up,但可通过
<asset><up_axis>改为Y-up(常见于Blender导出)。 - 纹理路径通常是相对路径,加载时需配合base URL;若用在线资源,可能被转为data URI或外部HTTP链接。
- 骨骼动画里的
<matrix>是局部空间变换,蒙皮计算时要乘上 bind pose 的逆矩阵(即<bind_shape_matrix>和<matrix>的组合逻辑)。
基本上就这些。它不追求存储效率,胜在结构透明、易调试、跨工具兼容强。

















