Что такое матрица 4×4 в трехмерных играх?

Когда я впервые столкнулся с преобразованием координат в программировании игр — это был, мягко говоря, шок. Высшую математику в техникуме я усердно прогуливал, а если присутствовал, то только для галочки. Потому что мне неинтересно вручную рисовать матрицы, потом их умножать, транспонировать, инвертировать и находить детерминант или определитель.

Ну согласитесь — нормального человека нельзя заставить умножать и складывать 32 числа непонятно для какой цели.. Тупо делать это только ради оценки в журнале. Я так не умею, а Вы?

Итак, что же такое матрица 4×4? Какую роль она играет в трехмерных играх? Зачем эти 16 чисел складывать и умножать? СКАНДАЛЫ, ИНТРИГИ, РАССЛЕДОВАНИЯ.. Читайте дальше в моем журнале после короткой рекламы.

Рассмотрим абстрактную матрицу, в которой злой гений зашифровал положение объекта в трехмерном мире:

M=\begin{bmatrix}A&E&I&M\\B&F&J&N\\C&G&K&O\\D&H&L&P\end{bmatrix}

Начнем расшифровку.. В матрице присутствуют три вектора, вот они перед Вами:

\vec{X}=(A, B, C)
\vec{Y}=(E, F, G)
\vec{Z}=(I, J, K)

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

Рассмотрим такую матрицу:

M=\begin{bmatrix}2&0&0&M\\0&3&0&N\\0&0&0.5&O\\D&H&L&P\end{bmatrix}

Что следует из этой матрицы? Во-первых, по X объект увеличен в два раза, по Y в три раза, по Z уменьшен в два раза.

Смотрим дальше. Числа M, N и O — это смещение объекта вдоль этих векторов (по X, Y и Z соответственно).

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

Ссылка на подробный обзор матриц и операций на ними из комментариев: http://www.opengl-tutorial.org/ru/beginners-tutorials/tutorial-3-matrices/

Дефлекторы на окна для Nissan Note. Покупка и установка в Петербурге

Решил поставить дефлекторы себе на машину. Самому устанавливать лень, заказывать и ждать в Экзисте долго, зато дешево. А я хочу прям сегодня и сейчас. Обзвонил дилеров в Санкт-Петербурге, выкладываю цены:

Nissan RRT цена 3500 руб., установка: 840 руб. (мойка машины бесплатно)
Nissan CTK цена 3390 руб., установка 1400 руб. (мойка машины бесплатно)
Aurore Auto цена 3465 руб., установка 1740 руб. (мойка машины бесплатно)
Автопродикс цена (примерно) 3500 руб., установка 900 руб. (мойка 280 руб.)
exist.ru цена 3190 руб., установка своими руками, доставка 20 дней

Код дефлекторов, если кому надо: H0800-9U060.

Читайте также про установку оригинальных брызговиков и замену лампочки в заднем «бумеранге».

Гардарики

Вы никогда не задумывались почему Новгород называют Новгородом? То есть «Новый Город»? А старый тогда где?

Не поленился, полез в википедию читать про Новгород и нашел такую информацию:
На роль такого «Старого города», иногда отождествляемого с эпическим Словенском, предполагают несколько поселений, среди которых самые вероятные — Рюриково городище и поселение на месте будущего Славенского конца.

А «Гардарики» — это в переводе со скандинавского «страна городов». Википедия говорит, что, возможно, так называли Новгородскую землю.

Вы знали об этом? Мне как-то ни разу в голову не пришло, почему именно «Нов-город», а ведь слышал много раз. Даже бывал там полтора-два года назад проездом. Вот такие дела, век живи — век учись.

Создание правильного полигона для Box2D

Движок Box2D используется для симуляции физики в двумерном пространстве. Из фигур он поддерживает сферу (круг), бокс (прямоугольник) и выпуклый полигон (с внутренними углами больше 1-10 градусов, иначе будет падение с ошибкой).

Что же делать, если надо нарисовать этот полигон от руки и скормить Box2D, чтоб он не рухнул?

Можно нарисовать составной полигон в виде множества сфер и боксов. Так, например, сделана фигура танка для демки движка NeoAxis Game Engine (этот движок трехмерный, но проблемы с физикой такие же)

Но у меня такой возможности не было, поэтому я скармливал физике предварительно триангулированный полигон, алгоритм решения очень простой:

  • берем нарисованный полигон
  • разбиваем его на треугольники (этот процесс называется триангуляция, в интернете можно найти множество решений этой задачи)
  • (опционально) склеиваем получившиеся треугольники в выпуклые полигоны

Третий пункт — это просто оптимизация. Делать его необязательно, реализуется простым перебором всех треугольников.

  • находим два треугольника со смежной стороной (две точки должны быть общими)
  • сливаем их в один полигон
  • проверяем на выпуклость (внутренние углы должны быть меньше 180)

И еще один момент: если угол между сторонами полигона равен 180 градусам, можно удалить точку, общую для обеих сторон.

Блог Евгения Жирнова