Матричные преобразования

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
FloyDos
Сообщения: 25
Зарегистрирован: 14 июн 2009, 16:08

На вскидку, ссылка

http://www.fvn2009.narod.ru/Manuscripts ... edule6.htm

И так практически везде.
Почему необходимо оперировать матрицами 4x4?
Ведь, если 3х3 оставить, то же самое будет.

И вообще, зачем единица четвертой координатой?
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

На этом же сайте объясняется, применительно к плоскости: http://www.fvn2009.narod.ru/Manuscripts ... edule5.htm
Коротко говоря, "лишняя" размерность нужна, чтобы сделать преобразования однородными, т.е. чтобы не только вращения и масштабирование, но и сдвиги можно было представлять в матричной форме. А современные графические процессоры "заточены" на матричные вычисления.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Это во многом зависит от конкретной графической библиотеки. Так в Microsoft Direct3D используются матрицы размерностью 4х4, а в CATIA SDK, которая построена на OpenGL, в основном используются матрицы 3х3.
Если тебе слишком неудобно пользоваться матрицами 4х4, то можешь написать небольшую функцию-переходник, которая будет преобразовывать матрицы 3х3 в матрицы 4х4. Т.е. в основном коде программы все преобразования будут делаться с матрицами 3х3, а когда необходимо будет вызвать библиотечную функцию и передать ей матрицу 4х4, то воспользуйся для этого своей переходной функцией.
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

WinMain, это не совсем так. В одной графической библиотеке могут использоваться как матрицы 3х3, так и 4х4. В том же CATIA SDK, который ты упомянул, именно так и есть.
Суть в том, что элементарные аффинные преобразования (сдвиг, перенос, вращение, масштабирование) можно описывать в матрице 3х3, а вот сложные (комбинированные) преобразования описываются матрицей 4х4. Их конечно можно разложить на последовательность элементарных преобразований и выполнить одно за другим, но удобнее всё-таки сделать это в одном действии.
Поумнеть несложно, куда труднее от дури избавиться.
Ответить