Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/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 Three.JS阴影贴图不工作_Javascript_Three.js_Shadow - Fatal编程技术网

Javascript Three.JS阴影贴图不工作

Javascript Three.JS阴影贴图不工作,javascript,three.js,shadow,Javascript,Three.js,Shadow,我对Three.js有点陌生,我很喜欢它,虽然我对阴影贴图有点问题,我到处都读过,看过,但我就是不能让它工作,有人能告诉我我做错了什么吗 var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 ); var renderer = new THREE.WebGLRenderer(

我对Three.js有点陌生,我很喜欢它,虽然我对阴影贴图有点问题,我到处都读过,看过,但我就是不能让它工作,有人能告诉我我做错了什么吗

    var scene = new THREE.Scene();
    var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
    var renderer = new THREE.WebGLRenderer();

    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);

    var geometry = new THREE.BoxGeometry(1,1,1);
    var cube = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial( {color: 0x808080 } ));
    cube.castShadow = true;
    scene.add( cube );

    camera.position.y = 2;

    var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );
    directionalLight.position.set( 0, 10, 0 );
    directionalLight.castShadow = true;
    scene.add( directionalLight );

    var geo2 = new THREE.BoxGeometry(5,0.1,5);

    var floor = new THREE.Mesh(geo2, new THREE.MeshLambertMaterial( {color: 0x808080 } ));
    floor.position.y = -1;
    floor.receiveShadow = true;
    scene.add(floor);

    renderer.shadowMapEnabled = true;
    renderer.shadowMapType = THREE.PCFSoftShadowMap;


    var ambient = new THREE.AmbientLight( 0x111111 );
    directionalLight.shadowCameraVisible = true;
    scene.add( ambient );


    renderer.shadowCameraNear = 3;
    renderer.shadowCameraFar = camera.far;
    renderer.shadowCameraFov = 50;

    function animate() {
        camera.lookAt({x:0,y:0,z:0});
        var timer = Date.now() * 0.0002;
        camera.position.x = Math.cos(timer) * 5;
        camera.position.z = Math.sin(timer) * 5;
        requestAnimationFrame(animate);
        render();
    }

    function render() {
        cube.rotation.x += 0.1;
        cube.rotation.y += 0.1;

        renderer.render(scene, camera);
    }
    animate();
这三条线:

renderer.shadowCameraNear = 3;
renderer.shadowCameraFar = camera.far;
renderer.shadowCameraFov = 50;
应该在灯光上,而不是渲染器上;所以

directionalLight.shadowCameraNear = 3;
directionalLight.shadowCameraFar = camera.far;
directionalLight.shadowCameraFov = 50;
由于您的光线具有方向性,您需要:

directionalLight.shadowCameraLeft = -500;
directionalLight.shadowCameraRight = 500;
directionalLight.shadowCameraTop = 500;
directionalLight.shadowCameraBottom = -500;

您可能需要使用这些值。

嘿,谢谢,我还需要增加对象的大小;1,1,1立方体没有足够的体积投射阴影。