Object3DCamera

PerspectiveCamera

Камера, использующая perspective projection.

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

Пример

const camera = new v3d.PerspectiveCamera(45, width / height, 1, 1000); app.scene.add(camera);

Конструктор

PerspectiveCamera(fov : Number, aspect : Number, near : Number, far : Number)

fov — Вертикальное поле зрения фрустума камеры.
aspect — Соотношение сторон фрустума камеры.
near — Ближайшая плоскость фруструма камеры.
far — Дальняя плоскость фруструма камеры.

Вместе они определяют viewing frustum камеры.

Свойства

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

.aspect : Float

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

.far : Float

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

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

.filmGauge : Float

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

.filmOffset : Float

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

.focus : Float

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

.fov : Float

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

.near : Float

Фрустум камеры вблизи плоскости. По умолчанию 0,1.

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

.view : Object

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

.zoom : number

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

Методы

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

.clearViewOffset() → null

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

.getEffectiveFOV() → Float

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

.getFilmHeight() → Float

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

.getFilmWidth() → Float

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

.getFocalLength() → Float

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

.setFocalLength(focalLength : Float) → null

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

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

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

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() → null

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

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

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