Трансформации объектов: позиция, ориентация, размер

Позиция: Где находится объект? 🎯

Представь, что твой игровой объект — это точка в пространстве. Чтобы точно сказать, где он находится, нам нужна система координат!

В большинстве игровых движков используется трёхмерная система координат с тремя осями:

  • X — горизонтальная ось (влево/вправо)
  • Y — вертикальная ось (вверх/вниз)
  • Z — ось глубины (вперёд/назад)

Позиция объекта записывается как вектор из трёх чисел:

position = (x, y, z)

Например, если объект находится в точке (2, 5, 3), это значит:

  • 2 единицы вправо по оси X
  • 5 единиц вверх по оси Y
  • 3 единицы вперёд по оси Z

Задача: Перемещение персонажа

Персонаж находится в точке (0, 0, 0). Нужно переместить его на 3 единицы вправо и на 2 единицы вверх. Какая будет новая позиция?

Решение:

  1. Начальная позиция: (0, 0, 0)
  2. Изменение по X: +3
  3. Изменение по Y: +2
  4. Новая позиция: (0 + 3, 0 + 2, 0) = (3, 2, 0)

Ориентация: Куда смотрит объект? 🧭

Ориентация определяет, как объект повёрнут в пространстве. Для этого чаще всего используются углы Эйлера:

  • Pitch — вращение вокруг оси X (наклон вверх/вниз)
  • Yaw — вращение вокруг оси Y (поворот left/right)
  • Roll — вращение вокруг оси Z (вращение вокруг своей оси)
Совет: Запомни эти углы как движения самолёта 🛩️ — pitch (тангаж), yaw (рыскание), roll (крен).

Ориентация также записывается как вектор трёх углов:

rotation = (pitch, yaw, roll)

Вращение обычно измеряется в градусах, где:

  • 0° — начальное положение
  • 90° — поворот на четверть
  • 180° — поворот на половину
  • 360° — полный оборот

Задача: Поворот камеры

Камера смотрит прямо (углы (0, 0, 0)). Нужно повернуть её на 45° вправо и на 30° вверх. Какие будут новые углы?

Решение:

  1. Поворот вправо — это изменение yaw: +45°
  2. Поворот вверх — это изменение pitch: +30°
  3. Новая ориентация: (0 + 30, 0 + 45, 0) = (30, 45, 0)

Размер: Насколько объект большой? 📏

Размер (масштаб) определяет, насколько объект увеличен или уменьшен относительно своего исходного размера.

Масштаб также представляется вектором трёх чисел:

scale = (scale_x, scale_y, scale_z)

Значения масштаба интерпретируются так:

  • 1.0 — исходный размер (100%)
  • 2.0 — увеличение в 2 раза (200%)
  • 0.5 — уменьшение в 2 раза (50%)
  • -1.0 — зеркальное отражение
Важно: Масштаб можно применять неравномерно по разным осям! Например, можно растянуть объект только по высоте.

Задача: Изменение размера

Куб имеет исходный размер (1, 1, 1). Нужно увеличить его в 2 раза по ширине и уменьшить в 3 раза по высоте. Каким будет новый масштаб?

Решение:

  1. Исходный масштаб: (1, 1, 1)
  2. По ширине (X): 1 × 2 = 2
  3. По высоте (Y): 1 ÷ 3 ≈ 0.333
  4. Новый масштаб: (2, 0.333, 1)

Матрица трансформации: Всё вместе! 🔄

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

Матрица 4×4 содержит всю информацию об преобразовании объекта:

Компонент Что хранит
Вращение + Масштаб Верхняя левая часть 3×3
Позиция Последний столбец (первые 3 элемента)

Преимущество матрицы в том, что можно применять все преобразования одновременно одной операцией!

На практике тебе редко придётся работать с матрицами вручную — движок сделает это за тебя. Но понимать принцип очень важно!

Практическое применение в Unity/Unreal

В популярных движках эти концепции реализованы через компоненты:

  • Unity: Transform component с полями Position, Rotation, Scale
  • Unreal: Actor Transform с теми же полями

Пример кода в Unity (C#) для перемещения объекта:

// Перемещение на 5 единиц вправо
transform.position += new Vector3(5, 0, 0);

// Поворот на 90 градусов вокруг оси Y
transform.Rotate(0, 90, 0);

// Увеличение в 2 раза
transform.localScale *= 2;

Итоговый практикум 🎮

Создай ментальную модель простого игрового объекта:

  1. Начальное состояние: позиция (0, 0, 0), вращение (0, 0, 0), масштаб (1, 1, 1)
  2. Перемести объект на (5, 2, 3)
  3. Поверни на (0, 45, 0) (на 45° вправо)
  4. Увеличь в 1.5 раза по всем осям
  5. Перемести ещё на (-2, 0, 1)
Скрыть рекламу навсегда

🎥 YouTube: программирование простым языком

Канал, где я спокойно и по шагам объясняю сложные темы — без заумных терминов и лишней теории.

Подходит, если раньше «не заходило», но хочется наконец понять.

▶️ Смотреть курсы на YouTube