Object3DLight

DirectionalLight

Свет, который испускается в определенном направлении. Этот свет будет вести себя так, как будто он находится бесконечно далеко и все лучи, исходящие от него, параллельны. Обычно используется для имитации дневного света; солнце находится достаточно далеко, чтобы его положение можно было считать бесконечным, и все лучи света, исходящие от него, параллельны.

Этот свет может отбрасывать тени — смотрите подробности на странице 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);

Конструктор

DirectionalLight(color : Integer, intensity : Float)

Создает новый DirectionalLight.

Свойства

Общие свойства смотрите в базовом классе Light.

.castShadow : Boolean

Если установить значение true, свет будет отбрасывать динамические тени. Предупреждение: Это дорого и требует настройки, чтобы тени выглядели правильно. Подробности смотрите в DirectionalLightShadowCSM. По умолчанию установлено значение false.

.isDirectionalLight : Boolean

Указывает, что данный объект является экземпляром класса DirectionalLight. Только для чтения.

.isFreeLight : Boolean

Флаг, используемый для определения источников освещения без явной цели. Для таких источников виртуальный target рассчитывается на основе поворота, применённого к объекту источника освещения.

.position : Vector3

Он устанавливается равным Object3D.DefaultUp (0, 1, 0), чтобы свет светил сверху вниз.

.shadow : DirectionalLightShadowCSM

DirectionalLightShadowCSM, используемый для расчета теней для этого света.

.target : Object3D

Направленный источник указывает из своего положения 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.

.copy(source : DirectionalLight) → DirectionalLight

Копирует значения всех свойств из источника source в этот DirectionalLight.

.dispose()

Освобождает все связанные с GPU ресурсы, используемые экземпляром DirectionalLight. Этот метод следует вызвать, если DirectionalLight больше не используется в приложении.

Пазлы

Следующие пазлы могут работать с направленными источниками:

Исходный файл

О том как получить исходный код этого модуля читайте тут.