Three.js 3.js灯光从相机直接照射到物体

Three.js 3.js灯光从相机直接照射到物体,three.js,camera,directional-light,Three.js,Camera,Directional Light,在我的three js设置中,平行光有以下设置: private aLight: THREE.DirectionalLight; this.aLight = new THREE.DirectionalLight(0xffffff, 1.0); this.aLight.position.set(-5, 5, 5); this.aScene.add(this.aLight); 为了使灯光跟随我的相机并始终照亮我的网格,我在渲染功能中设置了以下选项: 私有onRender{ this.aLigh

在我的three js设置中,平行光有以下设置:

private aLight: THREE.DirectionalLight;

this.aLight = new THREE.DirectionalLight(0xffffff, 1.0);
this.aLight.position.set(-5, 5, 5);

this.aScene.add(this.aLight);
为了使灯光跟随我的相机并始终照亮我的网格,我在渲染功能中设置了以下选项: 私有onRender{

this.aLight.position.copy(this.aCamera.getWorldPosition());

window.requestAnimationFrame(_ => this.onRender());
this.aRenderer.render(this.aScene, this.aCamera);
现在,对象始终处于照明状态:

但如果我放大面向摄影机的曲面,它们是黑色的:


我希望灯光始终从相机指向对象。我做错了什么?

如果您希望光源与相机一致,最简单的解决方案是使用点光源并将其添加为相机的子对象。您可以使用如下模式:

camera.position.set( 10, 10, 10 );
scene.add( camera ); // required in this case since the camera will have a child

// ambient
scene.add( new THREE.AmbientLight( 0xffffff, 0.1 ) ); // optional

// light
var light = new THREE.PointLight( 0xffffff, 1 );
camera.add( light );
如果您使用的是平行光,请记住平行光有一个目标属性,即Object3D。因此,如果放大,您可能需要更改target.position。正如我上面解释的,使用点光源更容易


three.js r.86

如果您希望光源与相机一致,最简单的解决方案是使用点光源并将其添加为相机的子对象。您可以使用如下模式:

camera.position.set( 10, 10, 10 );
scene.add( camera ); // required in this case since the camera will have a child

// ambient
scene.add( new THREE.AmbientLight( 0xffffff, 0.1 ) ); // optional

// light
var light = new THREE.PointLight( 0xffffff, 1 );
camera.add( light );
如果您使用的是平行光,请记住平行光有一个目标属性,即Object3D。因此,如果放大,您可能需要更改target.position。正如我上面解释的,使用点光源更容易

3.js r.86