2016-01-02 130 views
1

在three.js中,定向燈的陰影計算範圍是基於從定向光源發出的邊界框定義的。因此,如果我想限制計算陰影的距離,我將限制邊界框的幾何形狀。舉例來說:three.js中定向燈的陰影範圍

var directionalLight = new THREE.DirectionalLight(0xffffff); 
directionalLight.position.set(50, 50, 50); 
directionalLight.intensity = 0.5; 
directionalLight.castShadow = true; 
directionalLight.shadowCameraLeft = -10; 
directionalLight.shadowCameraRight = 10; 
directionalLight.shadowCameraTop = 10; 
directionalLight.shadowCameraBottom = -10; 

shadowCamera變量可以調整到離光源FOV有多遠創建陰影。我希望這個邊界框跟隨用戶相機,以便將陰影渲染到距相機一定距離的地方。

由於邊界框的幾何圖形是基於光線相對於場景原點(或目標)的位置,所以不可能將邊界框移動到相機創建所需效果的位置。

我反而試圖用照相機移動光源,假定邊界幾何圖形相對於照相機的位置。這不起作用,因爲我似乎無法爲方向燈設置目標,它總是試圖指向原點,所以如果我改變了燈的位置,它本質上改變了它的方向。

例如下面什麼都不做:

directionalLight.target.position.set(100,100,100); 

如果上面的工作,我在理論上移動方向燈位置和相對目標彼此以保持其角度不變,並可能達到我想要的,但它不起作用。

任何想法如何創建陰影範圍或爲什麼上述不起作用?

+0

看看https://github.com/mrdoob/three.js/issues/5555#issuecomment-61390208解決您的問題。 – WestLangley

+0

使用directionalLight.target = object確實可以按照問題5555中的建議工作。因此,我將不得不創建一個不可見的對象用作目標,並將它相對於相機移動以獲得所需的效果。感謝這裏和GitHub的頭像。 –

回答

1

DirectionalLight.target是光的屬性,但它不是場景圖的一部分,所以目標的矩陣沒有被更新。

如果您的場景中有一個物體作爲目標,那麼就沒有問題了。

light.target = myObject; 

three.js所r.73

0

嘗試設置該標誌來幫助調試:

directionalLight.shadowCameraVisible = true; 

它也像你沒有控制一些參數,例如:

directionalLight.shadowCameraNear = -10; 
directionalLight.shadowCameraFar = 10; 

最後,我不知道你是什麼意思是「什麼都不做」,因爲

directionalLight.target.position.set(x, y, z); 

爲我移動光目標,所以也許當你打開s hadowCameraVisible的東西將變得更加清晰。我希望這有幫助。

+0

是的,我試過directionalLight.shadowCameraVisible = true;它並沒有爲我創造一個幫手。我可以創建一個輕型助手,但影子幫手不工作。 –

+0

而且,恐怕directionalLight.target.position。set(x,y,z);根本沒有爲我做任何事情。光線始終指向0,0,0,正如此人發現的那樣:https://github.com/mrdoob/three.js/issues/1425 –