Автор: Пользователь скрыл имя, 18 Октября 2011 в 01:13, курс лекций
Работа содержит лекции по дисциплине "Компьютерная графика".
Эти формулы можно рассматривать двояко, либо сохраняется точка, и изменяется система координат, либо сохраняется система координат и изменяется точка. В дальнейшем эти формулы будут рассматриваться именно как преобразование точек в заданной системе координат. Причем все рассматриваемые системы будут прямоугольными (формулы позволяют работать и с непрямоугольными).
Нужно отметить, что координаты точки M можно представить в виде вектора из начала координат с координатами Mx,My.
Тогда преобразование можно записать в векторной форме (это справедливо только для прямоугольной системы координат).
M*=((M-O*)X*,(M-O*)Y*)
, где O*-координаты начала координат второй системы в координатах первой. X*,Y* - орты (направляющие вектора) второй системы координат в координатах первой.
a=(Xx*), b=(Xy*),c=-O*X*
d=(Yx*), e=(Yy*),f=-O*Y*
Это преобразование можно записать и в матричном виде
, или , где вектора считаются в виде матриц вида 1´2.
Элемент
Cij матрицы C=AB есть сумма произведений
элементов i-ой строки матрицы A на элементы
j-ого столбца матрицы B.
Обратное преобразование – решение системы линейных уравнений, либо использовать обратную матрицу , но для случая, когда система представлена ортами можно проще. С этом случае обратная матрица равна транспонированной.
Аффинное
преобразование – геометрическое преобразование
плоскости или пространства которое
можно получить комбинируя поворот,
перенос, зеркальные отражения и
масштабирование в направлениях
координатных осей.
Поворот (R - rotation). Вокруг начала координат на угол a.
x*=x*cosa-y*sina
y*=x*sina+y*cosa
Растяжение, сжатие вдоль координатных осей (D – dilatation).
x*=k*x
y*=m*y
k>0, m>0
Отражение (M – mirror). Относительно оси абсцисс.
x*=x
y*=-y
Перенос (T – translation).
x*=x+a
y*=y+b
Перенос
представить в виде произведений
вектора на матрицу нельзя, зато
можно в виде суммы векторов.
В курсе
аналитической геометрии
Иногда
удобно представлять все преобразования
в одной матричной форме, для
этого используют однородные координаты.
Однородные
координаты
Для точки M с координатами x,y на плоскости, однородными координатами является тройка чисел x1,x2,x3, одновременно неравная нулю и связанная соотношениями x1/x3=x, x2/x3=y. Точке с координатами x,y на плоскости сопоставляется точка xh,y,h,h в однородном пространстве, обычно h=1 (x,y,1).
Общее преобразование точек в однородных координатах можно записать в виде.
А матрицы основных преобразований будут выглядеть следующим образом:
[R] [D] [M] [
Комбинация
преобразований.
Предположим нужно повернуть точку на угол вокруг некоторой точки A.
Начала переносим
точку A в начало координат (-Ax,-Ay). Затем
поворот. Затем перенос обратно в точку
А. (Ax,Ay). Можно получить единое преобразование
[T(-A)][R(a)][T(A)]
Аффинные
преобразования в пространстве
В 3D пространстве точка (вектор) представляется тремя координатами (x,y,z), или четырьмя однородными координатами (x,y,z,1).
Следует ввести понятия левая и правая тройка векторов. Три вектора a,b,c образуют правую тройку, если после совмещения начал векторов кратчайший поворот от a к b кажется наблюдателю, смотрящему с конца вектора c идущим против часовой стрелки. Правило правой руки – вектор a совмещается с локтем, вектор b входит в ладонь, вектор c совпадает с большим пальцем. Система координат называется правой, если ее направляющие вектора образуют правую тройку.
Векторное произведение c=a´b, с – вектор перпендикулярный обоим векторам, образует с ними правую тройку.
Cx=Ay*Bz-Az*By,
Cy=Az*Bx-Ax*Bz, Cz=Ax*By- Ay*Bx
Преобразования остаются те же: вращение (только теперь вокруг трех осей), растяжение, отражение (относительно трех плоскостей), перенос.
Вращение против часовой, если смотреть из начала координат для левой системы координат (для правой – наоборот).
,
,
,
,
,
Например, нужно построить матрицу вращения относительно прямой с направляющим ортом L, проходящей через точку A.
1. Перенос A в начало координат [T(-A)]
2. Совмещение прямой с осью X.
Сначала поворот вокруг оси X
на угол a [Rx(a)], cosa=Lz/d, sina=Lx/d, где d=
Если d=0, значит прямая уже совпадает с осью X.
Затем поворот вокруг оси Y на угол b [Ry(b)].
Повернутый вектор равен (Lx,Ly,Lz,1)[Rx]=(Lx,0,d,1).
cosb=Lx, sinb=d
3. Поворот вокруг оси X на нужный угол [Rx(j)]
4. Возвращение к оси L [Ry(-b)],[Rx(-a)]
5. Перенос на точку A [T(A)]
Общая матрицы получится
[T(-A)] [Rx(a)][Ry(b)][Rx(j)][Ry(-b)][
Преобразование
в систему координат
заданную ортами
Если система задана тройкой взаимно перпендикулярных ортов X*,Y*,Z*.
, обратное преобразование – транспонированная
матрица [R]T
Проектирование
Проектирование необходимо в первую очередь, для того, чтобы отобразить трехмерные объекты на плоском экране, но существуют и другие применения, например, тени.
Существует два наиболее употребляемых вида проектирования параллельное и центральное (перспективное).
При проектировании объекта на плоскость нужно провести через каждую точку объекта прямую из заданного проектирующего пучка и найти пересечение этой прямой с плоскостью.
При параллельном проектировании пучок состоит из параллельных прямых, при центральном – проходит через некоторую точку.
Параллельные проекции можно разделить
на два типа, когда прямые пучка
перпендикулярны плоскости
Таким образом, чтобы получить аксонометрическую
параллельную проекцию объекта на экране
нужно совместить направление пучка
с одной из осей (обычно это Z).
Оси X и Y совпадут с осями X,Y на экране,
а ось Z – будет направлена вглубь экрана.
Чтобы
получить перспективную проекцию точки
необходимо поместить точку схода
пучка в начало координат, направление
на экран (перпендикуляр из точки
схода к плоскости
Это преобразование можно записать в виде матрицы. ,
тогда
Единственное,
в таком преобразовании теряется
глубина (z), но можно ее вычислить из последней
координаты вектора.
Кроме
этих преобразований проектирования необходимо
сделать еще несколько, чтобы
изображение правильно
Общая матрица преобразования выглядит следующим образом.
Cx,Cy – координаты центра экрана.
ratio – отношение размера по Y к размеру по X, для разных разрешений экрана разный. Разрешение – количество точек на единицу поверхности, в данном случае единица – весь экран монитора. Экран монитора имеет соотношение горизонтального размера к вертикальному 4/3, поэтому для разрешений с количеством точек по горизонтали и вертикали кратным этому числу ratio=1 (например 640/480). Иначе ratio=(4*sizey)/(3*sizex) (320x200 =0.83).
S – масштабный
коэффициент, для параллельной проекции
выбирается вручную, для перспективной
проекции S равняется единице, но рассчитывается
d (расстояние до плоскости проектирования)
исходя из поля зрения FOV (field of view). FOV –
максимальный угол, который образуют прямые
в пучке, угол зрения.
FOV обычно
варьируется от 50° до 100°, FOV человеческого глаза
- 90°.
Мировая,
модельная и экранная
системы координат
Мировая – основная система координат, в которой заданы все объекты сцены.
Модельная – система координат, в которой задана внутренняя структура объектов.
Экранная – система координат наблюдателя, еще ее называют системой координат камеры.
Модель обычно располагают в модельной системе таким образом, что центр системы совпадает либо с геометрическим, либо с центром масс модели, ось X совпадает с направлением вперед, ось Y – вправо, ось Z – вверх.
Модель задается в мировой системе координат координатами центра модели M (вектор) и ориентацией (либо тремя ортами, либо тремя углами крен (X), тангаж (Y), курс (Z), матрица при этом формируется как последовательность поворотов [Rx][Ry][Rz]). Для преобразования из модельных координат нужно сначала повернуть в соответствии с матрицей ориентации [Rm], а затем перенести на [T(M)].