Object3DLight

SpotLight

Этот свет излучается из одной точки в одном направлении, вдоль конуса, размер которого увеличивается тем больше, чем дальше от света он находится.

Этот свет может отбрасывать тени - подробности смотрите на странице SpotLightShadow.

Таргетированные и свободные источники

В «Вердж3Д» направленные источники света могут работать в двух различных режимах в зависимости от значения флага .isFreeLight. Если isFreeLight=true, SpotLight эквивалентен тому, что часто называют "Target Directional Light" в «3дс Максе». Если isFreeLight=true, источник света эквивалентен "Free Directional Light" в «3дс Максе», "Sun" в «Блендере» или просто "Directional Light" в «Майе».

В любом случае направление света рассчитывается как направление от Object3D.position источника света к target. В первом режиме target указывается явно, а во втором режиме target рассчитывается движком на основе поворота Object3D.quaternion источника освещения.

Пример

// белый прожектор, светящий сбоку и отбрасывающий тени const spotLight = new v3d.SpotLight(0xffffff); spotLight.position.set(100, 1000, 100); spotLight.castShadow = true; spotLight.shadow.mapSize.width = 1024; spotLight.shadow.mapSize.height = 1024; spotLight.shadow.camera.near = 500; spotLight.shadow.camera.far = 4000; spotLight.shadow.camera.fov = 30; app.scene.add(spotLight);

Конструктор

SpotLight(color : Integer, intensity : Float, distance : Float, angle : Radians, penumbra : Float, decay : Float)

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

Свойства

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

.angle : Float

Максимальный размах прожектора, в радианах, от его направления. Должно быть не более Math.PI/2. По умолчанию Math.PI/3.

.castShadow : Boolean

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

.decay : Float

Величина ослабления света в зависимости от расстояния до него. По умолчанию 2. Для физически корректного освещения вам не следует менять этот параметр.

.distance : Float

Когда расстояние равно нулю, свет будет ослабевать по закону обратного квадрата до бесконечного расстояния. Когда расстояние ненулевое, свет будет ослабевать по обратно-квадратичному закону до тех пор, пока не приблизится к отсечке расстояния, где он будет быстро и плавно ослабевать до 0. Подобная отсечка не является физически корректной.

По умолчанию 0.0.

.intensity : Float

Интенсивность источника освещения. По умолчанию 1. Интенсивность это сила света, измеряемая в канделах (кд).

Изменение этого параметра также изменяет мощность.

.isFreeLight : Boolean

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

.isSpotLight : Boolean

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

.penumbra : Float

Процент конуса прожектора, который ослаблен из-за полутени. Принимает значения от нуля до 1. По умолчанию 0.0.

.position : Vector3

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

.power : Float

Мощность источника. Мощность это световой поток источника освещения, измеряемый в люменах (лм).

Изменение этого параметра также изменяет интенсивность.

.shadow : SpotLightShadow

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

.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 : SpotLight) → SpotLight

Копирует значения всех свойств из source в данный SpotLight.

.dispose()

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

Пазлы

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

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

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