lect_10 (Лекционный курс в ворде)
Описание файла
Файл "lect_10" внутри архива находится в папке "Лекционный курс в ворде". Документ из архива "Лекционный курс в ворде", который расположен в категории "". Всё это находится в предмете "инженерная графика" из 4 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "lect_10"
Текст из документа "lect_10"
Лекция №10…………………………………………………………….1
-
11.1 Этапы создания графического объекта…………………….2
-
11.2 Преобразования положения объекта……………………….3
-
11.3 Положение камеры…………………………………………..4
-
11.4 Преобразования, определяющие положение и
ориентацию объекта в мировой системе координат…………..5
-
11.5 Перспективное проектирование…………………………….6
-
11.6 Проектирование……………………………………………...8
-
11.7 Композиция и перестановка преобразований…. … …. ….10
-
11.8 Используемые геометрические преобразования..… ….….13
-
11.9 Иерархия преобразования ……………………….…………14
-
11.10 Уравнения плоскости ……………………………..……….18
-
11.11Отсечение………………………………………………….20
Устюгова Елена группа 203
Иновенков Олег группа 203
11.1 Этапы создания графического объекта
Задание 3D объекта и его создание разбивается на несколько этапов, в процессе которых последовательно преобразуется система координат. Изначально объект задается в некоторой своей локальной системе координат (OCS-object coordinate system), которая затем размещается в мировой системе координат (WCS - world coordinate system). Далее определяем видовую систему координат (VCS – viewing coordinate system), задавая картинную плоскость, положение глаза (камеры) и систему координат камеры.
В
идовая система (VCS) может быть как правой, так и левой. Чаще всего, ось OZ направлена либо из экрана, либо в экран (что соответствует правой или левой системе координат при одинаковом направлении осей OX и OY). Определить является ли система координат правой или левой можно с помощью следующего мнемонического правила: если можно «взяться» правой рукой за ось OZ, так чтобы большой палец был направлен в сторону положительного направления оси, и затем рукой совместить поворотом вокруг оси OZ, ось OX и ось OY, то система координат является правой, если это можно проделать левой рукой, то левой.
На рисунке RHCS – right hand coordinate system (правая сторонняя система координат) , LHCS – left hand coordinate system (левая система координат).
Итак, последовательность преобразований систем координат будет выглядеть следующем образом:
Где OCS – object coordinate system (локальная система координат объекта)
WCS – world coordinate system (мировая система координат)
VCS – viewing coordinate system (видовая система координат)
CCS – clipping coordinate system (система координат клипа)
NDCS–normalized device coordinate system (нормализованная система координат устройства)
DCS – device coordinate system (система координат устройства)
В результате этих преобразований объект помещается в мировую систему координат, затем переносится в систему координат глаза, вычисляется перспективная проекция, нормализованные координаты (от 0 до 1) в системе координат устройства и затем координаты в системе координат конкретного устройства.
Такое разбиение необходимо для максимальной переносимости системы и программ.
11.2 Преобразования положения объекта
Используя библиотеку функций OpenGL различные преобразования можно осуществлять вызывая следующие функции:
-
Моделирующее преобразование: glTranslatef()
glRotatef()
glScalef()
-
Видовые преобразования (положение камеры, направление камеры и т.д ):
gluLookAt()
glFrustum()
-
Задание проекции: gluPerspective()
glOrtho()
gluOrtho2D()
-
Задание области видимости: glViewport()
М
оделирующие преобразования определяют положение объекта в мировом пространстве. Изначально матрицу видового преобразования строиться на основе информации о параметрах камеры (положении, направлении камеры, положительного направления) и положении мира относительно камеры.
11.3 Положение камеры
Наиболее частым способом определения параметров камеры является определение следующих ее свойств:
-
Координаты камеры
-
Направление обзора
-
К
оординаты вектора, определяющего вертикальное направление
Для задания положения камеры в графической библиотеке OpenGL предусмотрена специальная функция gluLookAt():
gluLookAt(ex,ey,ez,rx,ry,rz,ux,uy,uz),
где (ex,ey,ez) – положение камеры, (rx,ry,rz) – направление обзора, (ux,uy,uz) – координаты вектора, определяющего вертикальное направление.
Поскольку использование этой функции вызывает создание соответствующей матрицы и умножения на нее имеющейся, то проще всего для корректного задания новых параметров камеры выполнить следующую последовательность команд:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
/*загружаем в качестве текущей единичную матрицу*/
gluLookAt(ex,ey,ez,rx,ry,rz,ux,uy,uz);
/*устанавливаем новые параметры камеры*/
Таким образом, матрица преобразований, на которую в дальнейшем умножаются координаты всех создаваемых объектов, изначально вычисляется на основе параметров камеры, а все дальнейшие преобразования осуществляются умножением этой матрицы на матрицу данного конкретного преобразования.
11.4 Преобразования, определяющие положение и ориентацию объекта в мировой системе координат
Моделирующие преобразования, определяющие положение объекта и его ориентацию, осуществляются как композиция параллельных переносов и поворотов.
Например, пусть в локальной системе координат объект имеет следующий вид,
а в мировой системе координат этот объект должен иметь другие координаты:
Такое преобразование осуществляется путем последовательности поворотов и параллельных переносов относительно начального положения:
Окончательный перенос объекта в нужное положение параллельным переносом.
При параллельном переносе сохраняются относительные длины и расстояния между объектами.
11.5 Перспективное проектирование
При перспективном проектировании мы получаем изображение в перспективе. Это преобразование является нелинейным. Существуем множество видов перспективных проекций: относительно одной точки, относительно двух точек, изометрическая проекция и т.д.
Перспективное преобразование также как и остальные осуществляестя умножением на соответсвующую матрицу. Рассмотрим ее построение на следующем примере:
Имеем два подобных треугольника, следовательно y’/d=y/z или y’=y*d/z, аналогично x’=x*d/z. Тогда в матричной форме это преобразование будет иметь вид:
11.6 Проектирование
Основной задачей проектирования является перевод 3-х мерного объекта, заданного в видовой системе координат (VCS), в 2-х мерный объект нормализованной системы координат устройства (NDCS).
При проектировании отсекаются объекты, которые не попадают в область видимости, а также определяется множество значений z
(z[near; -far] ), для которого точки, имеющие значения координаты z , принадлежащие этому множеству, являются видимыми, а точки находящиеся слишком близко (z>(-1)*near) или слишком далеко
(z<(-1)*far) невидимыми.
Для ортографической проекции область видимости будет определяться как параллелепипед:
Используя функции OpenGL, ортографическая проекция задается функциями:
-
glOrtho(left, right, bottom, top, near, far) - необходимо чтобы near >0 , far >0.
-
glOrtho2D(left, right, bottom, top) - аналог glOrtho() только near=0, far=1.
А
для перспективной проекции область видимости будет иметь вид:
Используя функции OpenGL, перспективная проекция задается функциями:
-
glFrustum(left, right, bottom, top, near, far) - необходимо чтобы near >0 , far >0.
-
gluPerespective(fovy,aspect,near,far) - параметр fovy задает угол видимости в направлении оси OY в градусах , центрированный относительно этой оси.
11.7 Композиция и перестановка преобазований
Серия преобразований может быть свернута в одну матрицу преобразований.
Допустим, мы имеем следующий объект:
Допустим, что мы хотим его заменить в нашей сцене следующим образом:
Это может быть осуществленно несколькими способами, например:
Заменяя (1) в (2), получим:
Замечания о матричном преобразовании
-
композиция преобразований не является коммутативной
-
матрицы преобразований могут быть перемножены между собой в одну
-
размещение трансфориации описывает координатную систему, в которой преобразование имело место. Например, делая дальнейшие преобразования в нашей модели, мы можем записывать их как в координатах объекта так и в мировых координатах.
-
Преобразования обратимы ( матричные и др.), то есть: trans(a,b,c) trans(-a,-b,-c)=I
-
Преобразования могут восриниматься как изменения в системе координат
-
Преобразования, необходимые для перевода точки из КС2 в КС1, можно получить как обратную последовательность кадров, переводящих КС1 в КС2.
-
Используемые геометрические преобразования.
Наиболее простой метод создания объектов – использование примитивов, таких как линии и многоугольники. На рисунке М – матрица преобразования, которая переводит точки (2D или 3D) в ликсельные координаты.
for each vertex i
new_vertex_list[i] = M * vertex_list [i]
scanconvert (new_vertex_list )
Вот эквивалент в OpenGL:
GlBegin( GL_POLYGON);
for each vertex i
glVertex3fv( vertex_list [i] );
glEnd();