在 COLLADA 中解析 SID,尤其是 COLLADA FX SID 的规则不是很清楚。特别是关于 COLLADA FX SID,我如何知道从哪个元素开始搜索特定 SID?例如,考虑<texture>
元素的“纹理”属性:
<effect id="Scene_Material_fx">
<profile_COMMON>
<newparam sid="acorn_png_surface">
<surface type="2D">
<init_from>acorn_png_img</init_from>
</surface>
</newparam>
<newparam sid="acorn_png_sampler">
<sampler2D>
<source>acorn_png_surface</source>
</sampler2D>
</newparam>
<technique sid="default">
<phong>
...
<diffuse>
<texture texture="acorn_png_sampler" texcoord="diffuse_TEXCOORD"></texture>
</diffuse>
...
</phong>
</technique>
</profile_COMMON>
</effect>
<texture>
如果我从 开始搜索,我可以找到引用的 SID <profile_COMMON>
,这是包含引用的元素的曾曾祖父<texture>
,但如果我从 开始搜索,我也可以找到它<effect>
。那么,起始元素是如何确定的呢?它是否在规范中的某个地方定义?
<texture>
规范是否限制了可以找到特定元素引用的 sid 与文档根的接近程度?在上面的示例中,它是否可能出现在 之外<profile_COMMON>
,例如在<effect>
其父对象内部?哪个是“最根”元素,我可以保证通过从该元素向下钻取找到引用的 sid?
更新:我也在COLLADA 论坛上发布了这个问题,到目前为止没有任何回应。我已经决定,暂时,我将简单地假设由 a<texture>
的“纹理”属性引用的 SID 将始终在<profile_COMMON>
. 如果那是错误的,则意味着我的导入器可能会在有效输入上失败,但 COLLADA 社区本身对此没有提供任何反馈,所以我无能为力。