Collada模型在three.js中显示面出现问题

4
在将collada模型导入到three.js之后,一些模型的面只能从模型内部看到,而不能从外部看到。
如何解决这些面的问题?
是否可能使模型的面从两侧都可见?

你能否把你的代码放在 jsfiddle 上,而不是一个 rar 文件里? - jterrace
这看起来更像是一个法线问题。你有检查过那个圆柱体表面的法线是否翻转了吗? - Nimphious
@Nimphious 年份,从里面可以看出来。谢谢!也许是你说的那样。但如果我使用颜色材质导出模型纹理而不是纹理图像,它就会显示正确。 - user1565123
ColorMaterial必须是双面的。你需要在像我建议的3D建模程序中翻转法线。 - Nimphious
@Nimphious 当我把它翻转过来时,恰好相反的是,从外面可以看到它,但从里面却看不到。我发现当我在靠近圆柱体的两侧添加颜色时,它似乎没问题了。截图可在http://images.cnblogs.com/cnblogs_com/e-life/401048/r_colored.JPG中查看。 - user1565123
显示剩余7条评论
2个回答

2

它无法正常工作的原因是您的文件设置了双面标志:

<effect id="material_3_4_0-effect" name="material_3_4_0-effect">
   <profile_COMMON>
      ...
      <extra>
         <technique profile="GOOGLEEARTH">
            <double_sided>1</double_sided>
         </technique>
      </extra>
   </profile_COMMON>
</effect>

三维引擎 three.js 的 ColladaLoader 没有查找此标志并像应该做的那样在材质上设置 doubleSided。我已经为这个问题提交了一个 bug。请参考:https://github.com/mrdoob/three.js/issues/2280

1

为了修复面向不正确的面,将模型加载到像Blender这样的3D建模程序中,并翻转未正确显示的面的法线。

Three.js网格具有一个doublesided属性,您可以设置它,通常可以让您显示从两侧可见的模型面。

以下是如何加载collada网格并启用双面渲染的简短示例。

var loader = new THREE.ColladaLoader();
loader.load('path/to/mesh.dae', loadModel);

function loadModel(geom) {
    var mesh = new THREE.Mesh(geom, new THREE.MeshBasicMaterial());
    mesh.doublesided = true;
    scene.add(mesh);
}

一个实时示例:http://jsfiddle.net/r7Yq2/


2
显然在r50中已经发生了变化:现在应该在材质上设置:material.side = THREE.DoubleSide;(我花了一段时间才找到!) - Damien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接