【问题标题】:Extend Collada Node elements to add bone tails扩展 Collada 节点元素以添加骨骼尾部
【发布时间】:2016-09-22 07:27:10
【问题描述】:

我想编写一个 Collada-1.4 导出器来导出骨架。我需要扩展 Collada 格式以定义一些附加信息:

  • 骨尾(相对于关节位置)
  • 骨卷(相对于纵轴)
  • 骨骼连接状态(骨骼尾部连接到父关节)

我能想到的最好的办法是使用一个元素并添加一个特定于工具的配置文件,但文档并不清楚如何准确地做到这一点。

我猜这是一个正确的工作示例:

<node id="Armature" name="Armature" type="NODE">
  <matrix sid="transform">
      1 0 0 0.1151489
      0 1 0 0.01073149
      0 0 1 1.730716 
      0 0 0 1</matrix>
  <node id="A" name="A" sid="A" type="JOINT">
    <matrix sid="transform">1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 1</matrix>
    <node id="B" name="B" sid="B" type="JOINT">
      <matrix sid="transform">
        -0.7919466 -0.4411024 0.422196 0  
         8.9407e-8 0.6914554 0.7224193 1
        -0.6105905 0.5721177 -0.5475955 0 
         0 0 0 1
      </matrix>
      <extra>
        <technique profile="blender">
          <!-- =============================== -->
          <!-- Bone tail offset from bone head -->
          <!-- =============================== -->
          <float_array name="tail" sid="tail" count="3">
            0.0 0.0 1.0
          </float_array>
        </technique>
        <technique_common/>
      </extra>
    </node>
  </node>
</node>

但是我有一些问题:

  • 这是提供骨尾信息的可接受方法吗?
  • 我可以使用 technology_common 元素来替代定义配置文件吗?
  • 我必须定义一个空的 technology_common 元素还是可以跳过它?
  • 是否可以对整个 collada 文件中的每个骨尾使用 sid="tail"?
  • 有没有更简洁的方式来定义骨尾信息?
  • 我可以更具体地使用配置文件吗?比如:

    <node>
      ...
      <extra>
        <technique profile="blender">
          <tail type="float_array" connect="true">0 0 1.0</tail>
          <roll type="float">0</roll>
        </technique>
        <technique_common/>
      </extra>
    </node>
    

我不确定是否允许我定义新元素(尾、角色、连接),如上例所示。我可以这样做吗?

我也知道进口商必须知道额外的数据(支持搅拌机配置文件)才能找到骨尾信息。因此,如果一个工具不知道搅拌机配置文件,它将无法识别额外的骨骼信息,但这对我来说没问题。

【问题讨论】:

    标签: collada


    【解决方案1】:

    我可以尝试回答您的问题。

    • 如果您阅读 Collada 规范中的 &lt;extra&gt; 标签,您可以 在&lt;technique&gt; 下写入任何符合 XML 的数据或 &lt;technique_common&gt;。所以对于你的第一个问题,是的 可以接受。如果您为您的 XML 元素定义了任何模式,您 可以在技术中使用xmlns 属性。
    • 是的,您可以选择&lt;technique_common&gt; 元素,但最好在您的情况下提供个人资料信息。我更喜欢使用 &lt;technique&gt; 并提供您已经提供的个人资料信息 完成。
    • 如果您没有可提供的信息,则无需将&lt;technique_common&gt; 元素作为&lt;extra&gt; 的子元素。
    • sid 在文档中应该是唯一的。所以不行。您可以尝试连续编号。
    • 骨尾信息更多的是关于语义。我无法回答。
    • 我认为你在第二个例子中的表现比第一个好。但是您是使用它进行数据交换的人。您应该考虑进口商应该如何解释这些数据。如果不了解进口商的实习结构,我无法进一步帮助您。

    【讨论】:

    • 感谢您的澄清!我首先想确保我的数据结构是有效的 collada 扩展。导出器部分完成后,我稍后想将必要的导入功能添加到 Blender Collada 导入器中。但首先我必须了解 OpenCollada 库中是否以及如何支持导入 数据。但这是另一个问题。谢谢!
    猜你喜欢
    • 2011-04-02
    • 2011-10-09
    • 2019-01-17
    • 2012-05-20
    • 2014-07-25
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多