Tho*_*man 4 javascript three.js
根据屏幕截图,投射到下面 THREE.PlaneGeometry(250, 380, 1, 1) 上的阴影被切断。
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
Run Code Online (Sandbox Code Playgroud)
..
camera = new THREE.PerspectiveCamera(35, window.innerWidth / window.innerHeight, 1, 1000);
Run Code Online (Sandbox Code Playgroud)
..
mainLight = new THREE.DirectionalLight(0xffffff, 0.5);
mainLight.position.set(50, 50, 50);
mainLight.castShadow = true;
mainLight.shadow.mapSize.width = width * window.devicePixelRatio;
mainLight.shadow.mapSize.height = width * window.devicePixelRatio;
mainLight.shadow.camera.near = 1;
mainLight.shadow.camera.far = 1000;
mainLight.shadow.camera.fov = 100;
scene.add(mainLight);
Run Code Online (Sandbox Code Playgroud)
..
plane.receiveShadow = true;
Run Code Online (Sandbox Code Playgroud)
..
model.castShadow = true;
model.receiveShadow = true;
Run Code Online (Sandbox Code Playgroud)
我玩过不同的值,比如阴影相机 FOV 和远平面值......
这是使用 DirectionalLight 的警告吗?与 SpotLight 相比,我的所有模型都需要均匀照明。
我发现了three.js shadow cutoff,但它只是建议改用SpotLight,并没有解释为什么会改变任何东西。
当我使用 SpotLight 时,我突然完全失去了地平面上的阴影。
- 谢谢
请参阅DirectionalLightShadow的three.js 文档:
这在内部
DirectionalLights用于计算阴影。与其他阴影类不同,它使用 an
OrthographicCamera来计算阴影,而不是 aPerspectiveCamera。这是因为来自 a 的光线DirectionalLights是平行的。
进一步查看 DirectionalLight
定向光的一个常见混淆点是设置旋转没有效果。这是因为three.js 的DirectionalLight 相当于其他应用程序中通常称为“目标直射光”的东西。
这意味着它的方向被计算为从光源的位置指向目标的位置(与仅具有旋转分量的“自由直接光”相反)。
这样做的原因是允许灯光投射阴影 - 阴影相机需要一个位置来计算阴影。
这意味着受阴影影响的区域由光源 ( )的position和定义。cameraDirectionalLight
为 设置相机mainLight并根据您的需要定义其正交投影:
mainLight.shadow.camera = new THREE.OrthographicCamera( -100, 100, 100, -100, 0.5, 1000 ); 
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2256 次  |  
        
|   最近记录:  |