OrthographicCamera: параметры и область применения

OrthographicCamera — это тип камеры в Three.js, обеспечивающий ортографическую проекцию, при которой объекты не уменьшаются с увеличением расстояния от камеры. В отличие от перспективной камеры (PerspectiveCamera), ортографическая камера сохраняет параллельность линий и одинаковый масштаб объектов вне зависимости от их глубины, что делает её незаменимой для технических визуализаций, 2D-панелей и изометрических игр.


Создание OrthographicCamera

Конструктор камеры имеет следующий синтаксис:

const camera = new THREE.OrthographicCamera(left, right, top, bottom, near, far);

Параметры:

  • left — координата левой границы видимой области.
  • right — координата правой границы.
  • top — координата верхней границы.
  • bottom — координата нижней границы.
  • near — ближняя плоскость отсечения (объекты ближе не рендерятся).
  • far — дальняя плоскость отсечения (объекты дальше не рендерятся).

Пример инициализации камеры для сцены с размером 800x600 пикселей:

const aspect = 800 / 600;
const frustumSize = 10;

const camera = new THREE.OrthographicCamera(
    frustumSize * aspect / -2,
    frustumSize * aspect / 2,
    frustumSize / 2,
    frustumSize / -2,
    0.1,
    1000
);
camera.position.set(10, 10, 10);
camera.lookAt(0, 0, 0);

Принцип работы

Ортографическая камера использует ортогональную матрицу проекции, которая определяет видимую область в виде параллелепипеда (frustum). Все объекты в пределах этого параллелепипеда отображаются без перспективного искажения.

Основные особенности:

  • Отсутствие перспективы — линии остаются параллельными.
  • Постоянный масштаб — объекты не уменьшаются с увеличением расстояния.
  • Прямолинейная область видимости — frustum определяется координатами left, right, top, bottom, near, far.

Настройка области видимости

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

camera.left = -5;
camera.right = 5;
camera.top = 5;
camera.bottom = -5;
camera.updateProjectionMatrix();

Метод updateProjectionMatrix() обязателен после изменения параметров камеры, иначе сцена не будет корректно отображаться.


Сравнение с перспективной камерой

Параметр OrthographicCamera PerspectiveCamera
Перспектива Нет Есть
Масштаб объектов Постоянный Зависит от расстояния
Параллельность линий Сохраняется Преломляется
Применение Техническая визуализация, 2D 3D сцены, игры, VR

Применение OrthographicCamera

  1. Технические и инженерные визуализации Используется для отображения чертежей, схем, CAD-моделей, где важна точная геометрия без искажений.

  2. 2D-графика и UI в 3D-сцене Ортографическая камера позволяет разместить интерфейсные элементы поверх 3D сцены без перспективного искажения.

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

  4. Архитектурные визуализации Позволяет проектировать и визуализировать здания в точном масштабе.


Работа с aspect ratio

Aspect ratio (отношение ширины к высоте) критически важно для корректного отображения сцены. Обычно используется формула:

const aspect = window.innerWidth / window.innerHeight;
const frustumSize = 20;

camera.left = -frustumSize * aspect / 2;
camera.right = frustumSize * aspect / 2;
camera.top = frustumSize / 2;
camera.bottom = -frustumSize / 2;
camera.updateProjectionMatrix();

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


Панорамирование и масштабирование

Ортографическая камера хорошо комбинируется с OrbitControls для:

  • Панорамирования (controls.pan())
  • Масштабирования через изменение zoom
camera.zoom = 2; 
camera.updateProjectionMatrix();

Увеличение значения zoom приближает сцену, уменьшая — отдаляет, при этом форма объектов не искажается.


Ограничения

  • Неподходящая для имитации реальной перспективы и глубины сцены.
  • Ограниченное ощущение пространства при работе с 3D-моделями.
  • Требует корректного расчета frustum при изменении размеров окна.

OrthographicCamera является незаменимым инструментом для точной визуализации, интерфейсов и изометрических сцен, где перспективное искажение нежелательно, а контроль над областью видимости и масштабом объектов — критичен. Ее параметры позволяют гибко управлять фреймами сцены и адаптироваться под любые размеры viewport, обеспечивая строгую геометрическую точность.