在 Three.js DirectionalLight 中,不会将阴影投射到平面上

Bin*_*cer 5 three.js

我无法在 Three.js r79 中将阴影投射到具有定向光的平面上。

我已经尝试了一切,但从未成功。

我添加了一个CameraHelperto scene,所有东西都在黄线周围的区域内。但它不起作用......

这是屏幕截图:

在此输入图像描述

代码:

function init(canvas) {
const renderer = new THREE.WebGLRenderer({
    antialias: true,
    canvas: canvas,
    //alpha: true
});
//renderer.setClearColor(0x777777);
renderer.shadowMap.enabled = true;
renderer.shadowMap.soft = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
renderer.shadowMap.needsUpdate = true;
renderer.setSize(innerWidth, innerHeight);
renderer.autoClear = true;
renderer.gammaInput = true;
renderer.gammaOutput = true;

const scene = new THREE.Scene();

const pCamera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 1, 2000);
pCamera.position.x = 300;
pCamera.position.y = -200;
pCamera.position.z = 50;
pCamera.lookAt({x: 0, y: 0, z: -200});
scene.add(pCamera);

//const controls = new THREE.OrbitControls(pCamera, canvas);
//controls.maxPolarAngle = Math.PI * 0.5;
//controls.minDistance = 1000;
//controls.maxDistance = 7500;

const directLight = new THREE.DirectionalLight(0xffffff, 1);
directLight.position.x = 400;
directLight.position.y = 2000;
directLight.position.z = 500;
directLight.castShadow = true;

directLight.shadow.camera.far = 300;
directLight.shadow.camera.near = 100;
directLight.shadow.mapSize.width = 1024;
directLight.shadow.mapSize.height = 1024;
directLight.shadow.bias = 0.0039;

const d = 100;
directLight.shadow.camera.left = -d;
directLight.shadow.camera.right = d;
directLight.shadow.camera.top = -d;
directLight.shadow.camera.bottom = d;

scene.add(directLight);

const cameraHelper = new THREE.CameraHelper(directLight.shadow.camera);
scene.add(cameraHelper);

const cube = new THREE.Mesh(new THREE.BoxGeometry(50, 50, 50), new THREE.MeshLambertMaterial({color: 0xcc0000}));
cube.position.z = -200;
cube.castShadow = true;
scene.add(cube);

const plane = new THREE.Mesh(new THREE.PlaneGeometry(200, 200), new THREE.MeshLambertMaterial({color: 0x22ff11}));
plane.receiveShadow = true;
plane.position.z = -215;
scene.add(plane);

scene.add(new THREE.AmbientLight(0x212223, 0.1));

return function () {

    renderer.render(scene, pCamera);

    };
}
Run Code Online (Sandbox Code Playgroud)