Specyfikacja OpenGL Podstawy programowania grafiki komputerowej*

Podobne dokumenty
Co to jest OpenGL? Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. OpenGL - Achitektura. OpenGL - zalety. olas@icis.pcz.

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

OpenGL i Qt. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Janusz Ganczarski. OpenGL Pierwszy program

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Programowanie warstwy wizualnej gry

OpenGL oświetlenie i tekstury. OpenGL oświetlenie. Bogdan Kreczmer.

Materiały. Dorota Smorawa

GRAFIKA CZASU RZECZYWISTEGO Wstęp do programowania grafiki czasu rzeczywistego.

8 Przygotował: mgr inż. Maciej Lasota

Światła i rodzaje świateł. Dorota Smorawa

2 Przygotował: mgr inż. Maciej Lasota

OpenGL - Open Graphics Library. Programowanie grafiki komputerowej. OpenGL 3.0. OpenGL - Architektura (1)

6 Przygotował: mgr inż. Maciej Lasota

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Wizualizacja 3D. dr inż. Marcin Gabryel

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Wykład 4. Rendering (1) Informacje podstawowe

OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

3 Przygotował: mgr inż. Maciej Lasota

1 Podstawy c++ w pigułce.

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Programowanie współbieżne i rozproszone

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Programowanie obiektowe zastosowanie języka Java SE

Podstawy programowania w języku C++ Zadania

OpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Programowanie na poziomie sprzętu. Programowanie w Windows API

1 Podstawy c++ w pigułce.

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

System zarządzający grami programistycznymi Meridius

Światło. W OpenGL można rozróżnić 3 rodzaje światła

1 Temat: Vertex Shader

GRAFIKA KOMPUTEROWA 10: Antyaliasing

Moc płynąca z kart graficznych

Wprowadzenie do QT OpenGL

Programowanie Obiektowew języku C++ Zadania L4

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30

Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Technologie obiektowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie Obiektowew języku C++ Zadania L2

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Algorytm. a programowanie -

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

Grafika komputerowa i wizualizacja

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Programowanie obiektowe

GRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów

76.Struktura oprogramowania rozproszonego.

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PRZEKROJOWY.

1 Wprowadzenie do algorytmiki

Zaawansowany kurs języka Python

Wykład I. Wprowadzenie do baz danych

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Temat: Wprowadzenie do OpenGL i GLUT

2 Przygotował: mgr inż. Maciej Lasota

Wstęp Podstawy Pierwszy program Definiowanie sceny 3D Przekształcenia geometryczne... 47

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

Programowanie procesorów graficznych GPGPU

Gry Komputerowe Laboratorium 1. Zajęcia organizacyjne Animacja z uwzględnieniem czasu. mgr inż. Michał Chwesiuk 1/22. Szczecin,

Podstawy Programowania C++

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania KOMPUTEROWE SYSTEMY STEROWANIA (KSS)

System komputerowy. Sprzęt. System komputerowy. Oprogramowanie

Program szkolenia PODSTAWY VBA (VISUAL BASIC FOR APPLICATIONS) I FORMULARZE.

Plan wykładu. Akcelerator 3D Potok graficzny

Działanie systemu operacyjnego

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Podstawy programowania skrót z wykładów:

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Generated by Foxit PDF Creator Foxit Software For evaluation only. System Szablonów

Przeciążanie operatorów

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Dokumentacja aplikacji Szachy online

Wprowadzenie. Dariusz Wawrzyniak 1

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Programowanie proceduralne w języku C++ Podstawy

Zapisywanie algorytmów w języku programowania

EGZAMIN MATURALNY Z INFORMATYKI WYBRANE: ... (system operacyjny) ... (program użytkowy) ... (środowisko programistyczne)

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

Bazy danych 2. Wykład 1

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

PRZEWODNIK PO PRZEDMIOCIE

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Aplikacje w środowisku Java

Transkrypt:

Specyfikacja OpenGL Podstawy programowania grafiki komputerowej* Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki Stosowanej i Modelowania 2 Uniwersytet im. Jana Kochanowskiego w Kielcach Wydział Matematyczno-Przyrodnmiczy Instytut Fizyki Zakład Informatyki Październik 2016 *na podstawie materiałów ze strony http://januszg.hg.pl/opengl/ Mirosław Głowacki (AGH, UJK) OpenGL 2016 1 / 35

Spis treści 1 Wstęp 2 Składnia i typy 3 Operacje OpenGL i potok renderingu Mirosław Głowacki (AGH, UJK) OpenGL 2016 2 / 35

Spis treści 1 Wstęp 2 Składnia i typy 3 Operacje OpenGL i potok renderingu Mirosław Głowacki (AGH, UJK) OpenGL 2016 3 / 35

Co rozumiemy pod hasłem OpenGL Biblioteka OpenGL (ang. Open Graphics Library) powstała w 1992 roku na bazie języka GL opracowanego przez firmę Silicon Graphics Inc. (SGI) na potrzeby stacji graficznych IRIS. Gdy Microsoft zaimplementował wersję 1.1 biblioteki w systemi Windows stała się ona niezmiernie popularna. Obecnie jest to podstawowa niskopoziomowa biblioteka graficzna 3D, obsługiwana przez wszystkie liczące się systemy operacyjne oraz większość procesorów graficznych. OpenGL charakteryzuje się: 1 niezależnością od platformy sprzętowej, 2 ogólnie dostępną specyfikacją. Czyni to z OpenGL standard powszechnie wykorzystywany przez producentów oprogramowania użytkowego i gier. Mirosław Głowacki (AGH, UJK) OpenGL 2016 4 / 35

Rozwój OpenGL Rozwojem OpenGL zajmowała się do lipca 2006 organizacja ARB (ang. Architecture Review Board), w skład której wchodzili przedstawiciele firm 3DLabs, Apple, ATI, Dell, IBM, Intel, NVIDIA, SGI i Sun. Obecnie zadania te przejął Kronos Group, która to organizacja zajmuje się również: OpenCL, tj. API wspomagającym pisanie aplikacji na różne jednostki obliczeniowe (CPU, GPU, itd.) OpenGL ES, przenośną wersją OpenGL. Taki sposób wprowadzania zmian w bibliotece zapewnia zachowanie niezależności OpenGL od jednej platformy sprzętowej lub programowej przy jednoczesnym uwzględnieniu do najnowszych osiągnięć w dziedzinie grafiki komputerowej. Mirosław Głowacki (AGH, UJK) OpenGL 2016 5 / 35

Biblioteka GLU Ważnym uzupełnieniem OpenGL jest biblioteka GLU (ang. OpenGL Graphics System Utility Library) Zawiera ona szereg dodatkowych narzędzi do obsługi: macierzy, teksturowania, wypełniania wielokątów, krzywych i płatów NURBS, itp. Mirosław Głowacki (AGH, UJK) OpenGL 2016 6 / 35

Spis treści 1 Wstęp 2 Składnia i typy 3 Operacje OpenGL i potok renderingu Mirosław Głowacki (AGH, UJK) OpenGL 2016 7 / 35

Procedury i funkcje OpenGL Polecenia OpenGL określane są jako funkcje lub procedury. Znaczna część funkcji wykonuje te same operacje, ale rożni się zbiorem argumentów. Przyjęta konwencja nazewnictwa określa liczbę i rodzaj parametrów funkcji według schematu: rtype Name {1 2 3 4} {b s i i64 f d ub us ui ui64} {v} ([args,] T arg1,..., T argn [,args]) Element rtype Name Znaczenie wartość zwracana przez funkcję nazwa funkcji poprzedzona przedrostkiem gl (glu dla funkcji z biblioteki GLU) Mirosław Głowacki (AGH, UJK) OpenGL 2016 8 / 35

Procedury i funkcje OpenGL Element Znaczenie 1, 2, 3, 4 liczba argumentów funkcji b argumenty typu GLbyte s argumenty typu GLshort i argumenty typu GLint i64 argumenty typu GLint64 f argumenty typu GLfloat d argumenty typu GLdouble ub argumenty typu GLubyte us argumenty typu GLushort ui argumenty typu GLuint ui64 argumenty typu GLuint64 v tablica jako argument funkcji - brak specyfikacji liczby argumentów funkcji Mirosław Głowacki (AGH, UJK) OpenGL 2016 9 / 35

Procedury i funkcje OpenGL Zasady umieszczania argumentów funkcji: Argumenty poleceń umieszczone w nawiasach [args,] i [, args] mogą, ale nie muszą być obecne. Argumenty od arg1 do argn mają typ T, który odpowiada jednemu z okeśleń typu b s i i64 f d ub us ui ui64. Jeśli ostatnim znakiem nie jest v, a {1 2 3 4} występuje, to N jest podane przez {1 2 3 4}. Jeśli ostatnim znakiem nie jest v, a {1 2 3 4} nie występuje, to liczba argumentów jest z góry ustalona. Jeśli ostatnim znakiem jest v, to jest obecny tylko argument arg1 i jest nim tablica N-wartości wskazanego typu Mirosław Głowacki (AGH, UJK) OpenGL 2016 10 / 35

Procedury i funkcje OpenGL Przykładowo grupa funkcji gluniform* w specyfikacji OpenGL jest opisywana następująco: void Uniform {1234} {if} ( int location, T value ); co wskazuje na osiem deklaracji funkcji: void Uniform1i( int location, int value ); void Uniform1f( int location, float value ); void Uniform2i( int location, int v0, int v1 ); void Uniform2f( int location, float v0, float v1 ); void Uniform3i( int location, int v0, int v1, int v2 ); void Uniform3f( int location, float v0, float v2, float v2 ); void Uniform4i( int location, int v0, int v1, int v2, int v3 ); void Uniform4f( int location, float v0, float v1, float v2, float v3 ); Mirosław Głowacki (AGH, UJK) OpenGL 2016 11 / 35

Typy danych OpenGL Typy danych dostępne w bibliotece OpenGL. Typ bitów Opis OpenGL (min.) GLboolean 1 typ logiczny GLbyte 8 liczba całkowita ze znakiem (U2, tzn. w kodzie uzupełnień do 2) GLubyte 8 liczba całkowita bez znaku GLchar 8 ciąg 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 Mirosław Głowacki (AGH, UJK) OpenGL 2016 12 / 35

Typy danych OpenGL Typ bitów Opis OpenGL (min.) GLfixed 32 dwie 16-bitowe liczby całkowite ze znakiem (U2) (odpowiednik liczb zmiennoprzecinkowych) GLint64 64 liczba całkowita ze znakiem (U2) GLuint64 64 liczba całkowita bez znaku GLsizei 32 nieujemna liczba całkowita GLenum 32 typ wyliczeniowy całkowity GLintptr ptrbits wskaźnik na liczbę całowitą ze znakiem (U2) GLsizeiptr ptrbits wskaźnik na nieujemna liczbę całkowita GLsync ptrbits uchwyt obiektu synchronizacji GLbitfield 32 pole bitowe Mirosław Głowacki (AGH, UJK) OpenGL 2016 13 / 35

Typy danych OpenGL Typ bitów Opis OpenGL (min.) GLhalf GLfloat 16 32 liczba zmiennoprzecinkowa połówkowej precyzji zakodowana jako skalar bez znaku liczba zmiennoprzecinkowa GLclampf 32 liczba zmiennoprzecinkowa z przedziału [0, 1] GLdouble 64 liczba zmiennoprzecinkowa podwójnej precyzji GLclampd 64 liczba zmiennoprzecinkowa z przedziału [0, 1] Mirosław Głowacki (AGH, UJK) OpenGL 2016 14 / 35

Typy danych OpenGL Specyfikacja nie określa jakiego rodzaju typy danych są użyte w konkretnej implementacji biblioteki OpenGL Specyfika typów OpenGL W szczególnosci typy danych OpenGL nie są typami występującymi w językach programowania Implementacja OpenGL może stosować typy danych zawierające większą niż minimalna liczbę bitów. Określenie prtbits oznacza minimalną liczbę bitów niezbędną do umieszczenia wskaźnika Stąd typy GLintptr i GLsizeiptr muszą umożliwić zapamiętanie dowolnego adresu. Biblioteka OpenGL zawiera typ pusty GLvoid. Mirosław Głowacki (AGH, UJK) OpenGL 2016 15 / 35

Układ współrzędnych i barwy Układ współrzędnych Biblioteka OpenGL stosuje prawoskrętny układ współrzędnych kartezjańskich, w którym oś OZ skierowana jest prostopadle do płaszczyzny rzutni. Warto także pamiętać, ze literatura informatyczna preferuje lewoskrętne układy współrzędnych z osią OZ skierowana w głąb monitora. Model barw Biblioteka OpenGL wykorzystuje model barw RGB, opierający się na trzech podstawowych barwach: czerwonej, zielonej i niebieskiej, w razie potrzeby uzupełniając składowe RGB o kanał alfa ( RGBA ). Wybór trybu w jakim będzie generowany obraz dokonywany jest podczas tworzenia okna renderingu. Mirosław Głowacki (AGH, UJK) OpenGL 2016 16 / 35

Bufor ramki W OpenGL w skład bufora ramki (pamięci obrazu) wchodzą następujące elementy: 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). Bufor koloru Specyfikacja OpenGL wymaga co najmniej jednego bufora koloru Implementacje biblioteki OpenGL zawierają najczęściej dwa bufory koloru: przedni i tylni - ich zamiana umożliwia płynne wyświetlenie animacji gdyż jeden bufor jest aktualnie prezentowany, a drugi służy do generowania nowej sceny 3D. Mirosław Głowacki (AGH, UJK) OpenGL 2016 17 / 35

Bufor ramki Ponadto implementacja OpenGL może zawierać lewe i prawe bufory koloru, które umożliwiają tworzenie obrazów stereoskopowych. Bufor głębokości używany jest podczas działania algorytmu Z-bufora, którego zadaniem jest ukrywanie niewidocznych powierzchni. Bufor szablonu służy do ograniczenia obszaru renderingu do wybranej części okna i w implementacjach często jest łączony z buforem głębokości. Ostatni z wymienionych elementów ramki - bufor akumulacyjny, umożliwia łączenie kilku obrazów w celu uzyskania określonego efektu końcowego. Wybór, które bufory wchodzą w skład ramki dokonuje się podczas tworzenia okna renderingu. Mirosław Głowacki (AGH, UJK) OpenGL 2016 18 / 35

Okno renderingu Jedna z konsekwencji sprzętowej i systemowej niezależności biblioteki OpenGL jest brak jakichkolwiek funkcji obsługujących komunikację z użytkownikiem, w tym obsługi okien, klawiatury i myszki. Większość graficznych systemów operacyjnych posiada jednak specjalizowane funkcje pozwalające na obsługę okna renderingu OpenGL. Przykładowo: X Windows zawiera bibliotekę GLX, Microsoft Windows bibliotekę WGL, Mac OS X aż trzy biblioteki: AGL, CGL i NSGL. Także systemy wbudowane, korzystające ze znacznie skromniejszej biblioteki OpenGL ES (ang. OpenGL Embedded Systems), zawierają bibliotekę narzędziową EGL. Mirosław Głowacki (AGH, UJK) OpenGL 2016 19 / 35

Okno renderingu Oczywiście stosowanie rozwiązań specyficznych dla danego systemu operacyjnego powoduje, ze danego programu nie można skompilować i uruchomić w innym systemie operacyjnym bez dokonania szeregu zmian w tekście źródłowym. Rozwiązanie problemu stanowią biblioteki oferujące jeden, niezależny od systemu operacyjnego, interfejs do obsługi okien i komunikatów. Pierwszą biblioteką tego typu była biblioteka AUX (ang. Auxiliary Library), zwana także pod nazwa GLAUX. Największą popularność zdobyła jednak biblioteka GLUT (ang. OpenGL Utility Toolkit), opracowana przez Marka J. Kilgarda - choć od dawna nierozwijana to jest ciągle najbardziej popularną i powszechnie stosowana wieloplatformową biblioteką służącą do uruchamiania programów w OpenGL. Mirosław Głowacki (AGH, UJK) OpenGL 2016 20 / 35

Maszyna stanu Maszyna stanu OpenGL to zbiór wszystkich zmiennych wewnętrznych (zmiennych stanu) i ustawień biblioteki. Wiele zmiennych stanu jest dwustanowych - inne mają wartości całkowite lub zmiennoprzecinkowe. Istotna cecha maszyny stanu Ważną cecha maszyny stanu OpenGL jest zachowywanie zmiennych stanu do czasu, aż zostaną one zmienione przez jakąś funkcję. Pozwala to na prosta optymalizację programów poprzez oddzielenie i jednokrotne wywołanie grupy funkcji ustawiających wartości tych zmiennych stanu, które nie ulegają dalszym zmianom. Mirosław Głowacki (AGH, UJK) OpenGL 2016 21 / 35

Obsługa błędów Ważne znaczenie w bibliotece OpenGL spełniają zmienne stanu oznaczające wystąpienie błędu. Uwaga Nie wszystkie błędy spowodują zatrzymanie wykonywania programu, ale są zapamiętywane przez system. Nie jest natomiast wykonywana funkcja odpowiedzialna za powstanie błędu. Wyjątek stanowi wystąpienie błędu o kodzie GL_OUT_OF_MEMORY, który powoduje powstanie stanu nieokreślonego. Informacje o kodzie bieżącego błędu zwraca funkcja: GLenum glgeterror( void ) Mirosław Głowacki (AGH, UJK) OpenGL 2016 22 / 35

Znaczenie 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. Mirosław Głowacki (AGH, UJK) OpenGL 2016 23 / 35

Przechowywania kodów błędów Każdy rodzaj błędu jest oddzielnie zapamietywany, a każdorazowe wywołanie funkcji glgeterror zwraca kod tylko jednego błędu. Sprawdzanie błędów polega na wywoływaniu 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. Mirosław Głowacki (AGH, UJK) OpenGL 2016 24 / 35

Przechowywania kodów błędów Ciąg znaków opisujący kod błędu biblioteki OpenGL oraz GLU, wskazany w parametrze errorcode, zwraca funkcja: const GLubyte * gluerrorstring( GLenum errorcode ) Typowy kod odczytujący błędy zgłaszane przez bibliotekę OpenGL ma postać pętli: GLenum error; while( ( error = glgeterror() )!= GL_NO_ERROR ) { // obsługa błędu } Mirosław Głowacki (AGH, UJK) OpenGL 2016 25 / 35

Spis treści 1 Wstęp 2 Składnia i typy 3 Operacje OpenGL i potok renderingu Mirosław Głowacki (AGH, UJK) OpenGL 2016 26 / 35

Potok renderingu OpenGL koncentruje się jedynie na renderingu do bufora ramki oraz czytaniu wartości zapisanych w tym buforze. Biblioteka nie ma wsparcia dla innych urządzeń, takich jak myszy i klawiatury, stąd trzeba używać innych mechanizmów w celu przetworzenia informacji wprowadzanych przez użytkownika. Wprowadzane polecenia OpenGL: określają obiekty geometryczne, które mają zostać narysowane oraz kontrolują obsługę obiektów przez różne etapy renderingu. Mirosław Głowacki (AGH, UJK) OpenGL 2016 27 / 35

Polecenia OpenGL Zasady obsługi poleceń OpenGL: 1 polecenia OpenGL są zawsze przetwarzane w kolejności, w jakiej zostały przekazane do OpenGL, 2 ewentualne opóźnienie realizacji skutków danego polecenia nie mogą mieć wpływu na wyniki późniejszych poleceń, 3 operacje pobierania zmiennych stanu, zapytania i odczyty pikseli zwracają stan odpowiadający kompletnemu wykonaniu wszystkich wcześniej wywoływanych poleceń OpenGL (poza przypadkami wyraźnie określonymi w specyfikacji), 4 OpenGL wiąże dane w chwili wywoływania polecenia, a wszelkie późniejsze zmiany danych nie mają wpływu na jego wynik. Mirosław Głowacki (AGH, UJK) OpenGL 2016 28 / 35

Etapy potoku renderingu 1 Pierwszy etap potoku renderingu operuje na prymitywach geometrycznych : punktach, segmentach linii i wielokątach które są opisane przez wierzchołki. W tym etapie wierzchołki są przekształcane i oświetlane, a prymitywy są obcinane do bryły widoku w celu przygotowania do następnego etapu - rasteryzacji. 2 Rasteryzator generuje szereg fragmentów - elementów bufora ramki używanych do dwuwymiarowego opisu prymitywów. 3 Fragmenty są przekazywane do następnego etapu - na poszczególnych fragmentach wykonywanych jest szereg operacji przed finalnym zapisem w buforze ramki. Mirosław Głowacki (AGH, UJK) OpenGL 2016 29 / 35

Model działania OpenGL Biblioteka OpenGL wykorzystuje model działania klient-serwer. W typowym przypadku klientem OpenGL jest aplikacja wykorzystująca polecenia OpenGL, a serwerem OpenGL aktualnie używana implementacja biblioteki (np. w sterowniku karty graficznej) Implementacja biblioteki OpenGL przetwarza polecenia przesłane przez klienta OpenGL. Serwer OpenGL może, ale nie musi działać na tym samym komputerze co klient OpenGL. Biblioteka OpenGL została zaprojektowana do obsługi wielu rodzajów sprzętu graficznego i jej specyfikacja zawiera opis zalecanych rozwiązań, z wyraźnie wskazanymi możliwymi od nich odstępstwami. Wariacje implementacji OpenGL powodują, że poszczególne implementacje nie muszą być zgodne "piksel do piksela" Mirosław Głowacki (AGH, UJK) OpenGL 2016 30 / 35

Zmienne stanu Wyróżniamy dwa rodzaje zmiennych stanu: zmienne serwera OpenGL umiejscowione serwerze OpenGL. zmienne klienta OpenGL umiejscowione w kliencie OpenGL Większość zmiennych stanu OpenGL wchodzi w skład serwera OpenGL. Każdy egzemplarz kontekstu OpenGL zawiera jeden pełny zestaw zmiennych stanu serwera OpenGL. Natomiast każde połączenie klienta serwerem zawiera odrębny zbiór zmiennych stanu zarówno klienta jak i serwera OpenGL. Specyfikacja przewiduje możliwość współdzielenia niektórych zmiennych stanu w ramach różnych kontekstów renderingu. Mirosław Głowacki (AGH, UJK) OpenGL 2016 31 / 35

Zmienne stanu Zmienne stanu modyfikowane są, w sposób jawny lub nie, przez cały szereg poleceń biblioteki OpenGL Do odczytu zmiennych stanu służy grupa funkcji glget*, z których najbardziej podstawowe są następujące: void glgetbooleanv( GLenum pname, GLboolean *params ); void glgetintegerv( GLenum pname, GLint *params ); void glgetinteger64v( GLenum pname, GLint64 *params ); void glgetfloatv( GLenum pname, GLfloat *params ); void glgetdoublev( GLenum pname, GLdouble *params ); Parametr pname określa, którą wartość maszyny stanów OpenGL chcemy pobrać, a params wskaźnik na zwracaną wartość. W zależności od rodzaju pobieranej zmiennej tablica params może zawierać pojedynczą zmienną lub tablicę zmiennych. Mirosław Głowacki (AGH, UJK) OpenGL 2016 32 / 35

Zmienne stanu Podobna grupa funkcji obsługuje tzw. indeksowane zmienne stanu, których wartości mogą różnić się dla poszczególnych indeksów zawartych w parametrze index : void glgetbooleani_v( GLenum target, GLuint index, GLboolean *data ); void glgetintegeri_v( GLenum target, GLuint index, GLint *data ); void glgetinteger64i_v( GLenum target, GLuint index, GLint64 *data ); void glgetfloati_v( GLenum target, GLuint index, GLfloat *data ); void glgetdoublei_v( GLenum target, GLuint index, GLdouble *data ); Mirosław Głowacki (AGH, UJK) OpenGL 2016 33 / 35

Zmienne stanu Dostępne są jeszcze dwie funkcje pobierające informacje o włączeniu lub wyłączeniu danej właściwości maszyny stanu OpenGL (dwuwartościowe zmienne stanu). Pierwsza z nich obsługuje pojedyncze właściwość wskazaną w parametrze cap, druga właściwość indeksowaną, której indeks zawiera parametr index : GLboolean glisenabled( GLenum cap ); GLboolean glisenabledi( GLenum target, GLuint index ); Mirosław Głowacki (AGH, UJK) OpenGL 2016 34 / 35

Zmienne stanu Włączanie i wyłącznie zmiennych stanu określających dwustanowe właściwości maszyny stanu umożliwiają funkcje: void gldisable( GLenum cap ); void glenable( GLenum cap ); void glenablei( GLenum target, GLuint index ); void gldisablei( GLenum target, GLuint index ); które w wersji indeksowej działają na zmiennej o indeksie wskazanym w parametrze index. Mirosław Głowacki (AGH, UJK) OpenGL 2016 35 / 35