Свет, который испускается в определенном направлении. Этот свет будет вести себя так, как будто он находится бесконечно далеко и все лучи, исходящие от него, параллельны. Обычно используется для имитации дневного света; солнце находится достаточно далеко, чтобы его положение можно было считать бесконечным, и все лучи света, исходящие от него, параллельны.
Этот свет может отбрасывать тени — смотрите подробности на странице DirectionalLightShadowCSM.
В «Вердж3Д» направленные источники света могут работать в двух различных режимах в зависимости от значения флага .isFreeLight. Если isFreeLight=true, DirectionalLight эквивалентен тому, что часто называют "Target Directional Light" в «3дс Максе». Если isFreeLight=true, источник света эквивалентен "Free Directional Light" в «3дс Максе», "Sun" в «Блендере» или просто "Directional Light" в «Майе».
В любом случае направление света рассчитывается как направление от Object3D.position источника света к target. В первом режиме target указывается явно, а во втором режиме target рассчитывается движком на основе поворота Object3D.quaternion источника освещения.
// White directional light at half intensity shining from the top.
const directionalLight = new v3d.DirectionalLight(0xffffff, 0.5);
app.scene.add(directionalLight);
0xffffff (белый).1.Создает новый DirectionalLight.
Общие свойства смотрите в базовом классе Light.
Если установить значение true, свет будет отбрасывать динамические тени. Предупреждение: Это дорого и требует настройки, чтобы тени выглядели правильно. Подробности смотрите в DirectionalLightShadowCSM. По умолчанию установлено значение false.
Указывает, что данный объект является экземпляром класса DirectionalLight. Только для чтения.
Флаг, используемый для определения источников освещения без явной цели. Для таких источников виртуальный target рассчитывается на основе поворота, применённого к объекту источника освещения.
Он устанавливается равным Object3D.DefaultUp (0, 1, 0), чтобы свет светил сверху вниз.
DirectionalLightShadowCSM, используемый для расчета теней для этого света.
Направленный источник указывает из своего положения position на target.position. По умолчанию позиция целевого объекта равна (0, 0, 0)
Чтобы положение целевого объекта можно было изменить на любое другое, отличное от значения по умолчанию, его необходимо добавить в сцену с помощью функции
app.scene.add(light.target);
Это делается для того, чтобы matrixWorld целевого объекта автоматически обновлялся каждый кадр.
Если isFreeLight=false, также можно установить цель на другой объект в сцене (все, что имеет свойство position):
const targetObject = new v3d.Object3D();
app.scene.add(targetObject);
light.target = targetObject;
После этого направленный источник будет отслеживать целевой объект.
Общие методы смотрите в базовом классе Light.
Копирует значения всех свойств из источника source в этот DirectionalLight.
Освобождает все связанные с GPU ресурсы, используемые экземпляром DirectionalLight. Этот метод следует вызвать, если DirectionalLight больше не используется в приложении.
Следующие пазлы могут работать с направленными источниками:
О том как получить исходный код этого модуля читайте тут.