2015-10-05 167 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