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

Object3D → Camera →

# PerspectiveCamera

Камера, использующая перспективную проекцию.

Этот режим проецирования разработан для имитации того, как видит человеческий глаз. Это самый распространенный режим проецирования, используемый для рендеринга 3Д-сцен.

## Пример

`const aspect = app.getWidth() / app.getHeight(); const camera = new v3d.PerspectiveCamera(45, aspect, 1, 1000); camera.position.z = 5; app.scene.add(camera); app.setCamera(camera);`

## Конструктор

### PerspectiveCamera(fov : Float, aspect : Float, near : Float, far : Float)

- fov — вертикальное поле зрения пирамиды обзора камеры
- aspect — соотношение сторон пирамиды обзора камеры
- near — ближайшая плоскость пирамиды обзора камеры
- far — дальняя плоскость пирамиды обзора камеры

Вместе они определяют усечённую пирамиду обзора камеры.

## Свойства

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

### # .aspect : Float

Соотношение сторон пирамиды обзора камеры, обычно равно отношению ширина холста / высота холста. По умолчанию `1` (квадратный холст).

### # .far : Float

Дальняя плоскость отсечения пирамиды видимости камеры. По умолчанию `2000`.

Должно быть больше, чем текущее значение плоскости near.

### # .filmGauge : Float

Размер фотопленки, используемый для большей оси. По умолчанию `35` (миллиметров). Этот параметр не влияет на матрицу проекции, если .filmOffset не установлен в ненулевое значение.

### # .filmOffset : Float

Горизонтальное смещение от центра в тех же единицах, что и .filmGauge. По умолчанию `0`.

### # .focus : Float

Расстояние до объекта, используемое для стереоскопии и эффектов глубины резкости. Этот параметр не влияет на матрицу проекции, если не используется StereoCamera. По умолчанию `10`.

### # .fov : Float

Вертикальное поле зрения пирамиды обзора камеры, снизу вверх, в градусах. По умолчанию `50`.

### # .isPerspectiveCamera : Boolean

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

### # .near : Float

Ближняя плоскость отсечения пирамиды видимости камеры. По умолчанию `0.1`.

Допустимый диапазон больше 0 и меньше текущего значения плоскости far. Обратите внимание, что в отличие от OrthographicCamera, `0` является не допустимым значением для ближней плоскости PerspectiveCamera.

### # .view : Object

Спецификация окна пирамиды обзора или `null`. Устанавливается с помощью метода .setViewOffset и очищается с помощью .clearViewOffset.

### # .zoom : number

Получает или устанавливает коэффициент масштабирования камеры. По умолчанию `1`.

## Методы

Общие методы смотрите в базовом классе Camera.

### # .clearViewOffset()

Удаляет любое смещение, установленное методом .setViewOffset.

### # .getEffectiveFOV() → Float

Возвращает текущий вертикальный угол поля зрения в градусах с учетом .zoom.

### # .getFilmHeight() → Float

Возвращает высоту изображения на пленке. Если .aspect меньше или равно единице (портретный формат), результат равен .filmGauge.

### # .getFilmWidth() → Float

Возвращает ширину изображения на пленке. Если значение .aspect больше или равно единице (альбомный формат), результат равен .filmGauge.

### # .getFocalLength() → Float

Возвращает фокусное расстояние текущего .fov по отношению к .filmGauge.

### # .setFocalLength(focalLength : Float)

Устанавливает FOV по фокусному расстоянию относительно текущего .filmGauge.

По умолчанию фокусное расстояние задается для 35-мм (полнокадровой) камеры.

### # .setViewOffset(fullWidth : Float, fullHeight : Float, x : Float, y : Float, width : Float, height : Float)

- fullWidth — полная ширина многообзорной конфигурации
- fullHeight — полная высота многообзорной конфигурации
- x — горизонтальное смещение подкамеры
- y — вертикальное смещение подкамеры
- width — ширина подкамеры
- height — высота подкамеры

Устанавливает смещение в более крупной пирамиде обзора. Это полезно для создания многооконных или многомониторных конфигураций.

Например, если у вас 3x2 монитора и каждый монитор имеет разрешение 1920x1080, а мониторы расположены в сетке следующим образом:

        +---+---+---+
        | A | B | C |
        +---+---+---+
        | D | E | F |
        +---+---+---+

тогда для каждого монитора вы будете вызывать данный метод следующим образом:

`const w = 1920; const h = 1080; const fullWidth = w * 3; const fullHeight = h * 2; // A camera.setViewOffset(fullWidth, fullHeight, w * 0, h * 0, w, h); // B camera.setViewOffset(fullWidth, fullHeight, w * 1, h * 0, w, h); // C camera.setViewOffset(fullWidth, fullHeight, w * 2, h * 0, w, h); // D camera.setViewOffset(fullWidth, fullHeight, w * 0, h * 1, w, h); // E camera.setViewOffset(fullWidth, fullHeight, w * 1, h * 1, w, h); // F camera.setViewOffset(fullWidth, fullHeight, w * 2, h * 1, w, h);`

Обратите внимание, что мониторы не обязательно должны быть одинакового размера или располагаться в виде сетки.

### # .updateProjectionMatrix()

Обновляет матрицу проекции камеры. Метод должен вызываться после любого изменения параметров камеры.

## Пазлы

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

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

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