2014-06-13 61 views
0

我希望聚光燈能與相機一起移動。下面的代碼工作,如果我只是想保持焦點在同一位置的攝像頭在任何時候都:如何在Three.js中將聚光燈相對於相機位置移動?

var pointLight = new THREE.PointLight(0xffffff, 1, 200); 
pointLight.position = camera.position; 
scene.add(pointLight); 

不過,我怎樣才能使它發揮作用,使聚光燈總是前相機有一定的距離?或者通常,相對於相機的位置總是處於相同的位置?

回答

2

將光線添加到相機的層次結構中。 然後光的座標系是相對於相機的。然後簡單地沿着z軸移動它。

camera.add(pLight); 
pLight.position = new THREE.Vector3(0,0,10); 
+1

謝謝!我最初發現,我可以在render()函數內設置點光源的位置,就像這樣'pointlight.position.z = camera.position.z - 10',這樣它可以保持每幀移動,但是你的解決方案更加清晰,更具可讀性。 –

+0

只有當相機沿着負Z軸看時,您的解決方案纔有效。將對象放入層次結構中也是相機旋轉的關鍵。另一種方法是找到相機的前向矢量,以便您可以編寫'pLight.position = camera.position + camForwardVec * distance;'。 –

+0

該解決方案根據攝像機距物體的距離來確定光的視強度。 (但是,好吧,這可能是你真正想要的東西)。我無法通過將PointLight的第三個參數設置爲零來解決此問題。 – Ideogram

-1

你可以簡單地做:

point.position = camera.position 

每次渲染之前。

如果你使用類似OrbitControl它應該是這樣的:

orbit.addEventListener('change', function() { 
    render(); 
}); 

function render() { 
    lights.point.position = camera.position; 
    renderer.render(scene, camera); 
} 

希望這有助於!

+0

林不知道這回答我的問題..?這是怎麼讓我在移動時保持照相機前方的照明?據我所知,這與我發佈的代碼具有相同的功能。 –