2014-01-11 223 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