Свет Three.js от камеры прямо на объект

В моих трех настройках 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);

Чтобы свет следовал за моей камерой и всегда освещал мою сетку, я установил в моей функции рендеринга следующее: private onRender() {

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

window.requestAnimationFrame(_ => this.onRender());
this.aRenderer.render(this.aScene, this.aCamera);

Теперь объект всегда освещен:

но если я увеличу масштаб изображения, поверхности, обращенные к камере, будут темными:

Я хотел бы, чтобы мой свет всегда указывал от моей камеры на объект. Что я делаю неправильно?

1 ответ

Решение

Если вы хотите, чтобы источник света совпадал с вашей камерой, самое простое решение - использовать точечный источник света и добавить его в качестве дочернего элемента камеры. Вы можете использовать шаблон как это:

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 );

Если вы используете направленный свет, помните, что направленный свет имеет target собственность, Object3D, Так что, если вы увеличите масштаб, вам, вероятно, придется изменить target.position, Использование точечного источника света, как я объяснил выше, проще.

three.js r.86

Другие вопросы по тегам