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

Loaded OBJ in Three.js doesn't receive shadows even though the property is set to true

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

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

查看这个 JSFiddle:https://jsfiddle.net/xm3ttmxw/1/

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

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

有什么想法吗?提前致谢

经过更多研究,问题似乎出在缺少顶点法线(OBJLoader 不计算这些法线)。解决方案是动态计算顶点法线,如下所示:

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

谢谢塞巴斯蒂安巴尔特斯!