@msuprunenko
C/C++ DirectX

Зачем нужны матрицы в Direct3D?

Зачем нужны матрицы в Direct3D? Можно ли их заменить массивами?
  • Вопрос задан
  • 450 просмотров
Решения вопроса 3
@Joysi75
Число, вектор и матрица - это все массивы. Просто размерности разные. Матрица по сути можно представить как двумерный вектор (двумерный массив). Конечные матрицы естественно можно заменить векторами (одномерными массивами) - например, матрица 3х3 заменяется вектором из 9-ти элементов. Но со временем, оперировать матрицами Вы привыкнете и они будут для Вас нагляднее.

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

Я рекомендую Вам почитать побольше про матрицы. Для многих действий с ними хватает и знаний средней школы.

Например, habrahabr.ru/post/131931
Ответ написан
GavriKos
@GavriKos
В теории - можно. Но через матрицы - в разы удобнее. Математика становится проще. Почитайте про "матрицы трансформации".
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
Начнём с того, что вектор имеет три координаты: x, y и z. Все повороты системы координат (x, y, z) → (x', y', z'), масштабирования и их комбинации можно записать в виде

x' = a11·x + a12·y + a13·z
y' = a21·x + a22·y + a23·z
z' = a31·x + a32·y + a33·z

А теперь прочитайте, что такое «умножить матрицу на вектор». Узнаёте? — матрицу {aij} размером 3×3 умножаем на вектор-столбец (x, y, z)T и получаем вектор-столбец (x', y', z')T. Здесь буква T — это операция «транспонировать матрицу», заменить строки столбцами, а столбцы — строками.

А теперь сделаем финт ушами. Возьмём 4-векторы (r, s, t, d) и обозначим x=r/d, y = s/d, z = t/d (так называемые однородные координаты). Преобразование в однородные координаты неоднозначно: декартовы координаты (1, 2, 3) можно обозначить как четвёркой (1, 2, 3, 1), так и четвёркой (10, 20, 30, 10). Для чего нам однородные? Матрицы 4×4, работающие над однородными координатами, позволяют записать и такие преобразования, как «сдвинуть» или «центральная проекция». Например, «сдвинуть» записывается как

r' = 1·r + shiftx·d
s' = 1·s + shifty·d
t' = 1·t + shiftz·d
d' = d

или, в терминах матриц
[r']   ( 1 0 0 shiftx )   [r]
[s'] = ( 0 1 0 shifty ) · [s]
[t']   ( 0 0 1 shiftz )   [t]
[d']   ( 0 0 0 1      )   [d]

(тут я не поленился собрать тэгом code нечто похожее на вектор-столбец, так что знак транспонирования не нужен :)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kezel
как тогда без матриц расщетать перспективу и положения костей анимации меша? каждую вершину в ручную перебирать?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы