PGK wykład OpenGL

background image

Wprowadzenie do programowania

w OpenGL

Wykład 4

background image



GKS (

Graphical Kernel System

)



GKS-3D



PHIGS (

Programmer’s Hierarhical Interactive Graphics System

)



PHIGS+



CGM (

Computer Graphics Metafile

)



CGI (

Computer Graphics Interface

)



Standardy przemysłowe



XWindow (

MIT

)



IRIS Performer (

Silicon Graphics

)



OpenGL (

Silicon Graphics

)



PostScript (

Adobe

)

background image

konsorcjum OpenGL Architecture Review Board (

Silicon

Graphics, IBM, Intel, HP, Microsoft, Intergraph

)



biblioteka kilkuset procedur i funkcji graficznych opracowana dla
potrzeb najnowszych tendencji w technologii sprzętu grafiki
komputerowej. Wykorzystywany model klient – serwer, w którym
klient (program) wysyła polecenia a serwer (GL) wykonuje
polecenia



OpenGL jest niezależny od systemu operacyjnego (UNIX, Linux,
Win95/98/NT, Mac OS, OS/2) i dostępny na wielu platformach
sprzętowych



OpenGL stanowi podstawę do tworzenia zaawansowanych bibliotek
graficznych (np.

SGI OpenGL Performer, MultiGen-Paradigm Vega

background image

prymitywów graficznych w pełnym zestawie barw (24 bity)



wykonywanie

na obiektach przekształceń geometrycznych

(translacje, rotacje, skalowanie, rzutowanie)



wykonywanie

obliczeń

związanych

z

oświetleniem,

odwzorowaniem tekstur i usuwaniem niewidocznych linii i
powierzchni



wspomaganie programisty w zakresie realizacji złożonych efektów
graficznych, takich jak: wizualizacja mgły i głębi przestrzennej,
rozmycie obiektów w ruchu, oraz usuwanie efektu aliasingu

background image



opisywania

złożonych

obiektów

za

pomocą

gotowych

mechanizmów

(np.

brak

wbudowanych

mechanizmów

zapisywania/czytania modeli obiektów z pliku)



generowania w sposób automatyczny efektów wizualnych takich
jak: cienie, odbicia lustrzane obiektów

background image



krzywe

i

powierzchnie

nieregularne

definiowane

przez

niejednorodne parametryczne funkcje B-sklejane (NURBS)



pełen zestaw barw (24 bity)



cieniowanie metodą Gourauda



operacje HLHSR realizowane z wykorzystaniem Z-bufora



modelowanie oświetlenia (do 8 różnych źródeł światła)



operacje na pixelach



funkcje sterujące buforowaniem ekranu



antyaliasing - poprawa jakości obrazu



funkcje sterujące nakładaniem (mapowaniem) tekstury
modelowanie efektów atmosferycznych (mgła, zachmurzenie, pora

background image

X, Win32, MAC OS – warstwa graficzna systemu operacyjnego;

GLUT

GLU

OpenGL

GLX, AGL

or WGL

X, Win32, Mac O/S

Sprzęt

Program

OpenGL Motif

background image

Lista

poleceń

Operacje na

wierzchołkach

Rasteryzacja

Bufor
ramki

Pamięć

tekstury

Operacje na

pikselach

Operacje na

mapach bitowych

Moduł

wyliczeniowy

CPU

background image
background image

Void Kwadrat()
{

glColor3f(0.0,0.0,1.0);
glBegin(GL_QUADS);

glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 1,0, 0.0);
glVertex3f(1.0, 1.0, 0.0);
glVertex3f(1.0, 0.0, 0.0);

glEnd();

}

Płaszczyzna XY

Obiekt: kwadrat o boku 1 leżący na płaszczyźnie XY

background image

Void Koło()
{

glColor3f(0.0,1.0,0.0);
glBegin(GL_TRIANGLE_FUN);

glVertex3f(0.0, 0.0, 0.0);

for (i=0; i*dAlfa<=360.0; i++);

{

glVertex3f(r*cos(DEG2RAD(i*dAlfa)),

0.0,r*sin(DEG2RAD(i*dAlfa)));

- dAlfa – wartość kąta wyznaczającego kolejny punkt na okręgu

dAlfa=360/N; gdzie: N-liczba podziałów koła

Płaszczyzna XZ

v

1

v

2

v

3

v

4

v

5

v

6

v

8

v

7

v

0

background image

Void powierzchnia_boczna_walca()
{

glColor3f(1.0,1.0,0.0);
glBegin(GL_QUAD_STRIP);

for (i=0; i*dAlfa<=360.0; i++);

{

glVertex3f(r*cos(DEG2RAD(i*dAlfa)),

0.0,r*sin(DEG2RAD(i*dAlfa)));

glVertex3f(r*cos(DEG2RAD(i*dAlfa)),

podstawy w punkcie (0,0,0) leżącej na płaszczyźnie XZ

- dAlfa – wartość kąta wyznaczającego kolejny punkt na brzegu podstawy

dAlfa=360/N; gdzie: N-liczba podziałów pionowych walca

Z

X

Y

V

i+1

V

i+3

V

i+2

V

i

r

h

background image

układzie współrzędnych kartezjańskich

x

x

y

y

z+

z+

układ

lewoskrętny

układ

prawoskrętny

Kąty dodatnie – CCW

Kąty dodatnie – CW

background image

macierzowe w postaci:

v’

= M

v

gdzie:



v, v’

– wektory kolumnowe [4x1] opisujące jednorodne

współrzędne punktu odpowiednio przed i po przekształceniu



M – macierz [4x4] opisująca wykonywane przekształcenie

Z

ależności zachodzące między klasycznymi współrzędnymi

kartezjańskimi (

x

k

,y

k

,z

k

), a współrzędnymi jednorodnymi (

x

j

,y

j

,z

j

,w

j

):

=

k

k

j

j

y

x

y

x

=

j

j

k

w

y

w

x

y

x

/

/

background image



translacja



skalowanie



obrót wokół zadanej osi

background image

glTranslate*(x, y, z)

background image

glScale*(x, y, z)

background image
background image

Składanie przekształceń realizowane jest poprzez mnożenie macierzy:

C’ = CM

gdzie:

C

– aktualna macierz przekształceń

M

– macierz opisująca dodawane przekształcenie

C’

– macierz przekształceń po dodaniu przekształcenia M

Obraz wierzchołka

v

po przekształceniach

CM

:

v’ = C’v

background image

v’ =

R

T

v

Najpierw translacja potem obrót

Najpierw obrót potem translacja

v’ =

T

R

v

background image

Współrzędne

w układzie

obiektu

Macierz

modelowania

M

Macierz

modelowania

M

Macierz

rzutowania

P

Macierz

rzutowania

P

Normalizacja

do

współrzędnych

urządzenia

Normalizacja

do

współrzędnych

urządzenia

Przekształcenie

do

współrzędnych

ekranowych

Przekształcenie

do

współrzędnych

ekranowych

o

o

y

x

Współrzędne

w układzie

obserwatora

Współrzędne

odcięte

Znormalizowane

współrzędne

urządzenia

Współrzędne

ekranowe

s

s

y

x

=

o

o

e

e

y

x

M

y

x

=

e

e

c

c

z

y

x

P

z

y

x

=

c

c

c

c

d

d

w

y

w

x

y

x

/

/

background image

Macierz

modelowania

M

n

Macierz

modelowania

M

n

Macierz

rzutowania

P

m

Macierz

rzutowania

P

m

Normalizacja

(dzielenie

perspektywiczne)

Normalizacja

(dzielenie

perspektywiczne)

Przekształcenie

do

współrzędnych

ekranowych

Przekształcenie

do

współrzędnych

ekranowych

Macierz

modelowania

M

n-1

Macierz

modelowania

M

n-1

Macierz

rzutowania

P

m-1

Macierz

rzutowania

P

m-1

Stos macierzy

Stos macierzy

Macierze aktywne

background image

glPushMatrix() – skopiowanie aktywnej macierzy i odłożenie jej na stosie,

glPopMatrix() – zdjęcie aktywnej macierzy ze stosu,

glLoadIdentity() – odłożenie na stosie macierzy jednostkowej,

glMultMatrix(T m[16]) – przemnożenie aktywnej macierzy przez macierz m,

glLoadMatrix(T m[16]) – odłożenie na stosie macierzy m,

glMatrixMode(mode) – wybór stosu, na którym będą wykonywane operacje.

Wszystkie przedstawione wcześniej funkcje wykonujące przekształcenia

modelujące i rzutujące przemnażają

aktywną macierz na wybranym stosie.

background image

Rodzaje rzutów w OpenGL:



rzut perspektywiczny



rzut ortogonalny (równoległy)

Etapy rzutowania:



przekształcenie współrzędnych obserwatora do współrzędnych

odciętych (macierz

P

),



odcięcie (odrzucenie) prymitywów leżących poza kanoniczną bryłą

widzenia

background image

Układ współrzędnych

obserwatora

Układ współrzędnych

odciętych

-f

-n

l

r

t

b

background image

(

)

+

2

/

o

x

p

x

(o

xl

o

y

)

1

1

1

p

y

p

x

(o

x

, o

y

)

-1

Y

d

Z

d

Współrzędne ekranowe (pikselowe)

background image

glViewport(int x, int y, int w, int h) – funkcja wyznaczająca prostokątny
obszar okna, na którym mapowany będzie rzutowany obraz sceny,
gdzie:

-

x,y – współrzędne ekranowe lewego dolnego rogu prostokąta;

-

w i h – szerokość i wysokość obszaru okna wyrażone w pikselach.

glDepthRange(int near, int far) – funkcja ustalająca przedział
mapowania współrzędnej z

d

. Wartości near i far odwzorowywane są na

przedział wartości dyskretnych bufora głębokości.

background image

void

KonfigurujKanalWizualizacji(int x0,int y0,
int szerokosc,int wysokosc)

glViewport(x0, y0, szerokosc, wysokosc);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0,(float)szerokosc/(float)wysokosc

1.0, 1000.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

background image

Otworzyć stronę:

http://intranet.ita.wat.edu.pl:8080/wosat/OpenGL/Binaria/

Otworzyć w nowym oknie link:

glut-3.7.6-bin.zip

Zapisać na dysk w katalogu np.

D:\Temp\GLUT

Rozpakować w tym samym katalogu (np. WinZip). Po rozpakowaniu utworzony zostanie

folder glut-3.7.6-bin zawierający pliki:

glut32.dll

- pliki systemowe DLL

glut32.lib

- bibloteka funkcji GLUT

glut.def
glut.h

- pliki nagłówkowe *.h

Readme-win32.TXT

Skopiować:

plik glut32.dll do katalogu

C:\WINDOWS\system32

plik glut32.lib do katalogu

C:\Microsoft Visual Studio. Net 2003\Vc7\PlatformSDK\LIB\

background image

Wybrać nowy projekt w języku Visual C++
Wybrać aplikację konsolową Win32 Console Project
Podać nazwę projektu: np. grupa_nazwisko (

I4YS0_Kowalski

)

Wybrać lokalizację: D:\Temp
W ApplicationSetting wybrać Empty Project
W prawym oknie pojawią się informacje o plikach projektu
Załadować przykładowy program:

otworzyć stronę

http://intranet.ita.wat.edu.pl:8080/wosat/OpenGL/Przyklady/

otworzyć w nowym oknie link z wybraną nazwą program np. walec.c, szescian.c, kula.c
zapisać plik w katalogu D:\Temp\

I4YS0_Kowalski

\

Przejść do środowiska Visual C++, prawym klawiszem wybrać Source i „add existing project

10. Zlokalizować przykładowy program i załadować
11. Otworzyć załadowany program (dwukrotnie kliknąć na nazwę programu w katalogu Source
12. Po otwarciu w g ównym oknie wy wietli si kod ród owy programu


Wyszukiwarka

Podobne podstrony:
Napęd Elektryczny wykład
wykład5
Psychologia wykład 1 Stres i radzenie sobie z nim zjazd B
Wykład 04
geriatria p pokarmowy wyklad materialy
ostre stany w alergologii wyklad 2003
WYKŁAD VII
Wykład 1, WPŁYW ŻYWIENIA NA ZDROWIE W RÓŻNYCH ETAPACH ŻYCIA CZŁOWIEKA
Zaburzenia nerwicowe wyklad
Szkol Wykład do Or
Strategie marketingowe prezentacje wykład
Wykład 6 2009 Użytkowanie obiektu
wyklad2
wykład 3
wyklad1 4

więcej podobnych podstron