Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Three.js导入的JSON模型未接收/投射阴影_Javascript_Json_Three.js - Fatal编程技术网

Javascript Three.js导入的JSON模型未接收/投射阴影

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);

我一直在尝试在Three.js中使用blender导出的模型,现在我可以导入模型,并查看灯光如何影响对象本身。我可以看到一个方向光,我用它来突出面对它的东西,但我根本不能投射阴影

以下是我正在做的:

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。