Порядок множення матриці перетворення


21

У мене виникають труднощі, намагаючись визначити правильний порядок множення для кінцевої матриці перетворення. Я завжди отримую або дивний рух, або спотворену геометрію. Моя поточна модель пояснюється нижче:

Для одного вузла мій порядок множення:

L = S * R * T

де

L = матриця локального перетворення

S = матриця локального масштабу

R = матриця локального обертання

T = матриця локального перекладу

Для світового перетворення вузла:

W = PW * L

де

W = матриця перетворення світу

PW = матриця трансформації батьківського світу

L = матриця локального перетворення, обчислена вище

Під час надання, для кожного вузла я обчислюю матрицю:

MV = Inv (C) * NW

де

MV = матриця перетворення модельного виду для конкретного вузла

Inv (C) = матриця зворотного перетворення камери

NW = матриця перетворення світового вузла, обчислена вище.

Нарешті, у шейдері у мене є наступна трансформація:

TVP = PRP * MV * VP

де

TVP = остаточне перетворене вершинне положення

PRP = перспективна матриця

MV = матриця трансформації світового вузла, обчислена вище

VP = неперетворене положення вершини.

У сучасній моделі дочірні вузли, які мають локальне обертання, дивно обертаються при перетворенні камери. Де я помилився з порядком множення?

Відповіді:


37

Будь-яка комбінація замовлення S*R*Tдає дійсну матрицю перетворення. Однак досить часто спершу масштабувати об’єкт, потім обертати його, а потім перекладати:

L = T * R * S

Якщо ви не зробите це в такому порядку, то на нерівномірне масштабування вплине попереднє обертання, що зробить ваш об’єкт викривленим. І на обертання буде впливати переклад, що зробить остаточне положення вашого об'єкта дуже відмінним від того, яке значення перекладу змусить вас очікувати.


Чи можете ви пояснити це трохи більше? З того, до чого я звик, на обертання не може вплинути переклад, оскільки це різниця в орієнтації між двома кадрами, незалежно від положення. Натомість на переклад може вплинути обертання, що відбувається перед ним, оскільки він перекладеться на щойно визначену вісь обертання. У L = TRS переклад відбувається спочатку, тому на нього не впливають нові вектори, створені обертанням.
користувач-2147482637

4
Плутанина виникає з того, що ви говорите про локальні перетворення (де кадр залишається пов'язаним з об'єктом), тоді як описані тут перетворення відбуваються у світовому просторі (де є лише одна фіксована система відліку, світ). Концептуально ваш спосіб бачення речей є дійсним, і він рівносильний застосуванню перетворень у зворотному порядку.
sam hocevar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.