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

时间:2016-07-28 12:45:00

标签: three.js

我无法将投影投射到三个方向上的定向光线的平面。

我尝试了所有的事情,但从未奏效过。

我向CameraHelper添加了一个scene,所有的东西都在黄色线条周围。但它只是不起作用......

这是屏幕截图:

enter image description here

代码:

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

    };
}

0 个答案:

没有答案