即使属性设置为true,Three.js中的已加载OBJ也不会收到阴影

时间:2015-05-18 12:20:43

标签: javascript three.js shadows directional-light

我目前正在深入研究Three.js,并在从原始基元切换到导入的OBJ对象时遇到了我的第一个真正的问题。

我有一个十二面体的简单模型,我在Cinema4D r15中进行UV映射并导出为OBJ文件。在DodecahedronGeometry上使用此模型时,几何体不再被我的定向光照亮,但是如果我使用该基元就是这样。

请参阅此JSFiddle:https://jsfiddle.net/xm3ttmxw/1/

在此处查看所需结果(使用原语):https://jsfiddle.net/84hbs7ed/1/

如您所见,我正在为OBJ中的所有网格设置receiveShadow属性为true。我为灯光和渲染器激活了阴影贴图。定向灯跟随摄像机并指向原点(十二面体的中心)。环境光似乎工作正常。

有什么想法吗?提前致谢

1 个答案:

答案 0 :(得分:1)

经过一些研究后,似乎问题来自缺乏顶点法线(OBJLoader没有计算这些)。解决方案是动态计算顶点法线,如下所示:https://stackoverflow.com/a/28568522/3446439

object.traverse( function( child ) {
    if ( child instanceof THREE.Mesh ) {
        child.geometry.computeVertexNormals(); //add this
    }
} );

谢谢Sebastian Baltes!