[Kurs OpenGL, C++] I Podstawy

background image

Strona główna

Kursy

Artykuły

Forum

Pliki

Promuj Nas!

[Kurs OpenGL, C++] I. Podstawy

http://kursy.ddt.pl/?LessonId=167

1 z 4

2010-04-30 14:21

background image

Powrót

Historia odwiedzonych stron

Kurs OpenGL, C++

Następna lekcja

Autor: Janusz Ganczarski

http://januszg.hg.pl/opengl/

I. Podstawy

Pierwsza wersja biblioteka OpenGL (ang. Open Graphics Library) powstała w 1992 roku na bazie jezyka

GL opracowanego przez firme Silicon Graphics Inc. (w skrócie SGI) na potrzeby stacji graficznych IRIS. Dopiero
jednak sukces systemów z rodziny Microsoft Windows, w których zaimplementowano OpenGL w wersji 1.1, stał
sie poczatkiem ogromnej popularności biblioteki. Obecnie OpenGL jest podstawowa niskopoziomowa biblioteka
graficzna 3D, obsługiwana przez wszystkie liczace sie systemy operacyjne oraz większość procesorów
graficznych. Niezaleznosc od platformy sprzetowej oraz ogólnie dostepna specyfikacji czyni z OpenGL standard
powszechnie wykorzystywany przez producentów oprogramowania uzytkowego i gier. Rozwojem OpenGL
zajmuje sie organizacja ARB (ang. Architecture Review

Board), w skład której wchodza przedstawiciele firm 3DLabs, Apple, ATI, Dell, IBM, Intel, NVIDIA, SGI i

Sun (stan na koniec 2004 roku). Taki sposób wprowadzania zmian w bibliotece zapewnia zachowanie
niezależności OpenGL od jednej platformy sprzetowej lub programowej przy

jednoczesnym uwzglednieniu do najnowszych osiagniec w dziedzinie grafiki komputerowej. Materiały ze

spotkan członków ARB, specyfikacje i szeregu innych materiałów na temat OpenGL dostepne sa na oficjalnej
stronie ARB: http://www.opengl.org/. Waznym uzupełnieniem OpenGL jest biblioteka GLU (ang. OpenGL
Graphics System Utility Library). GLU zawiera szereg dodatkowych narzedzi, w tym do obsługi macierzy,
odwzorowania tekstur, kafelkowania wielokatów, powierzchni drugiego stopnia oraz krzywych i powierzchni
NURBS.

1.1. Składnia

Polecenia OpenGL okreslane sa jako funkcje lub procedury. Znaczna czesc funkcji wykonuje te same

operacje, ale rózni sie zbiorem argumentów. Przyjeta konwencja nazewnictwa okresla ilosc i rodzaj parametrów
funkcji według ponizszego schematu:

rtype Name {1|2|3|4} {b|s|i|f|d|ub|us|ui} {v}
([args,] T arg1, ..., T argN [,args])

gdzie poszczególne elementy oznaczaja:

rtype - wartosc zwracana przez funkcje,
Name - nazwa funkcji poprzedzona przedrostkiem gl lub glu dla funkcji z biblioteki GLU,
1, 2, 3, 4 - ilosc argumentów funkcji,
b - argumenty typu GLbyte,
s - argumenty typu GLshort,
i - argumenty typu GLint,
f - argumenty typu GLfloat,
d - argumenty typu GLdouble,
ub - argumenty typu GLubyte,
us - argumenty typu GLushort,
ui - argumenty typu GLuint,
v - argument funkcji stanowi tablica wartosci; w tym wypadku nie wystepuje okreslenie ilosci
argumentów funkcji,
T arg1, ..., T argN - argumenty funkcji.

Składnia ta przypomina w swoich załozeniach notacje wegierska, stosowana m.in. w API systemów z

rodziny Windows. Moze ona początkowo sprawiac problemy, ale przy pewnej praktyce okazuje sie praktyczna i
wygodna w stosowaniu. Podobnie jak w specyfikacja biblioteki OpenGL ta i dalsza

czesc opisu wykorzystuje notacje przyjeta w jezyku ANSI C.

1.2. Typy danych

Tabela 1 zawiera typy danych dostepne w bibliotece OpenGL.

typ OpenGL

minimalna
ilość
bitów

opis

GLboolean

1

typ logiczny

GLbyte

8

liczba całkowita ze znakiem (U2)

GLubyte

8

liczba całkowita bez znaku

GLchar

8

ciag znaków tekstowych

GLshort

16

liczba całkowita ze znakiem (U2)

GLushort

16

liczba całkowita bez znaku

GLint

32

liczba całkowita ze znakiem (U2)

GLuint

32

liczba całkowita bez znaku

GLsizei

32

nieujemna liczba całkowita

GLenum

32

typ wyliczeniowy całkowity

GLintptr

ptrbits

wskaznik na liczbe całowita ze znakiem (U2)

GLsizeiptr

ptrbits

wskaznik na nieujemna liczbe całkowita

GLbitfield

32

pole bitowe

GLfloat

32

liczba zmiennoprzecinkowa

GLclampf

32

liczba zmiennoprzecinkowa z przedziału [0, 1]

P anel Logowania

dast19

Administracja

Twój profil

Wyloguj

Uż yt kowników

Obecnie aktywnych:

16

Zalogowanych:

2

Zarejestrowanych:

3855

Ostatnie 24h:

646

Non-cookie 24h:

2051

Wszystkich:

178944

O c z e kuj ąc e t e mat y

Lista jest pusta.

Pokaż wszystkie (0)

Os tatnia Aktualizacja

2010-04-29 22:01:07

(wczoraj)

O st atnio akt ywni

dast19

0 min

Piotr Szawdyński

3 min

Iname

(√ιק)

15 min

szywro5

27 min

Saiph

32 min

markon

55 min

imandre

73 min

WunM

91 min

kuba1817

2 godz

killersft

2 godz

fish13

2 godz

kizia

2 godz

Kurs programowania w
C++

Wygodna Metoda nauczania.
Poznaj Tajniki języka C++

www.SzkolaLinuxa.pl

Programista Aplikacji
WWW

3-miesięczne szkolenie z
PHP, SQL, PostgreSQL.
Warszawa, Kraków

akademia-php.pl

[Kurs OpenGL, C++] I. Podstawy

http://kursy.ddt.pl/?LessonId=167

2 z 4

2010-04-30 14:21

background image

GLdouble

64

liczba zmiennoprzecinkowa

GLclampd

64

liczba zmiennoprzecinkowa z przedziału [0, 1]

Tabela 1: Typy danych w OpenGL

Specyfikacja nie okresla jakiego rodzaju typy danych sa uzyte w konkretnej implementacji biblioteki

OpenGL.Wszczególnosci typy danych OpenGL nie sa typami danych wystepujacymi w jezyku C (pomimo
czesciowej zgodności nazw). Implementacja OpenGL moze stosowac typy danych zawierające wieksza niz
minimalna ilosc bitów. prtbits oznacza minimalna ilosc bitów niezbedna do umieszczenia wskaznika. Stad typy
intptr i sizeiptr musza umozliwic zapamietanie dowolnego adresu. Poza wyzej wymienionymi typami danych
biblioteka OpenGL zawiera typ pusty GLvoid.

1.3. Układ współrzędnych

Biblioteka OpenGL stosuje prawoskretny układ współrzednych kartezjańskich (patrz rysunek 1), w którym

os OZ skierowana jest prostopadle do płaszczyzny monitora. Warto takze pamietac, ze literatura informatyczna
preferuje lewoskretne układy współrzednych z osia OZ skierowana w głab monitora.

Rysunek 1. Układ współrzędnych w OpenGL

1.4. Barwy

Biblioteka OpenGL wykorzystuje model barw RGB, opierajacy sie na trzech podstawowych barwach:

czerwonej, zielonej i niebieskiej. Barwa może byc opisywana bezposrednio przez wartosci składowych RGB,
badz w trybie indeksowym z uzyciem mapy (tablicy) barw. Obecne mozliwosci procesorów graficznych czynia
stosowanie trybu indeksowego nieopłacalnym, stad w przykładowych programach bedziemy uzywac pełnego
zakresu barw oferowanego przez model RGB, w razie potrzeby uzupełniajac składowe RGB o kanał alfa
(RGBA). Wybór trybu w jakim bedzie generowany obraz dokonywany jest podczas tworzenia okna renderingu.

1.5. Bufor ramki

W OpenGL w skład bufora ramki (pamieci obrazu) wchodza następujące elementy:

bufor koloru (ang. color buffer),
bufor głebokosci, nazywany takze buforem głebi (ang. depth buffer),
bufor szablonowy, nazywany takze buforem szablonu (ang. stencil buffer),
bufor akumulacyjny (ang. accumulation buffer).

Specyfikacja wymaga istnienie co najmniej jednego bufora koloru, ale implementacje biblioteki OpenGL

zawieraja najczesciej dwa bufory koloru: przedni i tylni. Zamiana buforów umozliwia płynne wyswietlenie
animacji - jeden bufor jest aktualnie prezentowany na ekranie monitora, a drugi słuzy do generowania nowej
sceny 3D. Ponadto implementacja OpenGL może zawierac lewe i prawe bufory koloru, które umozliwiaja
tworzenie obrazów stereoskopowych. Bufor głebokosci uzywany jest podczas działania algorytmu Z-bufor,
którego zadaniem jest ukrywanie niewidocznych powierzchni. Bufor szablonu słuzy do ograniczenia obszaru
renderingu do wybranej czesci okna i w implementacjach czesto jest łaczony z buforem głebokosci. Ostatni z
wymienionych elementów ramki - bufor akumulacyjny, umozliwia łaczenie kilku obrazów w celu uzyskania
okreslonego efektu koncowego. Wybór, które bufory wchodza w skład ramki dokonuje sie podczas tworzenia
okna renderingu.

1.6. Okno renderingu

Jedna z konsekwencji sprzetowej i systemowej niezaleznosci biblioteki OpenGL jest brak jakichkolwiek

funkcji obsługujacych komunikacje z uzytkownikiem, w tym obsługi okien, klawiatury i myszki. Wiekszosc
graficznych systemów operacyjnych posiada jednak specjalizowane funkcje pozwalające na obsługe okna
renderingu OpenGL. Przykładowo X Windows zawiera biblioteke GLX, Microsoft Windows biblioteke WGL,
IBM OS/2 biblioteke PGL, a Mac OS X az trzy biblioteki: AGL, CGL i NSGL. Takze systemy wbudowane,
korzystajace ze znacznie skromniejszej biblioteki OpenGL ES (ang. OpenGL Embedded Systems), zawieraja
biblioteke narzedziowa EGL. Oczywiscie stosowanie rozwiazan specyficznych dla danego systemu operacyjnego
powoduje, ze danego programu nie mozna skompilowac i uruchomic w innym systemie operacyjnym bez
dokonania szeregu zmian w tekscie zródłowym. Rozwiazanie tego problemu stanowia biblioteki oferujace jeden,
niezalezny od systemu operacyjnego, interfejs do obsługi okien i komunikatów.

Pierwsza biblioteka tego typu była biblioteka AUX (ang. Auxiliary Library), zwana takze pod nazwa

[Kurs OpenGL, C++] I. Podstawy

http://kursy.ddt.pl/?LessonId=167

3 z 4

2010-04-30 14:21

background image

GLAUX. Przy jej pomocy zostały napisane m.in. przykłady z pracy [3]. Jednak najwieksza popularnosc zdobyła
biblioteka GLUT (ang. OpenGL Utility Toolkit), opracowana i rozwijana w latach 1994-1998 przez Marka J.
Kilgarda. Jej autor rozwinał idee zapoczątkowane przez twórców biblioteki AUX, co ułatwia konwersje
programów korzystających z tej biblioteki (patrz skrypt aux2glut.sed). Bibliotek GLUT, choc od kilku lat nie
rozwijana (ostatnia wersja to 3.6), jest ciagle najbardziej popularna i powszechnie stosowana wieloplatformowa
biblioteka słuzaca do uruchamiania programów w OpenGL. Stad naturalna decyzja o wyborze tej biblioteki przy
pisaniu przykładowych programów.

1.7. Maszyna stanów

Maszyna stanów OpenGL to po prostu zbiór wszystkich zmiennych wewnętrznych (zmiennych stanu) i

ustawien biblioteki. Wiele zmiennych stanu jest dwustanowych, inne maja wartosci całkowite lub
zmiennoprzecinkowe. Wazna cecha maszyny stanów OpenGL jest zachowywanie zmiennych stanu do czasu, az
zostana one zmienione przez jakas funkcje. Pozwala to na prosta optymalizacje programów poprzez oddzielenie i
jednokrotne wywołanie grupy funkcji ustawiajacych wartosci tych zmiennych stanu, które nie ulegaja dalszym
zmianom.

1.8. Obsługa błędów

Wazne znaczenie w bibliotece OpenGL spełniaja zmienne stanu oznaczające wystapienie błedu. Informacje

o kodzie biezacego błedu zwraca funkcja:

GLenum glGetError (

void

)

Oto znaczenie poszczególnych kodów błedów:

GL NO ERROR - brak błedu,
GL INVALID ENUM - argument typu wyliczeniowego poza dopuszczalnym zakresem,
GL INVALID VALUE - argument liczbowy poza dopuszczalnym zakresem,
GL INVALID OPERATION - operacja niewykonalna w obecnym stanie,
GL STACK OVERFLOW - operacja spowodowałaby przepełnienie stosu,
GL STACK UNDERFLOW - operacja spowodowałaby niedomiar stosu,
GL OUT OF MEMORY - brakuje pamieci do wykonania operacji,
GL TABLE TOO LARGE - wskazana tablica jest za duza.

Wystapienie błedu nie powoduje przerwania wykonywania programu - nie jest wykonywana jedynie funkcja

odpowiedzialna za jego powstanie. Wyjatek stanowi wystapienie błedu o kodzie GL OUT OF MEMORY, który
powoduje powstanie stanu nieokreslonego. Uwage nalezy zwrócic na mechanizm przechowywania kodów
błedów. Kazdy rodzaj błedu jest oddzielnie zapamietywany, a kazdorazowe wywołanie funkcji glGetError zwraca
kod tylko jednego błedu. Stad w przypadku sprawdzania wystapienia błedu niezbedne jest wywoływanie funkcji
glGetError tak długo, az zwrócona zostanie wartosc GL NO ERROR. Biblioteka GLU ma odrebne kody błedów
bedace odpowiednikami kodów błedów OpenGL: GLU INVALID OPERATION, GLU INVALID ENUM, GLU -
INVALID VALUE i GLU OUT OF MEMORY. Ciag znaków opisujacy kod błedu biblioteki OpenGL oraz GLU,
wskazany w parametrze errorCode, zwraca funkcja:

const

GLubyte *gluErrorString (GLenum errorCode)

Przykładowo bład o kodzie GL INVALID VALUE spowoduje zwócenie ciagu znaków „invalid value”.

1.9. Źródło materiału

Materiał został pobrany ze strony

http://januszg.hg.pl/opengl/

, za uprzednim otrzymaniem zgody od jego

autora. Podziekowania dla

Janusza Ganczarskiego

za udostępnienie materiałów

Kurs OpenGL, C++

Następna lekcja

Wsz e lkie prawa z ast rz e ż one . Aut or: ź ródło z e wnę t rz ne

Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub
rozpowszechnianie treści bez wyraźnej zgody jego autora jest zabronione.

Powrót

Historia odwiedzonych stron

O portalu

Archiwum

Historia

Indeks

Regulamin

Wyszukiwarka

Linki

© Wszelkie prawa zastrzeżone 2005-2010

Czas wygenerowania strony: 0.054s

Autor: Piotr Szawdyński

[Kurs OpenGL, C++] I. Podstawy

http://kursy.ddt.pl/?LessonId=167

4 z 4

2010-04-30 14:21


Wyszukiwarka

Podobne podstrony:
Kurs AutoCAD podstawy
Kurs komputerowy podstawowy program300408
kurs html podstawy tworzenia stron www RHQWUXUAVSLOSX6ABOMEHGX52LV2WV67LZXY6RQ
Kurs Excella - Podstawy, informatyczne
KURS EXCEL podstawowy
kurs oracle podstawy sql 4FTEY3ZEMDW5YMC7JVMVHLV3IJIVX2DSWAXXO3Y
opengl podstawy
OpenGL Podstawy programowania grafiki 3D opglwp
KURS ŁĄCZNOŚCI–ZAKRES PODSTAWOWY ETAP 1 CZĘŚĆ 4
Ajax Kurs od podstaw Część 3 Ajax, PHP i pliki tekstowe
[Kurs OpenGL, C++] VII Wie
[Kurs OpenGL, C++] VIII Ko
Akademia księgowości kurs od podstaw
KURS ŁĄCZNOŚCI–ZAKRES PODSTAWOWY ETAP 1 CZĘŚĆ 1
[Kurs OpenGL, C++] IV Prze

więcej podobnych podstron