В библиотеке Three.js камера определяет точку
зрения, с которой сцена отображается на экране. Камера задаёт проекцию
сцены, положение и направление обзора, а также влияет на восприятие
перспективы. Различают несколько основных типов камер, каждая из которых
предназначена для специфических задач.
PerspectiveCamera
PerspectiveCamera создаёт перспективную проекцию,
имитируя работу человеческого глаза: объекты, находящиеся дальше,
кажутся меньше, а ближние — крупнее. Этот тип камеры используется для
большинства 3D-сцен, где важна реалистичная перспектива.
Конструктор и параметры
const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
- fov — угол обзора по вертикали в градусах. Чаще
всего используется значение 50–75.
- aspect — соотношение ширины к высоте экрана
(
window.innerWidth / window.innerHeight).
- near — ближняя плоскость отсечения. Всё, что ближе
этого расстояния, не будет видно.
- far — дальняя плоскость отсечения. Всё, что дальше
этого расстояния, также не будет отображаться.
Применение
- Визуализация 3D-игр и интерактивных сцен.
- Архитектурные и инженерные модели.
- Сценарии с реалистичной глубиной и перспективой.
Основные свойства и методы
- position — положение камеры в пространстве.
- lookAt(vector3) — направляет камеру на указанную
точку.
- updateProjectionMatrix() — пересчитывает матрицу
проекции при изменении параметров.
OrthographicCamera
OrthographicCamera создаёт ортографическую проекцию,
где размеры объектов не изменяются с расстоянием. Такой тип камеры
полезен для 2D-подобных визуализаций и технических чертежей.
Конструктор и параметры
const camera = new THREE.OrthographicCamera(left, right, top, bottom, near, far);
- left, right, top, bottom — границы видимой области
сцены.
- near, far — ближняя и дальняя плоскости
отсечения.
Применение
- 2D-игры и интерфейсы.
- CAD-моделирование и схемы.
- Миникарты и изометрические игры.
Особенности
- Отсутствует перспективное сжатие объектов.
- Прямые линии остаются прямыми независимо от расстояния.
- Требует точной настройки границ видимой области при изменении
размеров окна.
CubeCamera
CubeCamera используется для создания
кубических карт (cube maps) и отражений. Камера снимает
сцену в шесть направлений (по осям X, Y и Z), формируя текстуру, которую
можно использовать для реалистичных отражающих поверхностей.
Конструктор
const cubeCamera = new THREE.CubeCamera(near, far, resolution);
- near, far — плоскости отсечения.
- resolution — разрешение каждой стороны кубической
текстуры.
Применение
- Отражающие и зеркальные поверхности.
- Динамическое окружение для PBR-материалов.
- Эффекты неба и глобального освещения.
StereoCamera
StereoCamera предназначена для создания
стереоскопического эффекта, где две камеры имитируют глазное
восприятие. Используется для VR-приложений и 3D-эффектов.
Основные параметры
- eyeSep — расстояние между “глазами”.
- Генерирует левый и правый рендер для дальнейшей компоновки в
стереопары.
Применение
- Виртуальная реальность (VR).
- 3D-кино и анимация.
- Иммерсивные приложения с глубиной сцены.
Камеры с управлением
Хотя камеры могут быть статичными, их часто соединяют с
контроллерами, обеспечивающими интерактивное перемещение:
- OrbitControls — вращение и приближение вокруг
объекта.
- FirstPersonControls — управление камерой как в
шутерах от первого лица.
- TrackballControls — свободное вращение и
панорамирование сцены.
Эти контроллеры работают с любым типом камеры, но чаще всего
применяются с PerspectiveCamera.
Основные рекомендации по
выбору камеры
- PerspectiveCamera — универсальный выбор для
реалистичных 3D-сцен.
- OrthographicCamera — подходит для 2D-интерфейсов,
схем и изометрии.
- CubeCamera — для динамических отражений и
окружения.
- StereoCamera — для VR и стереоскопических
эффектов.
Практическая
организация камеры в сцене
- Камера должна быть добавлена в сцену или управляться отдельно через
рендерер.
- Важно следить за aspect ratio, особенно при
изменении размеров окна:
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
- Использование lookAt() позволяет быстро направлять
камеру на объект интереса:
camera.position.set(10, 10, 10);
camera.lookAt(new THREE.Vector3(0, 0, 0));
Взаимодействие камер с
рендерером
Камера напрямую влияет на рендеринг сцены:
renderer.render(scene, camera);
В зависимости от типа камеры и её настроек сцена может выглядеть
полностью по-разному. Правильный выбор камеры и её параметров критичен
для достижения нужного визуального эффекта, будь то реалистичная
перспектива или условная изометрия.
Хотя Three.js предоставляет множество дополнительных
вспомогательных камер и эффектов, понимание основных типов камер и их
назначения является ключевым для любой 3D-разработки.