Войти
ПрограммированиеФорумОбщее

Инверсия матрицы 4x4 (комментарии)

Страницы: 1 2 3 4 5 6 Следующая »
#0
14:39, 25 янв. 2020

Инверсия матрицы 4x4 (комментарии)

Это сообщение сгенерировано автоматически.
#1
(Правка: 14:57) 14:39, 25 янв. 2020

Есть быстрая инверсия для частных случаев матрицы.
Например, для матрицы трансформации.

#2
17:11, 25 янв. 2020

А можно не считать инверсию матриц. Можно просто на каждом этапе модификации исходной матрицы делать обратные модификации обратной матрицы. Матрицы же с неба обычно не сыпятся, они ж в процессе вычислений обычно формируются. А если и с неба, то не очень часто - считать однократно обратную в момент получения неизвестной матрицы "из внешнего мира", а потом модифицировать сразу пару прямая/обратная.

Для пущей красоты архитектуры иметь в качестве типа не просто матрицу, а сразу объект из прямой и обратной матрицы. И в операции ее умножения также требовать вторым аргументом такую же "двуликую" матрицу, и по возможности для всех последующих операций такие и хранить (если вопрос не стоит об ограничениях памяти).

#3
17:37, 25 янв. 2020

Dmitry_Milk
Ну такое себе. Обратная матрица нужна раз в сто лет. А модификация MVP матрица происходит очень часто.

#4
21:16, 25 янв. 2020
Ниже приведен вариант инверсии для матриц 4x4, где порядок элементов строки горизонтальный (RowMajor).

Бред же. Не важно RowMajor или ColMajor. Доказательтво: умножение матрицы на обратную - дает единичную.
#5
21:17, 25 янв. 2020

@!!ex
> Обратная матрица нужна раз в сто лет
У меня инверсия матрицы в LookAt постоянно используется.
Также инверсия используется при просчете теней.
Так что 1 раз на кадр как минимум используется.

#6
21:20, 25 янв. 2020

eDmk
> У меня инверсия матрицы в LookAt постоянно используется.
Обратные матрицы с ортонормированным базисом ищутся намного быстрее, через транспонирование.

#7
(Правка: 21:25) 21:22, 25 янв. 2020

MrShoor
> Так что 1 раз на кадр как минимум используется.
Я и говорю "раз в сто лет".
Относительно количества изменени матрицы MVP - "один раз за кадр" это "почти никогда".
UPD: Это было сказано в контексте "давайте на каждую операцию изменения матрицы сразу считать промежуточную инверсию для оптимизации". Соотношение вызовов изменения матрицы к получению обратной такое, что такая оптимизация только хуже сделает.

#8
21:22, 25 янв. 2020

>Бред же. Не важно RowMajor или ColMajor.
Ну не бред. Не транспонированная как раз бред показывает в LookAt том же самом.

#9
21:23, 25 янв. 2020

MrShoor
> Обратные матрицы с ортонормированным базисом ищутся намного быстрее, через
> транспонирование.
Пока ничего не нашел.

#10
21:26, 25 янв. 2020

Ты на какое сейчас сообщение отвечаешь?
Код с обратной матрицей должен работать  так, чтобы для случая:
1. Транспонируем
2. Ищем обратную
3. Транспонируем найденную матрицу
И для случая:
1. Сразу ищем обратную матрицу
Выдавать одинаковые результаты. Если это не так, то ты ищешь не обратную матрицу в общем случае, а обрабатываешь какой-то конкретный случай.

#11
21:26, 25 янв. 2020

nes
> вы серьезно?
В подсказки и для новичков сгодится.
Вы погуглите - там такой код «зверский» в сети валяется, что мой просто лапочка :)
У меня лично оптимизация на SIMD работает. В 3,5 раза короче и быстрее.

#12
21:26, 25 янв. 2020

eDmk
> Пока ничего не нашел.
Часть 3x3 с поворотом надо транспонировать. Часть со смещением умножить на минус 1

#13
21:34, 25 янв. 2020
LookAtInverse := MatTranslate(- MyLookAt.Row[3].xyz) * Transpose(MyLookAt.AsMat3x3() );
Как то так.
#14
(Правка: 21:48) 21:44, 25 янв. 2020

MrShoor
Я по книжке делал:

+ Показать

2 точки в мировом пространстве указываешь и он туда смотрит.
+ вектор Up можно крутить и камера также крутится перпендикулярно оси зрения.
Более универсальное решение. Хотя я не спец в этом.

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумОбщее