可乐达。双面纹理不起作用
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)转换器将此 semantic 或 extra 转换为其他格式属性。 glTF 支持双面material。在 web 中使用之前,您可以将 COLLADA 转换为 glTF。或者,如果你愿意,你只能使用 glTF。
当然,您可以在网络中使用 COLLADA,但是您的 renderer/importer 必须处理您放入 COLLADA 中的双面 attribute/element。
PS:您的<newparam>
用法也不正确。因为它没有在任何地方使用。它没有任何 SID 或 ID 属性,这使得其他元素难以访问它(如果你没有迭代所有 newparams 线性并试图找到 DOUBLE_SIDED 文本这不是个好主意)
我创建了 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)转换器将此 semantic 或 extra 转换为其他格式属性。 glTF 支持双面material。在 web 中使用之前,您可以将 COLLADA 转换为 glTF。或者,如果你愿意,你只能使用 glTF。
当然,您可以在网络中使用 COLLADA,但是您的 renderer/importer 必须处理您放入 COLLADA 中的双面 attribute/element。
PS:您的<newparam>
用法也不正确。因为它没有在任何地方使用。它没有任何 SID 或 ID 属性,这使得其他元素难以访问它(如果你没有迭代所有 newparams 线性并试图找到 DOUBLE_SIDED 文本这不是个好主意)