SpotLight - Руководство по Вердж3Д - Софт Эйт Софт
Description: Узнайте как использовать SpotLight в интерактивных 3Д-веб-приложениях сделанных на Вердж3Д

Object3D → Light →

# 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 : Float, penumbra : Float, decay : Float)

- color — (необ.) шестнадцатеричный цвет света. По умолчанию `0xffffff` (белый).
- intensity — (необ.) числовое значение силы/интенсивности света. По умолчанию `1`.
- distance — максимальная дальность действия света. По умолчанию `0` (без ограничения).
- angle — максимальный угол рассеивания света от его направления, верхняя граница которого равна Math.PI/2.
- penumbra — процент конуса прожектора, который ослаблен из-за полутени. Принимает значения от `0` до `1`. По умолчанию `0`.
- decay — величина ослабления света в зависимости от расстояния до него.

Создает новый 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) → this

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

### # .dispose()

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

## Пазлы

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

- create object — выберите light, затем spot.
- set light param — для установки различных параметров источника.
- get light param — для получения параметров источника.

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

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