Tak jak już obiecałam postaram się rozszerzyć wiedzę na temat biblioteki OpenGL. Post ten będzie skupiał się na teorii ogólnie związanej z tą biblioteką, a mianowicie umieszczę informację o układzie współrzędnych, o barwach, buforze ramki, a także o oknie renderingu.
Układ współrzędnych
Biblioteka OpenGL stosuje prawoskrętny
układ współrzędnych kartezjańskich (pokazane na rysunku), w
którym os OZ skierowana jest prostopadle do płaszczyzny monitora.
Warto także pamiętać, ze literatura informatyczna preferuje
lewoskrętne układy współrzędnych z osia OZ skierowana w głąb
monitora.
Układ współrzędnych w OpenGL
Barwy
Bufor ramki
- bufor koloru (ang. color buffer),
- bufor głębokości, nazywany także buforem głębi (ang. depth buffer),
- bufor szablonowy, nazywany także buforem szablonu (ang. stencil buffer),
- bufor akumulacyjny (ang. accumulation buffer).
Okno renderingu
Pierwsza biblioteka tego typu była biblioteka AUX (ang. Auxiliary Library), zwana także pod nazwa GLAUX. Jednak największą popularność zdobyła biblioteka GLUT (ang. OpenGL Utility Toolkit), opracowana i rozwijana w latach 1994-1998 przez Marka J. Kilgarda. Jej autor rozwinął 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, choć od kilku lat nie rozwijana (ostatnia wersja to 3.6), jest ciągle najbardziej popularna i powszechnie stosowana wieloplatformowa biblioteka służąca do uruchamiania programów w OpenGL. Stad naturalna decyzja o wyborze tej biblioteki przy pisaniu przykładowych programów.
Maszyna stanów
Maszyna stanów OpenGL to po prostu zbiór wszystkich zmiennych wewnętrznych (zmiennych stanu) i ustawień biblioteki. Wiele zmiennych stanu jest dwustanowych, inne maja wartości całkowite lub zmiennoprzecinkowe. Ważna cecha maszyny stanów OpenGL jest zachowywanie zmiennych stanu do czasu, aż zostaną one zmienione przez jakąś funkcje. Pozwala to na prosta optymalizacje programów poprzez oddzielenie i jednokrotne wywołanie grupy funkcji ustawiających wartości tych zmiennych stanu, które nie ulegają dalszym zmianom.
Obsługa błędów
Ważne znaczenie w bibliotece OpenGL
spełniają zmienne stanu oznaczające wystąpienie błędu
Informacje o kodzie bieżącego błędu zwraca funkcja:
C/C++
GLenum glGetError( void )
Oto znaczenie poszczególnych kodów
błędów:
- GL_NO_ERROR - brak błędu,
- 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 pamięci do wykonania operacji,
- GL_TABLE_TOO_LARGE - wskazana tablica jest za duża.
Wystąpienie błędu nie powoduje
przerwania wykonywania programu - nie jest wykonywana jedynie funkcja
odpowiedzialna za jego powstanie. Wyjątek stanowi wystąpienie błędu
o kodzie GL_OUT_OF_MEMORY, który powoduje powstanie stanu
nieokreślonego Uwagę należy zwrócić na mechanizm przechowywania
kodów błędów Każdy rodzaj błędu jest oddzielnie zapamiętywany,
a każdorazowe wywołanie funkcji glGetError zwraca kod tylko jednego
błędu Stad w przypadku sprawdzania wystąpienia błędu niezbędne
jest wywoływanie funkcji glGetError tak długo, aż zwrócona
zostanie wartość GL_NO_ERROR. Biblioteka GLU ma odrębne
kody błędów będące odpowiednikami kodów błędów OpenGL:
GLU_INVALID_OPERATION, GLU_INVALID_ENUM,
GLU_INVALID_VALUE i GLU_OUT_OF_MEMORY. Ciąg znaków
opisujący kod błędu biblioteki OpenGL oraz GLU, wskazany w
parametrze errorCode, zwraca funkcja:
C/C++
const
GLubyte * gluErrorString( GLenum errorCode )
Przykładowo błąd o kodzie
GL_INVALID_VALUE spowoduje zwrócenie ciągu znaków
"invalid value".
Best bets for soccer today - Sports Toto
OdpowiedzUsuńToday, goyangfc we're going to tell you a few key to checking into soccer betting apps. of the most popular casinosites.one soccer betting options and which wooricasinos.info ones sporting100 will งานออนไลน์