【问题标题】:Three.js imported JSON model not receiving/casting shadowsThree.js 导入的 JSON 模型不接收/投射阴影
【发布时间】:2015-08-06 17:29:16
【问题描述】:

我一直在尝试在 Three.js 中使用搅拌机导出的模型,现在我可以导入模型,看看光线如何影响对象本身。我可以看到我使用的 directionalLight 突出了它所面对的东西,但我根本无法投射阴影。

这就是我正在做的事情:

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

但即使我相信整个设置允许我完成投射阴影,我也无法投射任何阴影。 截图如下:

尽管光线来自岛屿的右侧,但山脉并没有像我预期的那样投下阴影。

我真的很感激你花时间看这个!

提前非常感谢,伙计们!

【问题讨论】:

    标签: javascript json three.js


    【解决方案1】:

    只有当您知道 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 结构,但我得到了完全相同的结果,尽管这也很有意义。不过我很感激这个小费!
    • 我正在使用这些定义,但在发布时没有提及它们,因此我将使用我正在使用的内容更新问题帖子。遗憾的是,即使定义了所有这些,我也没有阴影。
    • 我无法从您发布的代码中看出,但您的场景的尺寸是多少,例如边界框。这些数字取决于此。
    • 嗯,它们适合阴影相机盒子,物体上的最高宽度约为10
    • light.shadowCameraNear === light.shadowCameraFar 和上面的代码一样吗? near 应该是 0.1 或 1,而 far 应该是 20。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 2017-12-12
    • 1970-01-01
    相关资源
    最近更新 更多