可乐达。双面纹理不起作用

Collada. Double sided texture do not work

我创建了 dae 文件以导出到网络应用程序。我的表面仅在背面(表面的一侧)有纹理。我希望它有面部和背部纹理。在 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>

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

In collada spec 1.5 (page 26) i see that we should apply semantic attribute with double sided:

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

Input and parameter semantic names are uppercase. For example, the values for the <input> and <newparam> elements’ semantic attribute are all uppercase letters:

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

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

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

当然,您可以在网络中使用 COLLADA,但是您的 renderer/importer 必须处理您放入 COLLADA 中的双面 attribute/element。

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