【问题标题】:Collada. Double sided texture do not work科拉达。双面纹理不起作用
【发布时间】:2018-11-28 07:56:06
【问题描述】:

我创建 dae 文件以导出到 Web 应用程序。我的表面仅在背面(表面的一侧)有纹理。我希望它有面部和背部纹理。在 collada 规范 1.5(第 26 页)中,我看到我们应该应用双面语义属性:

<input semantic="POSITION" source="#grid-Position"/>
<newparam sid="blah">
<semantic>DOUBLE_SIDED</semantic>
<float>1.0</float>
</newparam> 

但是当我这样做时,什么都没有改变。我粘贴这段代码:

<effect name="Material0-fx" id="Material0-fx">
      <profile_COMMON>
        <newparam sid="Image-Material0-surface">
          <surface type="2D">
            <init_from>Image-Material0</init_from>
            <format>A8R8G8B8</format>
          </surface>
        </newparam>
        <newparam sid="Image-Material0-sampler">
          <sampler2D>
            <source>Image-Material0-surface</source>
            <wrap_s>WRAP</wrap_s>
            <wrap_t>WRAP</wrap_t>
            <minfilter>NONE</minfilter>
            <magfilter>NONE</magfilter>
            <mipfilter>NONE</mipfilter>
          </sampler2D>
       </newparam>        
        <newparam>
          <semantic>DOUBLE_SIDED</semantic>
       </newparam>
        <technique id="Material0-fx-COMMON" sid="COMMON">
          <phong>
            <ambient>
              <color>1 1 1 1</color>
            </ambient>
            <diffuse>
              <texture texture="Image-Material0-sampler" texcoord="CHANNEL1" />
            </diffuse>
            <specular>
              <color>0.00784313725490196 0.00784313725490196 0.00784313725490196 1</color>
            </specular>
            <shininess>
              <float>0.3125</float>
            </shininess>
            <transparency>
              <float>0</float>
            </transparency>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>

纹理仅适用于表面背面的代码有什么问题?感谢您的帮助。

【问题讨论】:

    标签: xml graphics collada


    【解决方案1】:

    在 collada 规范 1.5(第 26 页)中,我看到我们应该应用双面语义属性:

    这是不正确的。它仅给出了一个示例,表明所有语义都必须大写,1.5 规范说:

    输入和参数语义名称是大写的。例如,&lt;input&gt; 的值和 &lt;newparam&gt;元素的语义属性都是大写字母:

    <input semantic="POSITION" source="#grid-Position"/>
    <newparam sid="blah">
       <semantic>DOUBLE_SIDED</semantic>
       <float>1.0</float>
    </newparam>
    

    如果您坚持使用,您的渲染器和导入器必须处理此语义。您也可以将数据放在&lt;extra&gt; 中,但导入器和渲染器必须再次处理它。

    当前的 COLLADA 规范[s] 不直接支持双面属性。例如,如果您的应用支持 glTF 等其他格式,那么您可以编写(或修改现有转换器,例如 COLLADA2GLTF)转换器将此 semanticextra 转换为其他格式属性。 glTF 支持双面材质。您可以先将 COLLADA 转换为 glTF,然后再在 web 中使用它。或者你可以只使用 glTF 如果你愿意。

    当然,您可以在 Web 中使用 COLLADA,但您的渲染器/导入器必须处理您放入 COLLADA 的双面属性/元素。

    PS:您的&lt;newparam&gt; 用法也不正确。因为它没有在任何地方使用。它没有任何 SIDID 属性,这使得其他元素难以访问它(如果您没有线性迭代所有 newparam 并且试图找到不是好主意的 DOUBLE_SIDED 文本)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      相关资源
      最近更新 更多