我目前正在深入研究Three.js,并在从原始基元切换到导入的OBJ对象时遇到了我的第一个真正的问题。
我有一个十二面体的简单模型,我在Cinema4D r15中进行UV映射并导出为OBJ文件。在DodecahedronGeometry上使用此模型时,几何体不再被我的定向光照亮,但是如果我使用该基元就是这样。
请参阅此JSFiddle:https://jsfiddle.net/xm3ttmxw/1/
在此处查看所需结果(使用原语):https://jsfiddle.net/84hbs7ed/1/
如您所见,我正在为OBJ中的所有网格设置receiveShadow
属性为true
。我为灯光和渲染器激活了阴影贴图。定向灯跟随摄像机并指向原点(十二面体的中心)。环境光似乎工作正常。
有什么想法吗?提前致谢
答案 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!