Масштабирование преобразования не работает - PullRequest
0 голосов
/ 05 февраля 2011

Я реализую матрицу преобразования по столбцу, которая выглядит примерно так:

|----------|        |------------|      |------------|
| 0 3 6 9  |        | RS R  R  X |      | RS R  R  X |
| 1 4 7 10 |        | R  RS R  Y |      | R  RS R  Y |
| 2 5 8 11 |        | R  R  RS Z |      | R  R  RS Z |
|----------|        |------------|      | 0  0  0  1 |
                                       |------------|

Я понимаю, что масштабирование должно применяться к позициям 0, 4 и 8, но это не такпохоже на работу.Я устанавливаю ориентацию из кватерниона, устанавливаю соответствующую позицию, а затем пытаюсь умножить при масштабировании на позиции 0, 4 и 8. Когда это преобразование подается в OpenGL, мои фигуры растягиваются и сжимаются и не масштабируются надлежащим образом.Я что-то здесь упускаю, я думал, что масштабирование было простым умножением по диагонали?Мое приложение для ориентации относительно простое, но добавление к нему операции масштабирования приводит к странным эффектам сдвига и сдавливания.Что я делаю не так?

1 Ответ

4 голосов
/ 05 февраля 2011

Матрица масштабирования, которую вы имеете в виду, полезна только для масштабирования или умножения ее на уже существующее преобразование. Как только базовая трансформация не является идентичностью, факторы продажи применяются ко всему верхнему левому углу 3x3. Просто оцените умножение

/ Rxx Rxy Rxz \   / Sx  0  0  \
| Ryx Ryy Ryz | * |  0 Sy  0  |
\ Rzy Rzy Rzz /   \  0  0  Sz /

=

/ Rxx·Sx Rxy·Sy Rxz·Sz \
| Ryx·Sx Ryy·Sy Ryz·Sz |
\ Rzx·Sx Rzy·Sy Rzz·Sz /
...