2015-10-05 162 views
0

我想使用DirectionalLightHelper當我的指示燈連接到攝像機。我將光線附加到相機上,以便在使用TrackballControls時模擬場景旋轉。Three.js DirectionalLightHelper當燈連接到攝像機

var directionalLight = new THREE.DirectionalLight(0xffffff, 1.5); 
directionalLight.position.set(100, 100, 0); 

camera.add(directionalLight); 

directionalLightHelper = new THREE.DirectionalLightHelper(directionalLight, 50); 
camera.add(directionalLightHelper); 

但是,這並沒有給我預期的結果。如果我使用TrackballControls移動攝像頭,我最終會'找到'助手所呈現的光平面和目標線,但它們不在正確的位置。我希望該平面的中心位於面向光源的0,0,0處,並且該線將從100,100,0到0,0,0。我是否誤解了這裏的某些東西,或者在使用輔助器和相機上的燈時需要做些什麼?

回答

2

只需將燈光助手添加到場景而不是相機。

+0

這仍然不爲我做的。輕型飛機現在更大,但仍然在某個地方浮動,看似隨機。我發現的唯一東西似乎把所有東西都放在正確的位置上,在DirectionalLightHelper.js中註釋掉以下行: this.matrix = light.matrixWorld; 不知道爲什麼這應該是這樣的情況? – mark

0

請確保燈光遵循相機座標,而不是世界之一。

+0

可以是評論。 – Robert

0

將方向燈連接到相機時,我也遇到了這個問題。我不必將我的directionalLightHelper附加到相機上,而必須將其附加到場景中。

scene.add(directionalLightHelper); 

然後,我不得不將以下內容添加到我的渲染循環中,以正確更新幫助器,因爲我的指示燈改變了位置。

directionalLight.updateMatrixWorld(); 
directionalLightHelper.position.setFromMatrixPosition(directionalLight.matrixWorld); 
directionalLightHelper.updateMatrix(); 
directionalLightHelper.update(); 

編輯:

破幫手codepen https://codepen.io/briantjacobs/pen/dRNJpw
codepen工作幫手https://codepen.io/briantjacobs/pen/VWProE