Компьютерная графика | |||||||
теория, алгоритмы, примеры на С++ и OpenGL | |||||||
2D теория | 3D теория | OpenGL | Обратная связь / Авторам | ||||
Мы vkontakte.ru ДрузьяСловарь синонимов русского языка |
Векторы в пространстве. Однородные координаты. Матрицы преобразованийВектор в трехмерном пространствеВектор в трехмерном пространстве определяется тремя координатами p(x, y, z). При рассмотрении двумерных преобразований вводились однородные координаты. Также будет удобно ввести их при рассмотрении трехмерного пространства. Как мы увидим в дальнейшем, их использование позволяет задавать аффинные и нелинейные преобразования (например перспективное) в виде матриц, что позволяет создавать весьма эффективные и простые реализации. Прим. В последующих статьях будут встречаться такие понятия как точка и вектор. Точка это тоже вектор: если совместить его начало с началом координат, то конец будет находиться в определяемой им точке. Но также существуют вектора в классическом смысле, например вектор нормали. О чем конкретно идет речь будет понятно из контекста. В рамках данной статьи вектор подразумевается в смысле вектор-точка. Однородные координатыОпределение. Однородные координаты — координаты, обладающие тем свойством, что определяемый ими объект не меняется при умножении всех координат на одно и то же число. Однородными координатами вектора (х, у, z) является тройка чисел (x', y', z', w), где х = х' / w, у = y' / w, z = z' / w, а w — некоторое вещественное число (случай, когда w = 0 является особым). Данные координаты не позволяют однозначно
задать точку пространства. Например, (1, 1, 1, 1) и (2, 2,
2, 2) задают одну и ту же точку (1, 1, 1). При переходе к однородным координатам для точки с координатами (x, y, z) предлагается взять набор (x,
y, z, 1).
Матрицы преобразований в трехмерном пространствеМатрица преобразования для
однородных координат имеет размер 4х4. Рассмотрим пример матричного преобразования
в однородных координатах.
| 2 0 0 1 |
M = | 0 3 0 2 |
| 0 0 1 -1 |
| 0 0 0 1 |
x' = 2 * x + 1
y' = 3 * y + 2
z' = 1 * z – 1
w' = 1
Данная
матрица определяет следующее преобразование: растяжение по оси x в два раза, по оси у в три раза и перенос на вектор (1, 2, -1). При этом матрица M применяется
к вектору-столбцу слева:
| M11 M12 M13 M14 | | px |
| M31 M32 M33 M34 | | pz |
| M41 M42 M43 M44 | | 1 |
Заметим, что вектор p' также представляет собой вектор-столбец. На самом деле возможны две, равноправные с точки зрения математики, записи: 1) Вектор записывается как столбец: | 2 0 0 1 | | x | | 2 * x + 1 |
| 0 3 0 2 | * | y | = | 3 * y + 2 |
| 0 0 1 -1 | |
z | | 1 * z – 1 |
| 0 0 0 0 | | 1 | | 1 |
2) Вектор
записывается как строка, матрица транспонируется:
| 2 0 0 0 |
| x y z 1 | * | 0 3 0 0 |
| 0 0 1 0 |
| 1 2 -1 0 |
= | 2 * x + 1 3
* y + 2 1 * z – 1 1
|
C точки зрения самого преобразования эти записи эквивалентны. Какую из них использовать – это вопрос договоренности. На практике, и в OpenGL и в DirectX используется первый вариант, с учетом того, что матрицы укладываются в памяти по столбцам. Т.е. матрица | M11 M12 M13 M14 |
| M21 M22 M23 M24 |
| M31 M32 M33 M34 |
| M41 M42 M43 M44 |
в линейной памяти будет выглядеть следующим образом: M11 M21 M31 M41 M12 M22 M32 M42 M13 M23 M33 M43 M14 M24 M34 M44
В трехмерной математике также принято использовать первый вариант записи. Прим. Иногда, в теоретическом разделе будут встречаться похожие вставки, относящиеся к практике. В основном это будет касаться принятых обозначений. Матрица не аффинного преобразования
Продемонстрируем матрицу, которая не сохраняет параллельность прямых (матрицу не аффинного преобразования). Примером может служить простейшая матрица перспективного преобразования, которая будет рассмотрена позже более подробно. Пока что просто покажем, как можно использовать однородные координаты для записи нелинейных преобразований. | 1 0 0 0 |
Mproj = | 0 1 0 0 |
| 0 0 1 0 |
| 0 0 -1 0 |
| x | | x | pproj = Mproj * p = Mproj * | y | = | y | | z | | z | | 1 | | -z | pproj = ( -x / z, -y / z, -1, 1 ) Прим. Последняя строка как раз и определяет вид изменений w-координаты исходного вектора. Резюме
В
этой статье мы ввели основные математические объекты и договоренности о записи,
которые понадобятся нам для построения дальнейшей теории. Более сложные
объекты, например, кватернионы, будут
введены и подробно описаны в отдельной главе.
Далее нам потребуются следующие вещи, непосредственно связанные с матрицами:
Они будут подробно рассмотрены в последующих статьях. |