3d 将灯光连接到相机时的Three.js DirectionalLightHelper

3d 将灯光连接到相机时的Three.js DirectionalLightHelper,3d,camera,three.js,light,3d,Camera,Three.js,Light,当我的平行光连接到相机时,我正在尝试使用DirectionalLightHelper。我将灯光连接到相机,以便在使用轨迹球控件时模拟场景旋转 var directionalLight = new THREE.DirectionalLight( 0xffffff, 1.5 ); directionalLight.position.set( 100, 100, 0 ); camera.add( directionalLight ); directionalLightHelper = new

当我的平行光连接到相机时,我正在尝试使用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); 

然而,这并没有给我预期的结果。如果我使用轨迹球控件移动相机一点,我最终会“找到”辅助对象渲染的灯光平面和目标线,但它们不在正确的位置。我希望平面的中心是0,0,0,面对光源,直线从100100,0到0,0,0。我是否误解了这里的某些内容,或者在使用灯光连接到摄影机的辅助对象时,我还需要做些什么?

只需将灯光辅助对象添加到场景中,而不是添加到摄影机中。

确保灯光跟随摄影机坐标,不是世界级的。

我在将方向灯连接到相机时也遇到了这个问题。我没有将directionalLightHelper附加到摄影机,而是将其附加到场景

scene.add(directionalLightHelper); 
然后,我必须将以下内容添加到渲染循环中,以便在灯光改变位置时正确更新辅助对象

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

编辑:

断开帮助器的代码笔

工作助手的代码笔

这对我来说还是不行。光平面现在要大得多,但仍然漂浮在某处,似乎是随机的。我发现的唯一一件事似乎把所有事情都放在了正确的位置,就是在DirectionalLightHelper.js中注释掉以下行:this.matrix=light.matrixWorld;不知道为什么会这样?可能是一个评论。