2014-01-11 181 views
2

对three.js和webgl非常新颖,我得到非常奇怪的阴影与定向光。奇怪的阴影与three.js

odd shadow

这里是我的渲染代码:

this.renderer.shadowMapEnabled = true; 
this.renderer.shadowMapSoft = true; 
this.renderer.shadowCameraNear = 3; 
this.renderer.shadowCameraFar = this.camera.far; 
this.renderer.shadowCameraFov = 75; 
this.renderer.shadowMapBias = 0.0039; 
this.renderer.shadowMapDarkness = 0.5; 
this.renderer.shadowMapWidth = 1024; 
this.renderer.shadowMapHeight = 1024; 

任何想法?

+0

减少你的光源的尺寸可视化的阴影相机,但我认为这可能会发生,因为投影的立方体很小。我想(5,5,20),或者在那里的某个地方。 –

回答

1

这是DirectionLight在three.js中创建的方式的结果(我之前有过这个question)。在three.js中用于指示灯的方法与任何其他阴影创建大致相同:它创建阴影贴图。使用定向光源,使用正交相机创建该阴影贴图。因此,请将您的灯光视为与OrthogonalCamera相同,并考虑如何观看场景。灯光从方向灯的角度观看场景,并基于该视图创建阴影贴图。这个视图当然有一个不同于你的相机的投影矩阵。主摄像机投影因此必须将阴影转换成其视图。这会导致看起来像你的图像显示的阴影。事实上,这个阴影的像素化揭示了阴影相机的定位方式和规模。

three.js无法使用标准灯光创建真正的正交阴影。从相机角度获得理想的阴影贴图覆盖范围也是不可能的。

0

问题是,您的光源对于您正在遮蔽的物体来说太大。您可以通过设置

light.shadowCameraVisible = true 

然后尝试通过不处于现在的位置,以检验这一权利改变参数d下面

light.shadowCameraLeft = -d 
light.shadowCameraRight = d 
light.shadowCameraTop = d 
light.shadowCameraBottom = -d