Object3DCamera

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)

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

Свойства

Смотрите свойства базового класса 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)

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

Например, если у вас 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()

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

Пазлы

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

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

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