代码之家  ›  专栏  ›  技术社区  ›  shamaseen

三个js改变directlight阴影摄像机的位置

  •  0
  • shamaseen  · 技术社区  · 6 年前

    问题是,这个方向光不能在整个平面上投射阴影,所以我决定让方向光的阴影摄影机跟随主透视摄影机。

    所以,这是我的密码:

    camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );
    lightCameraConstant = 40;
    dirLight = new THREE.DirectionalLight( 0xffffff, 1 );
    dirLight.color.setHSL( 0.1, 0.5, 1 );
    dirLight.position.set( 1500, 2000, 1500 );
    dirLight.castShadow = true;
    
    dirLight.shadow.mapSize.width = 4096;
    dirLight.shadow.mapSize.height = 4096;
    
    dirLight.shadow.camera.left = -lightCameraConstant;
    dirLight.shadow.camera.right = lightCameraConstant;
    dirLight.shadow.camera.top = lightCameraConstant;
    dirLight.shadow.camera.bottom = -lightCameraConstant;
    dirLight.shadow.camera.far = 3000;
    dirLight.shadow.camera.near = 0.01;
    dirLight.shadow.bias = -0.0001;
    scene.add( dirLight );
    var helper = new THREE.CameraHelper( dirLight.shadow.camera );
        scene.add( helper );
    

    然后在动画函数中使用以下内容:

    dirLight.shadow.camera.position.x = camera.position.x;
    helper.update();
    

    1-如何在不改变方向光位置的情况下改变阴影相机的位置?

    2-有没有什么方法可以在不使用疯狂资源的情况下覆盖大面积的阴影?

    1 回复  |  直到 6 年前
        1
  •  2
  •   shamaseen    6 年前

    我无法改变阴影相机的位置,但我找到了一个解决办法。

    解决方法是,用主摄像机改变整个直射光位置和目标位置,使目标位置和直射光之间的角度保持不变。

    我用这个可以:

    dirLight.position.x = camera.position.x - cameraStartPosition.x + 20 ;
    dirLight.position.z = camera.position.z - cameraStartPosition.z + 20;
    dirLight.target.position.set(( camera.position.x - cameraStartPosition.x),0,(camera.position.z - cameraStartPosition.z));
    

    cameraStartPosition

    希望这能帮上忙。