Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Диплом'
Во введении к данной дипломной работе можно сказать, что проблема ликвидности коммерческих банков стоит очень остро в условиях переходной экономики во...полностью>>
'Статья'
Данная статья посвящена вопросу преподаванию литературы и искусства в соотвествии с требованиями нового времени-времени смены эпох. Старые методы преп...полностью>>
'Документ'
«Пособие по контролю за качеством работ для инженерно-технических работников, занятых на строительстве мостов и труб» впервые было издано свыше 25 ле...полностью>>
'Документ'
Готовность специалиста к профессиональной деятельности заключается в усвоении им полного состава социальных знаний, профессиональных дей­ствий и соци...полностью>>

Положение камеры Преобразования, определяющие положение и ориентацию объекта в мировой системе координат Перспективное проектирование

Главная > Лекция
Сохрани ссылку в одной из сетей:

Лекция №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.

    1. Используемые геометрические преобразования.

Наиболее простой метод создания объектов – использование примитивов, таких как линии и многоугольники. На рисунке М – матрица преобразования, которая переводит точки (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();

Можно отметить несколько моментов:

  • GlVertex3fv():

  • Умножает вершину на M

  • Возвращает точки преобразования

  • GlBegin(): определяет режим рисования

  • GL_POINTS

  • GL_LINE_LOOP

  • GL_POLYGON

  • Матрица М спрятана (текущая матрица преобразования)

М может быть определена следующим образом:

glMatrixMode (GL_MODELVIEW);

glLoadIdentity();

glTranslatef( 2.0, 1.0, 0.0);

glRotatef( -3.14/2.0, 0.0, 0.0, 1.0);

glScalef( 2.0, 2.0, 2.0)

M = trans(2,1,0) rot(z,-90) scale(2,2,2)…

Другой способ загрузки М

glMatrixMode (GL_MODELVIEW);

glLoadMatrixf (M) ;

    1. Иерархия преобразований.

Рассмотрим модель руки с одним пальцем:

Она может быть сконструирована, используя иерархию преобразований. В рассмотренном ниже графе круги представляют собой трансформации, а прямоугольники - геометрию. Псевдокод ипользуется для рисования сцены.

f1 : trans (d_hand,0,0)

rot(z,tH2)

f2: trans(d1,0,0) rot(z,tH3)

f3: trans(d2,0,0) rot (z,tH4)

M=M*Thand

draw hand

M=M*Tf1

draw f1

M=M*Tf2

draw f2

M=M*Tf3

draw f3

Теперь представим, что мы хотим нарисовать руку с тремя одинаковыми пальцами. Мы можем создать более комплексный граф, который использовался в рассмотренном примере. Так как все пальцы описаны в системе координат, связаннной с рукой, необходимо сохранять эту систему , перед тем как рисовать каждый палец. Это сделано с помощью вызовов функций PUSHMATRIX() и POPMATRIX().

M
=M*Thand

Draw Hand

PushMatrix()

M=M*Tfla

draw_finger()

popMatrix()

pushMatrix()

M=M*Tflb

draw_finger()

popMatrix()

pushMatrix()

M=M*Tflc

draw_finger()

popMatrix()

draw_finger() {

draw f1

M=M*Tf2

draw f2

M=M*Tf3

draw f3

}

Большинство графических систем поддерживают стек для матрицы преобразования.

    1. Уравнения плоскости.

Полное уравнение плоскости

A
x + By
+ Cz + D = F(x,y,z)

F(x,y,,z)=0 , если точка принадлежит плоскости.

Можно переписать:

F(P)=N.P+D

Параметрическое уравнение плоскости

Plane(s,t) = P0 + s(P1-P0) + t(P2-P0), обеспечивает неколлинеарность P0,P1,P2.

Plane(s,t) = P0 + s V1 + tV2, где V1,V2 базисные векторы.

Привиденное уравнение плоскости

z=-(A/C)x -(B/C)y -(D/C), если C не является нулем.

Пересечение плоскости и прямой

L(t) = Pa+t(Pb-Pa)

Подставляя в уравнение плоскости и решая относительно t, получим:

    1. Отсечение.

И алгоритм Кохена-Сазерленда, и алгоритм Сазерленда-Ходжмана могут быть расширены в трехмерном пространстве. Мы можем выбрать, где мы будем делать отсечение, например в VCS,CCS или NDCS. Хотя мы объясним это кратко, но существует недостаток отсечения в NDCS.

Отсечение в VCS

Оба алгоритма использовались в тестах для полупространств. Для видимых областей рассмотренных ниже, уравнения видимости плоскостей могут быть записаны в таком виде , чтобы все нормали указывали в область видимости. Если F(P)>0, тогда P принадлежит нужной области видимости.

left: x - left = 0

right: -x + right = 0

bottom: y - bottom = 0

top: -y + top = 0

front: -z - near = 0

back: z + far = 0

Это же может быть сделано для перспективы:

left: x + left*z/near = 0

right: -x - right*z/near = 0

bottom: y + bottom *z/near = 0

top: -y - top*z/near = 0

front: -z - near = 0

back: z + far = 0

Алгоритм Кохена-Сазерленда работает в 3-х мерном пространстве так же как и в 2-х мерном. Координаты вершины проверяются на попадание или непопадание. Если нет тривиального пересечния, то линия отсекается в одной из шести видимых плоскостей и проверяется снова.

Алгоритм Сазерленда-Ходжмана отсечения многоугольников работает подобным образом. Многоугольник также может быть усечен в одной из видимых плоскостей.

Отсечение в NDCS

NDCS является потенциально замечательной системой координат для отсечения, так как уравнения плоскости легко определяются и всегда остаются без изменений. Более того, линии в VCS – линии в NDCS и поэтому, казалось бы, что правильные пересечения могут быть посчитаны, несмотря на тот факт, что пространство NDCS имееет страннное искривление из-за его пост-перспективной части.

Потенциальная проблема отсечения в NDCS заключается в том , что знак глубины информации теряется, что показано в следующем примере.

Отсечение в СCS

Мы определим область отсечения в ССS с помощью области отсечения в NDCS:

-1 <= x/w <=1

Это означает, что в CCS мы будем иметь:

-w<= x <= w

Выглядеть это будет так:


Области отсечения аналогичны для Z и Y. Это иллюсрирует следующий пример:



Скачать документ

Похожие документы:

  1. Мировая политика в условиях кризиса

    Учебное пособие
    С конца ХХ столетия наряду с устоявшимся термином «международные отношения» в научный оборот все настойчивее входит понятие «мировая политика». Есть основания для этого? Не происходит ли дублирование семантического ряда? Попробуем
  2. Класс команд OpenGL. Очистка буфера цвета 14 Структура буферов

    Документ
    OpenGL (Open Graphics Library – открытая графическая библиотека) содержит несколько сотен процедур и функций, которые обеспечивают формирование любого 3-мерного образа на экране компьютера.
  3. Составитель Аверьянов Л. Я

    Документ
    Все хаотическое скопление социального вращается вокруг этого пористого объекта, этой одновременно непроницаемой и прозрачной реальности, этого ничто вокруг масс.
  4. Http://www osp ru/text/302/181130/ html Открытые системы, процессы стандартизации и профили стандартов

    Документ
    Применение подхода открытых систем в настоящее время является основной тенденцией в области информационных технологий и средств вычислительной техники, поддерживающих эти технологии.
  5. Знакомство с историей развития мировой философской мысли существенная составляющая философского образования

    Документ
    Знакомство с историей развития мировой философской мысли - существенная составляющая философского образования. Без нее невозможно глубинное понимание философской проблематики.

Другие похожие документы..