2013-12-09 36 views
1

我有一個簡單的THREE.js場景,我希望點光源可以隨相機動態移動。該運動效果很好,但場景中的照明不會立即更新。當我改變攝像機位置(從而燈光位置)時,需要一段時間(大約2-3秒),直到場景中的燈光照亮新燈光位置。我已經在每一幀更新了矩陣/矩陣世界的燈光。是否需要進一步更新?如何告訴Three.js燈位已經改變?three.js - 光線移動時不更新場景照明

+0

你能展示一個簡單的現實例子嗎? – WestLangley

回答

2

沒有具體的方法來告訴THREE.js光源已經改變了他們的位置。這裏重要的是如何進行變換矩陣的更新。我有一個lightGroup(Object3D的實例),它是我場景中所有燈源的父節點。根據攝像機更新lightGroup變換,使用此設置:

if (camera !== undefined) 
{ 
    lightGroup.position.x = camera.position.x; 
    lightGroup.position.y = camera.position.y; 
    lightGroup.position.z = camera.position.z; 

    lightGroup.lookAt(camera.target); 

    lightGroup.updateMatrix(); 
    lightGroup.updateMatrixWorld();  
} 

變換矩陣的更新就在這裏。另一種方法是將相機掛在THREE.js場景圖中,並將燈光作爲其子項,如果您想避免單獨的lightGroup節點。

順便說一句:THREE.js場景的特定更新僅在更改場景中的光源數量時才需要。請參閱材料上的https://github.com/mrdoob/three.js/wiki/Updates