Установите цель направленного света в THREE.js

У меня модель далеко от начала координат, и я хочу, чтобы на нее падал направленный свет, как солнечный свет.

Я установил позицию и цель для моего DirectionalLight:

export const dirLight = getDirectional(); 
function getDirectional()  {
    const dirLight = new DirectionalLight( 0xffffff, 1 );
    dirLight.position.set( 585000 + 10000, 6135000 + 10000, -500 + 5000);

    return dirLight;
};


const helper = new THREE.DirectionalLightHelper( dirLight, 1000 );
let t = new THREE.Object3D();
t.translateX(585000);
t.translateY(6135000);
t.translateZ(1000);
dirLight.target = t;
scene.add(dirLight);
scene.add(dirLight.target);
scene.add(t);
helper.update();
scene.add( helper );

Я ожидал, что направление света теперь будет параллельно вектору между положением источника света и световой целью, но, очевидно, направление света по-прежнему направлено к началу сцены. Что я делаю неправильно?

Работающий пример можно увидеть здесь

0 ответов

В документации указано, что цель должна быть добавлена ​​в сцену, чтобы были вычислены мировые координаты. Однако, похоже, это не работает.

Вместо этого я попытался вручную обновить мировые координаты, и это сработало. Вероятно, это будет работать только со статической целью.

В вашем случае это добавит

dirLight.target.updateMatrixWorld();

Спасибо, Мартин. Я попробовал это, но не смог заставить его работать должным образом. Недавно попробовал еще раз решить вопрос, и теперь использую это решение.

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