1

在 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 社区本身对此没有提供任何反馈,所以我无能为力。

4

2 回答 2

1

我能感觉到你的痛苦;-)。Collada 规格真的很难理解。

因为你可以在 <effect> 范围内声明参数(不仅在 <profile> :第 7 章关于参数),你也应该看看那里。

但。从我的经验来看,出口商往往有本地参数(在 <profile> 下),所以你的方式也可以。

于 2009-05-04T23:29:47.297 回答
0

这是一个老问题,但我相信答案是 SID 是父 ID 级别的“范围 ID”。因此,从技术上讲,您在元素下开始搜索,并且所有 sid 在该块下都是唯一的。

这一直是我的理解,无论如何...

于 2009-11-26T13:11:53.860 回答