Javascript Three.js导入的JSON模型未接收/投射阴影
我一直在尝试在Three.js中使用blender导出的模型,现在我可以导入模型,并查看灯光如何影响对象本身。我可以看到一个方向光,我用它来突出面对它的东西,但我根本不能投射阴影 以下是我正在做的:Javascript Three.js导入的JSON模型未接收/投射阴影,javascript,json,three.js,Javascript,Json,Three.js,我一直在尝试在Three.js中使用blender导出的模型,现在我可以导入模型,并查看灯光如何影响对象本身。我可以看到一个方向光,我用它来突出面对它的东西,但我根本不能投射阴影 以下是我正在做的: renderer.shadowMapEnabled = true; renderer.shadowMapType = THREE.PCFSoftShadowMap; (...) var directionalLight = new THREE.DirectionalLight(0xffffff);
renderer.shadowMapEnabled = true;
renderer.shadowMapType = THREE.PCFSoftShadowMap;
(...)
var directionalLight = new THREE.DirectionalLight(0xffffff);
directionalLight.position.set(30,10,-10);
directionalLight.castShadow = true;
directionalLight.shadowDarkness = 0.5;
directionalLight.shadowCameraVisible = true;
directionalLight.shadowBias = 0.1;
directionalLight.shadowMapWidth = 1024;
directionalLight.shadowMapHeight = 1024;
directionalLight.shadowCameraRight = 10;
directionalLight.shadowCameraLeft = -10;
directionalLight.shadowCameraTop = 10;
directionalLight.shadowCameraBottom = -10;
directionalLight.shadowCameraFar = 10;
directionalLight.shadowCameraNear = 10;
scene.add(directionalLight);
var loader = new THREE.ObjectLoader();
loader.load( "island.json", function ( geometry ) {
islandMesh = geometry;
for(k in islandMesh.children-1){
islandMesh.children[k].castShadow = true;
islandMesh.children[k].receiveShadow = true;
}
islandMesh.castShadow = true;
islandMesh.receiveShadow = true;
scene.add( islandMesh );
render();
} );
但即使我相信整个设置允许我投射阴影,我也无法投射任何阴影。
以下是一个屏幕截图:
尽管光线来自岛的右侧,但群山并没有投射出我所期望的阴影
我真的很感激你花时间看这个
各位,请提前表示衷心的感谢 只有当您知道json文件中的数据具有一个父级的结构,而其他所有数据都是该父级的子级时,您所做的工作才会起作用。(仍然是为什么在for循环中执行
-1
)
您应该做的(在所有情况下都有效)是遍历生成的几何图形树:
islandMesh.traverse ( function (child) {
if (child instanceof THREE.Mesh) {
child.castShadow = true;
child.receiveShadow = true;
}
}
编辑
对于您正在使用的平行光,您可能需要调整
light.shadowCameraNear, light.shadowCameraFar, light.shadowCameraLeft,
light.shadowCameraRight, light.shadowCameraTop, light.shadowCameraBottom
CameraNear默认值可能还可以,但您可以将其恢复为1和CameraFar,具体取决于摄影机与场景远端的距离。我尝试用您提供的代码替换我的for结构,但我得到了完全相同的结果,尽管这也有意义。不过我还是很感激你的建议!我使用了这些定义,但在发布时没有提到它们,因此我将用我使用的更新问题帖子。遗憾的是,即使定义了所有这些,我也没有阴影。我无法从你发布的代码中分辨出你的场景的尺寸,比如边界框。这些数字取决于此。嗯,它们适合阴影摄影机框,对象上的最大宽度约为10is
light.shadowCameraNear===light.shadowCameraFar
,就像上面的代码一样?近距离应为0.1或1,远距离应为20。