Компьютерная графика Лекция третья

advertisement
Компьютерная графика
Лекция третья
Тема
Координаты, примитивы, преобразования
Подготовлено А.А.Пименовым
Для 4 курса мат.-мех. СПбГУ в 2006
calvrack@googlemail.com
1
Декартовы и полярные
координаты
• Декартовы
координаты на
плоскости и в
пространстве
• Полярные
координаты
• Цилиндрические
координаты
• Сферические
координаты
2
Крен, Тангаж, Рыскание
крен
рыскание
тангаж
3
Способы задания примитивов
(Линия и Отрезок)
• Две точки
• Параметрическое
задание
• Каноническое
представление
• Как пересечение
плоскостей
4
Способы задания примитивов
(Плоскость)
• Три точки
• Аналитическое
задание
• Задание с нормалью
5
Формулы и операции (векторное
произведение)
6
Формулы и операции
(смешанное произведение)
7
Пересечения и принадлежность
• Параллельные
прямые
• Скрещивающиеся
прямые
• Прямая и плоскость
8
Представление сцены
Мировая система кординат
• Система координат подсцены
Точка
9
Замена системы координат
• Со сдивгом
• Без сдвига
10
Аффинные преобразования
Аффиное преобразоване
сохраняет параллельность и
отношения расстояний
11
Сдвиг, масштабирование
12
Поворот
13
Собственные числа и
геометрический смысл
• Комплексный оператор в С3 имеет
собственное число
• Более того имеет 3 собственных числа
• Одно из них вещественное… если
коэффициенты вещественные
• Ось вращения
14
Перенос
15
Проективные (однородные)
координаты
• Точность
• Удобство
• Возможность представлять
несобственные элементы
a , b , c ⇔[ x : y : z : w ] , гд е
{〛
x
a=
w
y
b=
w
z
c=
w
16
Обобщенные преобразования
X = A∗ x
• Матрица 4x4
X=
X=
b
a 1,1 a 1,2 a 1,3 x a
a 2,1 a 2,2 a 2,3 ∗ y ∗ b
c
a 3,1 a 3,2 a 3,3 z
A
t u v
a
x
b ∗ y
c
z
1
s
17
Перспективные преобразования
• Общее рассуждения про нижнюю строку матрицы
18
Как быстро попарно умножать
вектора?
(x , y ,z ) * (a , b ,c) = ax + by + cz =
(x + b) * (y + a) – yx - ab + cz
Но xy и ab можно считать заранее... !
19
Кватернионы
Гамильтон
q= [cos
2
, sin
2
∗v]
∣q∣= w 2 x 2 y 2 z 2
q ° = [w ,− v ]
°
−1 q
q = 2
∣q∣
∣q∣= 1 ⇒q − 1 = q °
20
Умножение кватернионов
void MulQuaternions(Quaternion *res, const Quaternion *q1, const Quaternion *q2)
{
float A, B, C, D, E, F, G, H;
A = (q1->w + q1->x) * (q2->w + q2->x);
B = (q1->z - q1->y) * (q2->y - q2->z);
C = (q1->x - q1->w) * (q2->y + q2->z);
D = (q1->y + q1->z) * (q2->x - q2->w);
E = (q1->x + q1->z) * (q2->x + q2->y);
F = (q1->x - q1->z) * (q2->x - q2->y);
G = (q1->w + q1->y) * (q2->w - q2->z);
H = (q1->w - q1->y) * (q2->w + q2->z);
res->w = B + (-E - F + G + H) * 0.5;
res->x = A - ( E + F + G + H) * 0.5;
res->y =-C + ( E - F + G - H) * 0.5;
res->z =-D + ( E - F - G + H) * 0.5;
}
21
Матрицы и кватернионы
• 1-2y2-2z2
2xy+2wz
2xz-2wy
2xy-2wz
1-2x2-2z2
2yz+2wx
2xz+2wy
2yz-2wx
1-2x2-2y2
22
Применение кватерниона к
вектору
23
• Скалярное произведение
3 умн, 2 сл
• Векторное произведение
6 умн, 3 сл
• Перемножение двух матриц 3x3
27 умножений и 18
сложений.
• Перемножение двух кватернионов 16 умн и 12 сл. или (8+4) умн
+ 32 сл
• Применение кватерниона к вектору
• Умножение матрицы на вектор
9 умн + 6 сл
• Конвертирование матрицы в кватернион требует 7 сложений и 2
условных перехода.
• Конвертирование кватерниона в матрицу требует 16
умножений 15 сложений и 1 деление.
• Конвертирование матрицы вращения в кватернион, умножение
на другой кватернион, а затем конвертирование обратно в
матрицу потребует 32 умножений 34 сложений 2 условных
перехода и 1 деление.
24
Сферическая линейная
интерполяция
SLERP(t) = (p sin((1–t)a) – q sin(ta)) / sin(a)
где q и p - кватернионы.
t - изменяется от 0 до 1,
a - угол между q и p, cos(a) = (q,p)/(|q|*|p|) = (q,p).
Выводится исходя из линейной комбинации, единичной длинны и угла
При малых углах используют обычную интерполяцию.
25
Преборазование нормали
n∗
x
p
n∗
n
x− p = 0
A∗ x
A∗ p
−1
A ∗ A x− p = 0⇒
−1
n∗ A
26
Несколько замечаний
• О физике при повороте и
кватернионе в степени
• О площади многоугольника
S P=
1
2
n− 1
∑i= 0
X i∗ Y i
1
− Y i∗ X i
1
– о попадании точки в
многоугольник
• О замене двумерного поворота
тремя сдвигами
27
Links
•
http://www.gamedev.ru/articles/?id=30129
•
http://en.wikipedia.org
•
http://www.gamedev.ru/users/wat/articles/quaternions
•
http://www.pm298.ru/
•
http://02-07-90327.fizteh.ru/index/kvaternion1/f_otc1
28
Q&A
29
Thanks!
30
Download