Разрешение COLLADA FX SID

Правила разрешения SID в COLLADA и, в частности, COLLADA FX SID не очень ясны. Что касается, в частности, идентификаторов безопасности COLLADA FX, как мне узнать, с какого элемента начать поиск определенного идентификатора безопасности? Рассмотрим, например, атрибут "текстура" элемента <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>

Я могу найти SID, на который ссылается <texture>, если я начну поиск с <profile_COMMON>, который является прапрадедом элемента <texture>, содержащего ссылку, но я также могу найти его, если начну поиск с <effect>. Как же тогда определяется начальный элемент? Это определено где-то в спецификации?

Предусматривает ли спецификация ограничение на то, насколько близко к корню документа может быть найден sid, на который ссылается конкретный элемент <texture>? В приведенном выше примере, могло ли оно появиться за пределами <profile_COMMON>, например внутри его <effect> родителя? Какой элемент является «самым корневым», в котором я гарантированно найду указанный sid, развернув его вниз по иерархии?

Обновление: я также разместил этот вопрос в COLLADA форумы, пока без ответа. Я решил, что на данный момент я просто буду предполагать, что SID, на который ссылается атрибут "texture" <texture>, всегда будет находиться в <profile_COMMON>. Если это неправильно, это означает, что мой импортер может выйти из строя при правильном вводе, но само сообщество COLLADA не предоставило отзывов по этому поводу, поэтому я ничего не могу сделать.


person Adrian Lopez    schedule 14.04.2009    source источник


Ответы (2)


Я чувствую твою боль ;-). Спецификации Collada действительно сложно понять.

Поскольку у вас могут быть параметры, объявленные в области ‹effect› (не только внутри ‹profile›: Глава 7 О параметрах), вам тоже следует посмотреть туда.

Но. Судя по моему опыту, у экспортеров обычно есть местные параметры (под ‹profile›), так что ваш способ тоже подойдет.

person Community    schedule 04.05.2009

Это старый вопрос, но я считаю, что ответ заключается в том, что идентификаторы безопасности - это «идентификаторы с ограниченным объемом» на уровне родительского идентификатора. Таким образом, вы технически начинаете поиск непосредственно под элементом, и все sid-идентификаторы уникальны под этим блоком.

Во всяком случае, я всегда так понимал ...

person cmaughan    schedule 26.11.2009