Laboratorium grafika3D 2

background image

Laboratorium nr 2

1/6

1)

Manipulowanie przestrzenią

Istnieją dwa typy układów współrzędnych:

1.

lewoskrętny układ współrzędnych,

2.

prawoskrętny układ współrzędnych.

Różnią się one między sobą kierunkiem osi „Z” w układzie kartezjańskim

trójwymiarowym. W bibliotece OpenGL obowiązuje układ prawoskrętny (Direct3D

umożliwia korzystanie z obydwu typów układów współrzędnych). Fizyczne zamienienie

jednego układu w drugi nie jest możliwe. Możliwe jest natomiast „udawanie” układu

lewoskrętnego i odwrotnie poprzez umieszczanie przed każdą współrzędną wierzchołka osi

„Z” znaku minusa.

Układ współrzędny prawoskrętny

Grafika Komputerowa 3D

Temat: Manipulowanie przestrzenią

Instrukcja

laboratoryjna

2

Przygotował: mgr inż. Maciej Lasota

ekran

monitora

-Y

-Z

+Z

-X

+X

+Y

background image

Laboratorium nr 2

2/6

Układ współrzędny lewoskrętny

2)

Rzutowanie

Rzutowanie jest operacją polegającą na tym, aby odpowiednie piksele na płaskim

ekranie były wyświetlane w taki sposób, by sprawiać wrażenie trójwymiarowej głębi

(przestrzeni 3D). Rzutowanie również pozwala tworzyć przestrzeń dwuwymiarową 2D dzięki

odpowiedniemu przekształceniu.

OpenGL wyposażony jest w specjalne funkcje, dzięki którym można uzyskać

odpowiedni efekt rzutowania. Wyróżniamy dwa typy rzutowania:

1.

rzutowanie perspektywiczne (wykorzystywane w grach 3D),

2.

rzutowanie ortogonalne (wykorzystywane w programach typu CAD/CAM).

2.1.)

Rzutowanie perspektywiczne

W rzutowaniu perspektywicznym obiekty położone dalej od kamery są mniejsze od

tych położonych bliżej. OpenGL udostępnia specjalną funkcję, która tworzy odpowiednią

macierz perspektywy.

void gluPerspective(GLdouble n, GLdouble a, GLdouble zN, GLdouble zF)

ekran

monitora

-Y

+Z

-Z

-X

+X

+Y

background image

Laboratorium nr 2

3/6

Funkcja przyjmuje cztery parametry. Pierwszy parametr określa kąt widzenia (w

stopniach, zalecana wartość 60 stopni) w pionie. Drugi parametr określa stosunek szerokości

do wysokości okna (zazwyczaj podaje się szerokość okna, w którym wyświetlana jest grafika

podzieloną przez wysokość). Dwa ostatnie parametry określają granicę przednią i tylną, z

reguły parametr „zN” przyjmuje wartość 1.0.

Widok perspektywiczny tworzy stożek widzenia, którego granicami są właśnie granica

przednia i tylna. Wszystko co jest w stożku pojawia się na ekranie, obiekty znajdujące się

poza stożkiem nie są wyświetlane.

Funkcja gluPerspective jak można zauważyć, nie należy do biblioteki OpenGL jest

ona części biblioteki GLU (biblioteki pomocniczej). Oryginalną funkcją służącą do

ustawiania rzutowania perspektywicznego w bibliotece OpenGL jest glFrustum,

gluPerspective jest jedynie nakładką na tą funkcje.

void glFrustum(GLdouble left, GLdouble right, GLdouble bottom,

GLdouble top, GLdouble zN, GLdouble zF)

Funkcja przyjmuje sześć parametrów. Pierwsze dwa parametry określa prawą i lewą

współrzędną pionowej linii obcinania. Kolejne dwa parametry określają górna i dolną

współrzędną poziomej linii obcinania. Dwa ostatnie parametry określają granicę przednią i

tylną.

2.2.)

Rzutowanie ortogonalne

Nazywane inaczej rzutowaniem prostokątnym lub równoległym. Polega ono na tym,

ż

e każdy obiekt znajdujący się w obszarze rysowania niezależnie od swojej odległości od

kamery ma dokładnie tą samą wielkość.

zN

zF

a

background image

Laboratorium nr 2

4/6

W OpenGL dostępna jest specjalna funkcja, która tworzy rzutowanie ortogonalne.

void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,

GLdouble near, GLdouble far)

Funkcja glOrtho tworzy tzw. bryłę widzenia (bryłę obcinania). Parametry „left” oraz

„right” określają szerokość bryły, parametry „bottom” oraz „top” jej wysokość. Dwa ostatnie

parametry „near” i „far” określają głębię.

W obrębie bryły widzenia tworzone są obiekty, które są wyświetlane na ekranie. To

czy obiekt pojawi się na ekranie zależy od tego czy znajdzie się on w obszarze

prostopadłościanu. Rzutowanie ortogonalne wykorzystywane jest często w grach 2D oraz

programach typu CAD/CAM.

+Y

-Y

+X

-X

-Z

+Z

left

right

top

botom

far

near

background image

Laboratorium nr 2

5/6

3)

Kamera

Oprócz samego rzutowania w OpenGL bardzo ważną rzeczą jest kamera. Kamera

określa położenie obserwatora (w przestrzeni 3D) względem obserwowanych obiektów.

OpenGL posiada funkcję tworzącą macierz kamery.

void gluLookAt(GLdouble x, GLdouble y, GLdouble z, GLdouble centerx,

GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy,

GLdouble upz)

Funkcja przyjmuje dziewięć argumentów. Pierwsze trzy argumenty (x,y,z) określają

położenie kamery w przestrzeni trójwymiarowej. Kolejne trzy argumenty (centerx, centery,

centerz) określają punkt na który skierowana jest kamera (patrzy kamera). Ostatnie trzy

argumenty (upx, upy, upz) określają wektor pionu kamery, dzięki tym parametrom możliwe

jest obracanie kamery.

4)

Macierz rzutowania i modelowania

OpenGL oblicza według następującego wzoru pozycję punktu w przestrzeni:

[WYJŚCIOWY POZYCJA PUNKTU] = [MACIERZ RZUTOWANIA] *

[MACIERZ MODELOWANIA] * [WEJSCIOWA POZYCJA PUNKTU]

Dodatkowo w skład macierzy modelowania wchodzą dwie osobne macierze

(traktowane jako całość). Pierwszą z nich jest macierz przekształceń (związana z translacją,

rotacją i skalowaniem), drugą zaś macierz kamery.

4.1.)

Macierz rzutowania (projekcji)

Jak sama nazwa wskazuje związana jest z rzutowaniem. Aby umożliwić rzutowanie

perspektywiczne lub ortogonalne należy przełączyć się na macierz rzutowania. Do tego celu

służy odpowiednia funkcja.

void glMatrixMode(GL_PROJECTION)

background image

Laboratorium nr 2

6/6

Zawsze po załadowaniu macierzy rzutowania należy w OpenGL wywołać funkcje

odpowiedzialną za załadowanie tzw. macierzy tożsamości glLoadIdentity (jest to funkcja

bezparametrowa). Dopiero po tym możemy ustawić rzutowanie perspektywiczne lub

ortogonalne za pomocą odpowiedniej funkcji gluPerspective, glOrtho.

4.2.)

Macierz modelowania (widoku modelu)

W identyczny sposób przełączamy się na macierz modelowania (widoku modelu),

należy pamiętać o tym, że macierz modelowania zawiera w sobie dwie macierze

(przekształceń i kamery). OpenGL zajmuje się nimi jako jedną całością.

void glMatrixMode(GL_MODELVIEW)

4.3.)

Funkcja okna widoku

Dzięki tej funkcji możliwe jest ustalenie konkretnego okna widoku, czyli obszaru gdzie

będzie odbywać się renderowanie (rysowanie). Do tego celu służy funkcja.

void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)

Przyjmuje ona cztery parametry, dwa pierwsza określają współrzędne lewego

dolnego narożnika, kolejne dwa wysokość i szerokość obszaru renderowania. Zazwyczaj

definiuje się obszar na całe okno, wiec jako pierwsze dwa parametry podaje się (0,0),

natomiast kolejne dwa ustawie się na szerokości i wysokość okna.


Wyszukiwarka

Podobne podstrony:
Laboratorium 4 Grafika 3D
Laboratorium grafika3D 7
Laboratorium grafika2D 3
Laboratorium grafika2D 7
Laboratorium grafika3D 5
Laboratorium grafika2D 5
Laboratorium grafika3D 6
Laboratorium Grafiki Komputerowej3, Studia PK, Inne - serwer Nexus, Dydaktyka, ZaoczniGK, OpenGL-lab
Laboratorium grafika2D 6
Laboratorium grafika3D 1
Laboratorium grafika3D 3
Laboratorium 4 Grafika 3D
Laboratorium grafika3D 7
Laboratorium grafika2D 3
Laboratorium grafika2D 7

więcej podobnych podstron