Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 循环中的对象赢得';t使用三个.js在整个Loop上投射阴影_Javascript_Loops_Three.js_Shadow_Light - Fatal编程技术网

Javascript 循环中的对象赢得';t使用三个.js在整个Loop上投射阴影

Javascript 循环中的对象赢得';t使用三个.js在整个Loop上投射阴影,javascript,loops,three.js,shadow,light,Javascript,Loops,Three.js,Shadow,Light,为什么不是我循环中的每个立方体都投射出阴影 我使用平行光,所有立方体都应该投射阴影。但出于某种原因,它在5列左右后停止 let dirLight = new THREE.DirectionalLight(0xFFFFFF, 1.5); dirLight.position.set(300, -300, 400); dirLight.castShadow = true; scene.add(dirLight); dirLight.shadow.mapSize.width = 512; dirLig

为什么不是我循环中的每个立方体都投射出阴影

我使用平行光,所有立方体都应该投射阴影。但出于某种原因,它在5列左右后停止

let dirLight = new THREE.DirectionalLight(0xFFFFFF, 1.5);
dirLight.position.set(300, -300, 400);
dirLight.castShadow = true;
scene.add(dirLight);

dirLight.shadow.mapSize.width = 512;
dirLight.shadow.mapSize.height = 512;
dirLight.shadow.camera.near = 0.5;
dirLight.shadow.camera.far = 1000;

let cubeGeometry = new THREE.BoxGeometry(1, 3, 1);
let cubeMaterial = new THREE.MeshLambertMaterial({
    color: 0xf54242
});

function drawCubes() {
    for (let c = 0; c < 25; c++) {
        for (let r = 0; r < 10; r++) {
            for (let t = 0; t < 2; t++) {
                let cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
                cube.position.x = c * 1.3;
                cube.position.y = r * 3.02;
                cube.position.z = t * 1.01;
                cube.castShadow = true;
                cube.receiveShadow = true;
                scene.add(cube);
            }
        }
    }

}
drawCubes();
let dirLight=新的三方向光(0xFFFFFF,1.5);
dirLight.position.set(300,-300400);
dirLight.castShadow=true;
场景。添加(dirLight);
dirLight.shadow.mapSize.width=512;
dirLight.shadow.mapSize.height=512;
dirLight.shadow.camera.near=0.5;
dirLight.shadow.camera.far=1000;
设立方几何=新的三盒几何(1,3,1);
让cubeMaterial=新的3.MeshLambertMaterial({
颜色:0xf54242
});
函数drawCubes(){
for(设c=0;c<25;c++){
for(设r=0;r<10;r++){
for(设t=0;t<2;t++){
让立方体=新的三个网格(立方测量法,立方材料);
立方体位置x=c*1.3;
立方体位置y=r*3.02;
立方体位置z=t*1.01;
cube.castShadow=true;
cube.receiveShadow=true;
场景.添加(立方体);
}
}
}
}
drawCubes();

由于定向阴影摄影机的默认平截头体太小,因此会剪裁阴影。试着这样做:

const d=50;
dirLight.shadow.camera.left=-d;
dirLight.shadow.camera.right=d;
dirLight.shadow.camera.top=d;
dirLight.shadow.camera.bottom=-d;
您还可以使用
THREE.CameraHelper
调试阴影摄影机。非常有助于调整。请记住,阴影质量在很大程度上取决于截锥体。更紧的平截头体产生更清晰的阴影

scene.add(新的3.CameraHelper(dirLight.shadow.camera));

three.js R109

太棒了!如果答案解决了你的问题,请接受。