• Пт. Апр 19th, 2024

Матрицы (Matrix)- матрицы в С типы матриц использование матриц

Автор:lovewp

Июн 18, 2013

матрицы матрица direct3d
Матрицы и определяемые ими трансформации являются одной из основ трёхмерной графики. В предыдущей статье Вектора, матрицы, трансформации я уже рассказывал о матрицах, но очень поверхностно. Теперь мне бы хотелось детально объяснить вам что такое матрицы, из каких элементов они состоят, что эти элементы значат, привести примеры использования матриц, рассказать об умножении матриц, какие матрицы чаще всего используются в графике и играх и как они выглядят, а так же многое другое. Мне бы хотелось, что бы Вы детально разбирались в операциях над матрицами и могли, в случае необходимости, самостоятельно “собрать” нужную вам матрицу, не прибегая к встроенным функциям DirectX, потому как иногда это бывает нужно.

Умножение на матрицу

матрицы матрица direct3d
Как правило, матрица служит для преобразования вектора. Как я уже говорил в предыдущем уроке, каждая Матрица определяет преобразование координат из одной системы координат в другую. Т. е. умножение вектора на матрицу каким-то образом трансформирует вектор, переводя его координаты в другую систему координат. Дабы это Вас не смущало, ещё раз приведу максимально простой пример: считаем центром одной системы координат дверь, а другой системы координат – окно, в этом случае умножив координаты любого предмета, посчитанные относительно двери на матрицу преобразования из системы координат двери в координаты окна,
матрицы матрица direct3d
мы получим координаты предметы относительно окна (т. е. в системе координат окна). В общем, всё просто. Справа Вы видите полную формулу умножения вектора на матрицу – именно по ней считаются все преобразования, математика уровня 6го класса средней школы )))

Типы матриц

Не следует понимать заголовок этой части текста так, будто есть совершенно разные и особенные типы матриц, которые чем-то совершенно уникальны. Я называю их типами просто для удобства – на самом деле матрица, она и есть матрица и отличаются матрицы лишь значениями их отдельных элементов, не более того. При этом так же надо что бы Вы понимали, что я стараюсь объяснять “на пальцах”, так, что бы понял каждый – с математической точки зрения всё, мягко говоря, несколько сложнее. Я же лишь просто расскажу и покажу то, что Вам нужно знать для того, что бы Вы могли не испытывать особых трудностей с матричной арифметикой и могли понимать как работают преобразования вертексов/моделей/нормалей и т. д. в ваших программах.

Итак, матрицы можно разделить на четыре условных типа:

Матрицы сдвига Матрицы вращения Матрицы масштабирования Прочие матрицы (например, перспективные или комбинированные из первых трёх типов)

Матрицы сдвига (Translate Matrix)

Матрицы сдвига это самое простое, что только можно себе представить. Они задают просто “сдвиг” по каждой из осей координат на определённое значение. Этот сдвиг хранится в нижней строке матрицы (в первых трёх её значениях, которые выше обозначены как М41, М42, М43). Если мы зададим в них, например (0, 10, 99), то в результате трансформации любого вектора этой матрицей, он сдвинется на 0 по оси X, на 10 по оси Y и на 99 по оси Z. Мне кажется, совсем не сложно, правда же?

Матрицы масштабирования (Scale Matrix)

Что делают матрицы этого типа, тоже совсем несложно догадаться – они масштабируют. Коэффициенты масштабирования вдоль каждой оси задаются диагональными элементами матриц: М11 для оси X, М22 для оси Y и М33 для оси Z.

Матрицы вращения (Rotate Matrix)

Этот тип матриц несколько сложнее, чем предыдущие. Потому и понять его надо получше, разобраться что к чему и из чего оно следует. Для вращения 2х-мерного вектора, как известно, используется такая формула:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *