310 likes | 564 Views
Компьютерная графика Лекция третья. Тема Координаты, примитивы, преобразования. Подготовлено А.А.Пименовым calvrack@googlemail.com Для 4 курса мат.-мех. СПбГУ в 2006. Декартовы и полярные координаты. Декартовы координаты на плоскости и в пространстве Полярные координаты
E N D
Компьютерная графикаЛекция третья Тема Координаты, примитивы, преобразования Подготовлено А.А.Пименовым calvrack@googlemail.com Для 4 курса мат.-мех. СПбГУ в 2006
Декартовы и полярные координаты • Декартовы координаты на плоскости и в пространстве • Полярные координаты • Цилиндрические координаты • Сферические координаты
Крен, Тангаж, Рыскание крен рыскание тангаж
Способы задания примитивов(Линия и Отрезок) • Две точки • Параметрическое задание • Каноническое представление • Как пересечение плоскостей
Способы задания примитивов(Плоскость) • Три точки • Аналитическое задание • Задание с нормалью
Формулы и операции (векторное произведение)
Формулы и операции (смешанное произведение)
Пересечения и принадлежность • Параллельные прямые • Скрещивающиеся прямые • Прямая и плоскость
Представление сцены Мировая система кординат • Система координат подсцены Точка
Замена системы координат • Со сдивгом • Без сдвига
Аффинные преобразования Аффиное преобразоване сохраняет параллельность и отношения расстояний
Собственные числа и геометрический смысл • Комплексный оператор в С3 имеет собственное число • Более того имеет 3 собственных числа • Одно из них вещественное… если коэффициенты вещественные • Ось вращения
Проективные (однородные) координаты • Точность • Удобство • Возможность представлять несобственные элементы
Обобщенные преобразования • Матрица 4x4
Перспективные преобразования • Общее рассуждения про нижнюю строку матрицы
Как быстро попарно умножать вектора? (x , y ,z ) * (a , b ,c) = ax + by + cz = (x + b) * (y + a) – yx - ab + cz Но xy и ab можно считать заранее... !
Кватернионы Гамильтон
Умножение кватернионов • 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; • }
Матрицы и кватернионы • 1-2y2-2z2 2xy-2wz 2xz+2wy2xy+2wz 1-2x2-2z2 2yz-2wx 2xz-2wy 2yz+2wx 1-2x2-2y2
Применение кватерниона к вектору
Скалярное произведение 3 умн, 2 сл • Векторное произведение 6 умн, 3 сл • Перемножение двух матриц 3x3 27 умножений и 18 сложений. • Перемножение двух кватернионов 16 умн и 12 сл. или (8+4) умн + 32 сл • Применение кватерниона к вектору • Умножение матрицы на вектор 9 умн + 6 сл • Конвертирование матрицы в кватернион требует 7 сложений и 2 условных перехода. • Конвертирование кватерниона в матрицу требует 16 умножений 15 сложений и 1 деление. • Конвертирование матрицы вращения в кватернион, умножение на другой кватернион, а затем конвертирование обратно в матрицу потребует 32 умножений 34 сложений 2 условных перехода и 1 деление.
Сферическая линейная интерполяция 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). Выводится исходя из линейной комбинации, единичной длинны и угла При малых углах используют обычную интерполяцию.
Несколько замечаний • О физике при повороте и кватернионе в степени • О площади многоугольника • о попадании точки в многоугольник • О замене двумерного поворота тремя сдвигами
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