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

Save this PDF as:
 WORD  PNG  TXT  JPG

Wielkość: px
Rozpocząć pokaz od strony:

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

Transkrypt

1 w Qt i Qt Bogdan Kreczmer Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2019 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową. i Qt

2 w Qt Niniejsza prezentacja została wykonana przy użyciu systemu składu L A TEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: i Qt

3 w Qt 1 Ogólna charakterystyka 2 w Qt 3 Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia 4 i Qt

4 Geneza w Qt Ogólna charakterystyka (Open Graphics Library) specyfikuje i definiuje otwarte i uniwersalne API na potrzeby tworzenia grafiki 2D i 3D. Bazuje ona na pierwotnej koncepcji biblioteki IRIS GL tworzonej przez firmę Silicon Graphics Inc. Otwartą wersją biblioteki jest biblioteka Mesa. Historia w skrócie W 1992 powołana została grupa ARB (ang. Architectural Review Board). Zrzeszała ona 10 firm (3DLabs, Apple, ATI, Dell, Evans & Sutherland, Hewlett-Packard, IBM, Intel, Matrox, NVIDIA, SGI, Sun Microsystems). Grupa ta kontrolowała rozwój. W połowie 2006 komitet standaryzacyjny ARB zdecydował o wcieleniu ARB do Khronos. Od tego czasu Khronos nadzoruje rozwój i standaryzację. i Qt

5 Khronos w Qt Ogólna charakterystyka Grupa Khronos została założona przez firmy: ATI Technologies, Autodesk Media and Entertainment, Evans & Sutherland, Intel, NVIDIA, Silicon Graphics oraz Sun Microsystems. Celem grupy jest tworzenie otwartych standardów API, które umożliwia autoryzację i otwarzanie różnego typu mediów na różnych platformach i urządzeniach, w szczególności urządzeniach mobilnych. Ważniejsze specyfikacje i standaryzacje Grupy Khronos (od roku 2006), ES (ang. for Embedded Systems) przenośna wersja zaprojektowana w szczególności dla urządzeń mobilnych. Stanowi oficjalne API dla systemów Android i ios. Dla przeglądarek kompatibilnych z HTML5 stworzono osobną implementację WebGL. OpenCL API dla biblioteki wspmagającej pisanie aplikacji na różne jednostki obliczeniowe (np. CPU, GPU itd.) i Qt

6 Cechy w Qt Ogólna charakterystyka Biblioteka ma architekturę klient-serwer. Klientem jest aplikacja, która zleca wykonanie operacji rysowania. Serwerem jest aktualna implementacja biblioteki. Zazwyczaj proces serwera jest na tym samym komputerze, ale tak być nie musi. Projekt biblioteki zakłada, że możliwie najwięcej operacji jest realizowana sprzętowo. Aczkolwiek cała biblioteka może zostać również zaimplementowana w wersji programowej. Implementacja biblioteki jest niezależna od języka (posiada wiele dowiązań z różnych języków). nie jest związany z żadną konkretną platformą sprzętową. W tym sensie jest to biblioteka przenośna. jest ukierunkowana na renderowanie grafiki. Tym samym nie dostarcza żadnych mechanizmów związanych wejściem (klawiaturą, myszką itp.), wyjściem audio, czy też mechanizmami zarządzania oknami. i Qt

7 w Qt Cecha działania Ogólna charakterystyka Ma charakter maszyny stanu. Stan określany jest przez zbiór parametrów decydujących o trybie działania. Można je włączać lub wyłączać. Mogą też być zapamiętywane na stosie i później odtwarzane. Przykłady parametrów: macierze transformacji, kolor rysowania, rodzaj używanej linii, używana tekstura, sposób działania bufora Z, sposób rysowania wewnętrznych ścianek, i Qt

8 w Qt Ogólna charakterystyka Struktura aplikacji wykorzystującej kernel and video games.svg i Qt

9 w Qt Uzupełnienia biblioteki Ogólna charakterystyka GLU Graphics System Utility Library Zawiera szereg dodatkowych narzędzi, w tym do obsługi macierzy, odwzorowania tekstur, kafelkowania wielokątów, powierzchni drugiego stopnia oraz krzywych i powierzchni NURBS. NURBS Non-Uniform Rational B-Spline Jest to rodzaj modelu matematycznego stosowany w grafice komputerowej do generowania i reprezentowania krzywych i powierzchni. Pozwala na dużą eleastyczność zarówno na poziomie opisu analitycznego, jak też modelowania kształtów. Powierzchnie modelowane są z wykorzystaniem krzywych, których kształt określany jest za pomocą punktów kontrolnych tworzących wielobok kontrolny. GLUT The Utility Toolkit Niezależny od platformy toolkit umożliwiający pisanie programów wykorzystujących. Implementuje prosty interfejs aplikacji dla okienkowych programów. Przewidziany jest do pisania małych lub średnich aplikacji. i Qt

10 w Qt Przykładowe elementy API Ogólna charakterystyka ( glvertex3f(...); glvertex3fv(...); glvertex2i(...);... i Qt

11 w Qt Przykładowe elementy API Ogólna charakterystyka ( glvertex3f(...); glvertex3fv(...); glvertex2i(...);... i Qt

12 Konwencje nazw w Qt Ogólna charakterystyka glvertex3f(...); glvertex3fv(...); glvertex2i(...);... typ Nazwa b s i f d ub us ui v ([args,] T arg1,..., T argn [,args]) typ wartość zwracana przez funkcje Nazwa nazwa funkcji poprzedzona przedrostkiem gl lub glu dla funkcji z biblioteki GLU 1, 2, 3, 4 ilość 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 wartości, ilość argumentów nie jest jawnie określona T arg1,..., T argn argumenty funkcji i Qt

13 Typy w Qt Ogólna charakterystyka typ Nazwa b s i f d ub us ui v ([args,] T arg1,..., T argn [,args]) Typ Min. ilość bitów Znaczenie GLboolean 1 typ logiczny GLbyte 8 liczba całkowita ze znakiem GLubyte 8 liczba całkowita bez znaku GLchar 8 ciąg znaków tekstowych GLshort 16 liczba całkowita ze znakiem GLushort 16 liczba całkowita bez znaku GLint 32 liczba całkowita ze znakiem GLuint 32 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 GLsizeiptr ptrbits wskaźnik na nieujemna liczbę całkowita GLbitfield 32 pole bitowe GLfloat 32 liczba zmiennoprzecinkowa GLclampf 32 liczba zmiennoprzecinkowa z przedziału [0, 1] GLdouble 64 liczba zmiennoprzecinkowa GLclampd 64 liczba zmiennoprzecinkowa z przedziału [0, 1] i Qt

14 w Qt Wsparcie Qt dla Klasy Qt wspierające QGLWidget (stopniowo wycofywana) QWidget QWindow (dużo, dużo innych klas) Korzystanie z klas renderejuących grafikę Dziedziczenie i reimplementacja metod wirtualnych: initializegl() resizegl() paintgl() i Qt

15 libqglviewer w Qt Klasy Qt wspierające QGLViewer (oparta jest na QViewer) Korzystanie z klas QGLViewer Dziedziczenie i reimplementacja metod wirtualnych: initializegl() wywoływana przed pierwszym rysowaniem init() wywoływana przed pierwszym rysowaniem, po initializegl() resizegl() draw() współrzędne wierzchołków we współrzędnych świata, nie modyfikujemy macierzy projekcji paintgl() domyślna definicja metody pwoduje wywołanie meted klasy libqglviewer i Qt

16 libqglviewer w Qt Korzystanie z klas QGLViewer Dziedziczenie i reimplementacja metod wirtualnych: draw() współrzędne wierzchołków we współrzędnych świata, nie modyfikujemy macierzy projekcji paintgl() domyślna definicja metody pwoduje wywołanie meted klasy libqglviewer predraw() (lub predrawstereo() jeżeli wykorzystuje się displaysinstereo()) umieszcza kamerę we współrzędnych świata draw() (lub fastdraw() gdy dokonuje się przemieszczenia kamery) ta metoda powinna być redefinowana postdraw() wyświetla dodatkowe elementy graficzne np. osie układu współrzędnego i Qt

17 w Qt Ważniejsze funkcje z void glbegin(glenum mode) Tworzy elementarne obiekty na postawie wierzchołków zawartych między glbegin() i glend(). Wartości typu wyliczeniowego: GL POINTS, GL LINES, GL LINE STRIP, GL LINE LOOP, GL TRIANGLES, GL TRIANGLE STRIP, GL TRIANGLE FAN, GL QUADS, GL QUAD STRIP, and GL POLYGON. i Qt

18 w Qt Rodzaje źródeł światła Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Źródło światła może być punktowe. Jednak z takim źródłem stowarzyszone jest oświetlenie dookólne, które jest wynikiem wielokrotnych odbić światła od różnych powierzchni. Po wielu odbiciach światło to traci swoją pierwotną kierunkowość. W wyniku czego nie można określić jego pierwotnego pochodzenia. Światło to jednak znika po wyłączeniu jego pierwotnego źródła. Istnieje również ogólne rozproszone światło, które nie jest związane z żadnym źródłem. i Qt

19 Model oświetlenia w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Model oświetlenia obejmuje 4 składowe, które wyznaczane są niezależnie, a następnie sumowane. Tymi składowymi są następujące typy oświetlenia: dookólne (ang. ambient) pochodzi z wielokrotnych odbić, które uniemożliwiają wyznaczenie jego pierwotnego źródła. Gdy tego typu oświetlenie pada na powierzchnię, odbijane jest we wszystkich kierunkach w jednakowym stopniu. rozproszone (ang. diffuse) światło docierające z jednego określonego kierunku. Ta składowa daje intensywniejsze oświetlenie, gdy światło pada na wprost na powierzchnię, niż pod pewnym kątem. Jednak od powierzchni odbija się w jednakowy sposób we wszystkich kierunkach. zwierciadlane (ang. specular) światło pochodzi je jednego określone kierunku. Po odbiciu od powierzchni ma tendencję rozchodzić się, w kierunku jednym kierunku. Powierzchnie mogą mieć różne współczynnika dla tego komponent. Metal może mieć bardzo wysoki współczynnik. Natomiast sukno może mieć współczynnik bliski zeru. Wartość tego współczynnika można interpretować jako połyskliwość. i Qt

20 Spektrum w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Pomimo ustalonej charakterystyki widmowej źródła światła, składowe oświetlenia dookólnego, rozproszonego i zwierciadlanego mogą być różne. Przykład: Jeśli jesteśmy w pokoju, którego ściany są zielone i jest ono oświetlone światłem białym, to składowa oświetlenia dookólnego będzie miała silniejszą składową zieloną. Dla każdej składowej oświetlania można indywidualnie ustawić komponenty RGB. i Qt

21 Kolory materiałów w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Materiały mogą mieć różne komponenty spektralne dla dla składowych światła abient, diffuse i specular. Współczynniki tych komponentów decydują w jakim stopniu komponenty spektralne poszczególnych składowych światła zostaną odbite. Dodatkowo materiały mają składową emisyjną (ang. emissive), która symuluje światło wydobywające się z danej powierzchni. Składowa ta pozwala zwiększyć intensywność koloru obiektu. Nie wpływa na nią żadne zewnętrzne oświetlenie, jak też nie daje ono żadnego dodatkowego oświetlenia otoczenia. Wyznaczanie światła odbitego (L r, L g, L b ) = (S r M r, S g M g, S b M b ) Intensywność światła pochodzącego z kilku źródeł lub odbić podlega sumowaniu (L r, L g, L b ) = (L 1,r + L 2,r, L 1,g + L 2,g, L 1,b + L 2,b ) i Qt

22 Tworzenie oświetlenia w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Zdefiniuj normalne wektory dla każdego wierzchołka wszystkich obiektów. Wektory definiują orientację obiektu względem źródła światła. Stwórz, wyselekcjonuj i ustaw w odpowiedniej pozycji jedno lub więcej źródeł światła. Stwórz i wybierz model oświetlenia, który zdefiniuje poziom globalnego dookólnego oświetlenia i lokalizację punktu obserwacji (aby umożliwić wyliczenie efektu oświetlenia). Zdefiniuj własności materiałów obiektów znajdujących się na scenie. i Qt

23 w Qt Tworzenie oświetlenia przykład Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia v o i d i n i t ( v o i d ) { G L f l o a t m a t s p e c u l a r [ ] = { 1. 0, 1. 0, 1. 0, 1. 0 }; GLfloat mat shininess [ ] = { 50.0 }; G L f l o a t l i g h t p o s i t i o n [ ] = { 1. 0, 1. 0, 1. 0, 0. 0 }; g l C l e a r C o l o r ( 0. 0, 0. 0, 0. 0, 0. 0 ) ; glshademodel (GL SMOOTH ) ; g l M a t e r i a l f v (GL FRONT, GL SPECULAR, m a t s p e c u l a r ) ; g l M a t e r i a l f v (GL FRONT, GL SHININESS, m a t s h i n i n e s s ) ; g l L i g h t f v ( GL LIGHT0, GL POSITION, l i g h t p o s i t i o n ) ; } glenable ( GL LIGHTING ) ; g l E n a b l e ( GL LIGHT0 ) ; glenable (GL DEPTH TEST ) ; v o i d d i s p l a y ( v o i d ) { g l C l e a r ( GL COLOR BUFFER BIT GL DEPTH BUFFER BIT ) ; g l u t S o l i d S p h e r e ( 1. 0, 20, 1 6 ) ; g l F l u s h ( ) ; } i Qt

24 w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Tworzenie oświetlenia Wektory normalne v o i d i n i t ( v o i d ) { } v o i d d i s p l a y ( v o i d ) { g l C l e a r ( GL COLOR BUFFER BIT GL DEPTH BUFFER BIT ) ; g l u t S o l i d S p h e r e ( 1. 0, 20, 1 6 ) ; g l F l u s h ( ) ; } Zdefiniuj normalne wektory dla każdego wierzchołka wszystkich obiektów. Wektory definiują orientację obiektu względem źródła światła. Stwórz, wyselekcjonuj i ustaw w odpowiedniej pozycji jedno lub więcej źródeł światła. Stwórz i wybierz model oświetlenia, który zdefiniuje poziom globalnego dookólnego oświetlenia i lokalizację punktu obserwacji (aby umożliwić wyliczenie efektu oświetlenia). Zdefiniuj własności materiałów obiektów znajdujących się na scenie. i Qt

25 w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Tworzenie oświetlenia Wektory normalne v o i d i n i t ( v o i d ) { } v o i d d i s p l a y ( v o i d ) { g l C l e a r ( GL COLOR BUFFER BIT GL DEPTH BUFFER BIT ) ; g l u t S o l i d S p h e r e ( 1. 0, 20, 1 6 ) ; g l F l u s h ( ) ; } Zdefiniuj normalne wektory dla każdego wierzchołka wszystkich obiektów. Wektory definiują orientację obiektu względem źródła światła. GLUT The Utility Toolkit Niezależny od platformy toolkit umożliwiający pisanie programów wykorzystujących. Implementuje prosty interfejs aplikacji dla okienkowych programów. Przewidziany jest do pisania małych lub średnich aplikacji. i Qt

26 w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Tworzenie oświetlenia Źródło światła v o i d i n i t ( v o i d ) { G L f l o a t l i g h t p o s i t i o n [ ] = { 1. 0, 1. 0, 1. 0, 0. 0 }; g l L i g h t f v ( GL LIGHT0, GL POSITION, l i g h t p o s i t i o n ) ; } glenable ( GL LIGHTING ) ; g l E n a b l e ( GL LIGHT0 ) ; Zdefiniuj normalne wektory dla każdego wierzchołka wszystkich obiektów. Wektory definiują orientację obiektu względem źródła światła. Stwórz, wyselekcjonuj i ustaw w odpowiedniej pozycji jedno lub więcej źródeł światła. Stwórz i wybierz model oświetlenia, który zdefiniuje poziom globalnego dookólnego oświetlenia i lokalizację punktu obserwacji (aby umożliwić wyliczenie efektu oświetlenia). Zdefiniuj własności materiałów obiektów znajdujących się na scenie. i Qt

27 w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Tworzenie oświetlenia Źródło światła v o i d i n i t ( v o i d ) { G L f l o a t l i g h t p o s i t i o n [ ] = { 1. 0, 1. 0, 1. 0, 0. 0 }; g l L i g h t f v ( GL LIGHT0, GL POSITION, l i g h t p o s i t i o n ) ; } glenable ( GL LIGHTING ) ; g l E n a b l e ( GL LIGHT0 ) ; Stwórz, wyselekcjonuj i ustaw w odpowiedniej pozycji jedno lub więcej źródeł światła. Użyte zostało tylko jedno źródło światła, które domyślnie ma kolor biały. W ogólnym przypadku może być 8 źródeł o dowolnych barwach. Domyślnie pozostałe źródła mają kolor światła czarny. Należy pamiętać, że włączanie kolejnych źródeł zwiększa też ilość obliczeń. glenable(gl LIGHTING) przygotowuje do wykonania obliczeń oświetlenia. i Qt

28 w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Tworzenie oświetlenia Model oświetlenia v o i d i n i t ( v o i d ) { G L f l o a t l i g h t p o s i t i o n [ ] = { 1. 0, 1. 0, 1. 0, 0. 0 }; g l L i g h t f v ( GL LIGHT0, GL POSITION, l i g h t p o s i t i o n ) ; } glenable ( GL LIGHTING ) ; g l E n a b l e ( GL LIGHT0 ) ; Zdefiniuj normalne wektory dla każdego wierzchołka wszystkich obiektów. Wektory definiują orientację obiektu względem źródła światła. Stwórz, wyselekcjonuj i ustaw w odpowiedniej pozycji jedno lub więcej źródeł światła. Stwórz i wybierz model oświetlenia, który zdefiniuje poziom globalnego dookólnego oświetlenia i lokalizację punktu obserwacji (aby umożliwić wyliczenie efektu oświetlenia). Zdefiniuj własności materiałów obiektów znajdujących się na scenie. i Qt

29 w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Tworzenie oświetlenia Model oświetlenia v o i d i n i t ( v o i d ) { G L f l o a t l i g h t p o s i t i o n [ ] = { 1. 0, 1. 0, 1. 0, 0. 0 }; g l L i g h t f v ( GL LIGHT0, GL POSITION, l i g h t p o s i t i o n ) ; } glenable ( GL LIGHTING ) ; g l E n a b l e ( GL LIGHT0 ) ; Stwórz i wybierz model oświetlenia, który zdefiniuje poziom globalnego dookólnego oświetlenia i lokalizację punktu obserwacji (aby umożliwić wyliczenie efektu oświetlenia). Model oświetlenia definiowany jest przez funkcję gllightmodel*(). W tym przykładzie zostało zdefiniowane tylko oświetlenie dookólne. Ogólnie model oświetlenia definiuje, czy oświetlenie ma być liczone dla frontu powierzchni i jej tyłu, czy źródło światła znajduje się w nieskończoności, czy też w określonej odległości. W przykładzie obliczenia są wykonywane tylko Wizualizacja dla frontu, a danych źródło sensorycznych znajduje się w nieskończoności. i Qt

30 w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Tworzenie oświetlenia Własności materiału v o i d i n i t ( v o i d ) { GLfloat m a t s p e c u l a r [ ] = { 1. 0, 1. 0, 1. 0, 1.0 }; / RGBA / GLfloat mat shininess [ ] = { 50.0 }; g l M a t e r i a l f v (GL FRONT, GL SPECULAR, m a t s p e c u l a r ) ; g l M a t e r i a l f v (GL FRONT, GL SHININESS, m a t s h i n i n e s s ) ; } Zdefiniuj normalne wektory dla każdego wierzchołka wszystkich obiektów. Wektory definiują orientację obiektu względem źródła światła. Stwórz, wyselekcjonuj i ustaw w odpowiedniej pozycji jedno lub więcej źródeł światła. Stwórz i wybierz model oświetlenia, który zdefiniuje poziom globalnego dookólnego oświetlenia i lokalizację punktu obserwacji (aby umożliwić wyliczenie efektu oświetlenia). Zdefiniuj własności materiałów obiektów znajdujących się na scenie. i Qt

31 w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Tworzenie oświetlenia Własności materiału v o i d i n i t ( v o i d ) { GLfloat m a t s p e c u l a r [ ] = { 1. 0, 1. 0, 1. 0, 1.0 }; / RGBA / GLfloat mat shininess [ ] = { 50.0 }; g l M a t e r i a l f v (GL FRONT, GL SPECULAR, m a t s p e c u l a r ) ; g l M a t e r i a l f v (GL FRONT, GL SHININESS, m a t s h i n i n e s s ) ; } Zdefiniuj własności materiałów obiektów znajdujących się na scenie. Rodzaj materiału definiuje sposób odbicia światła. Ponieważ interakcja różnych sposób odbicia światła jest bardzo złożona, dobór właściwych parametrów jest sztuką samą w sobie. Ogólnie dla powierzchni można określić takie parametry jak: ambient, diffuse oraz specular; niezależnie dla każdej z barw RGB. W prezentowanym przykładzie tylko dwie ostatnie własności zostały ustawione. i Qt

32 w Qt Ogólna charakterystyka źródeł światła Tworzenie i dodawanie oświetlenia Tworzenie oświetlenia Własności materiału Prototypy void gllight{if}(glenum light, GLenum pname, TYPE param); void gllight{if}v(glenum light, GLenum pname, TYPE *param); Nazwa parametru Domyślna wartość Znaczenie GL AMBIENT (0.0, 0.0, 0.0, 1.0) RGBA (intensywność światła) GL DIFFUSE (1.0, 1.0, 1.0, 1.0) RGBA (intensywność światła) GL SPECULAR (1.0, 1.0, 1.0, 1.0) RGBA (intensywność światła) GL POSITION (0.0, 0.0, 1.0, 0.0) (x, y, z, w) (pozycja światła) GL SPOT DIRECTION (0.0, 0.0, -1.0) (x, y, z) (kierunek snopu światła) GL SPOT EXPONENT 0.0 współczynnik eksponenty GL SPOT CUTOFF ograniczenie snopu światła GL CONSTANT ATTENUATION 1.0 Stała zanikania GL LINEAR ATTENUATION 0.0 Współczynnik liniowego zanikania GL QUADRATIC ATTENUATION 0.0 Współczynnik zanikania z kwadratem odległości i Qt

33 w Qt Etapy mapowania tekstur Mapowanie tekstur wymaga wykonania następujących kroków: Stworzenie obiektu reprezentującego teksturę i wyspecyfikowanie tekstury. Wskazanie w jaki sposób tekstura ma być przeniesiona na każdy z pikseli danej powierzchni. Uaktywnienie mapowania tekstury. Zadanie współrzędnych tekstury na powierzchni i współrzędnych samej powierzchni obiektu, a następnie przystąpienie do renderowania obrazu. Mapowanie tekstury działa w trybie RGBA. Nie działa w trybie indeksowania kolorów. i Qt

34 w Qt Przykład tworzenia tekstury v o i d Viewer : : i n i t ( ) { MakeImage CheckBoard ( ) ; g l P i x e l S t o r e i (GL UNPACK ALIGNMENT, 1 ) ; g l G e n T e x t u r e s (1, &Texture4Manip ) ; glbindtexture (GL TEXTURE 2D, Texture4Manip ) ; } gltexparameteri (GL TEXTURE 2D, GL TEXTURE WRAP S, GL REPEAT ) ; gltexparameteri (GL TEXTURE 2D, GL TEXTURE WRAP T, GL REPEAT ) ; gltexparameteri (GL TEXTURE 2D, GL TEXTURE MAG FILTER, GL NEAREST ) ; // GL LINEAR ) ; //GL NEAREST ) ; gltexparameteri (GL TEXTURE 2D, GL TEXTURE MIN FILTER, GL NEAREST ) ; //GL LINEAR ) ; glteximage2d (GL TEXTURE 2D, 0, GL RGBA, WIDTH CHECK BOARD, HEIGHT CHECK BOARD, 0, GL RGBA, GL UNSIGNED BYTE, Image CheckBoard ) ; i Qt

35 w Qt Generowanie identyfikatorów g l G e n T e x t u r e s ( 1, &Texture4Manip ) ; g l B i n d T e x t u r e (GL TEXTURE 2D, Texture4Manip ) ; Funkcja glgentextures generuje identyfikator tekstury, który będzie wykorzystany do jej selekcji i tworzenia powiązań. W nomenklaturze opisu funkcji biblioteki identyfikator ten określany jest jako nazwa tekstury. void glgentextures(glsizei n, GLunit *ptextres) n ilość identyfikatorów, która ma być wygenerowana, ptextres wskaźnik na tablicę, w której mają być składowane wygenerowane identyfikatory. i Qt

36 Tworzenie powiązań w Qt g l G e n T e x t u r e s ( 1, &Texture4Manip ) ; g l B i n d T e x t u r e (GL TEXTURE 2D, Texture4Manip ) ; Funkcja glbindtexture tworzy odpowiednie struktury danych reprezentujące teksturę i dokonuje powiązania identyfikatora tekstury ze wspomnianą strukturą danych. Funkcja ta służy również do przełączania się między teksturami. Pierwszy parametr odpowiada za typ tekstury. void glbindtexture(glenum Target, GLunit TextureName) Target specyfikuje typ docelowej tekstury. Przykładowe dopuszczalne wartości: GL TEXTURE 1D, GL TEXTURE 2D, GL TEXTURE 3D, GL TEXTURE 1D ARRAY,. TextreName identyfikator tekstury, z którą ma nastąpić powiązanie. Identyfikator należy wygenerować za pomocą glgentextures. i Qt

37 Mapowanie tekstury w Qt gltexparameteri (GL TEXTURE 2D, GL TEXTURE WRAP S, GL REPEAT ) ; gltexparameteri (GL TEXTURE 2D, GL TEXTURE WRAP T, GL REPEAT ) ; Funkcja gltexparameteri określa sposób mapowania tekstury na powierzchnię obiektu. Operacje wykonywane przez tę funkcję odnoszą się do bieżącej tekstury, która jest ustalona przez ostatnie wywołanie funkcji glbindtexture. Pierwszy parametr odnosi się do typu tekstury. void gltexparameteri(glenum Target, GLenum ParamName GLint ParamVal)) Target specyfikuje typ docelowej tekstury. Dopuszczalne wartości: GL TEXTURE 2D, GL CUBE MAP. ParamName symboliczna nazwa parametru. Dopuszczalne wartości: GL TEXTURE MIN FILTER, GL TEXTURE MIN FILTER, GL TEXTURE WRAP S, GL TEXTURE WRAP T. ParamVal specyfikuje wartość parametru identyfikowanego przez symbol przekazany przez ParamName. i Qt

38 Mapowanie tekstury w Qt gltexparameteri (GL TEXTURE 2D, GL TEXTURE WRAP S, GL REPEAT ) ; gltexparameteri (GL TEXTURE 2D, GL TEXTURE WRAP T, GL REPEAT ) ; W tym przypadku, ustawiane są wartości dla parametrów odpowiadających za zawijanie tekstur, gdy ich współrzędne (s, t) przekraczają przedział [0, 1]. W tym przypadku tekstura będzie powielana. Inne dopuszczalne wartości GL TEXTURE WRAP S oraz GL TEXTURE WRAP T: GL CLAMP obcinanie do przedziału [0, 1], ParamName symboliczna nazwa parametru. Dopuszczalne wartości: GL TEXTURE MIN FILTER, GL TEXTURE MIN FILTER, GL TEXTURE WRAP S, GL TEXTURE WRAP T. ParamVal specyfikuje wartość parametru identyfikowanego przez symbol przekazany przez ParamName. i Qt

39 w Qt Pomniejszanie i powiększanie Gdy tekstura jest mniejsza lub większa niż powierzchnia, na którą jest nakładana, konieczne jest jej odpowiednia transformacja. Możliwe są dwa sposoby identyfikowane przez parametry: GL NEAREST o kolorze piksela decyduje najbliższy piksel tekstury, GL LINEAR kolor piksela ustalany jest na podstawie liniowej interpolacji kolorów sąsiednich pikseli tekstury. Wskazanie przypadku, w którym dana transformacja ma być zastosowana, odbywa się poprzez wybranie filtru identyfikowanego poprzez jedną z wartości: GL TEXTURE MIN FILTER filtr stosowany w przypadku pomniejszania tekstury, GL TEXTURE MAG FILTER filtr stosowany w przypadku powiększania tekstury, Przykład kodu ustalenia parametrów filtracji dla bieżącej tekstury gltexparameteri (GL TEXTURE 2D, GL TEXTURE MAG FILTER, GL LINEAR ) ; gltexparameteri (GL TEXTURE 2D, GL TEXTURE MIN FILTER, GL NEAREST ) ; i Qt

40 w Qt Przykład efektów filtrowania GL TEXTURE MIN FILTER, GL NEAREST GL TEXTURE MAG FILTER, GL NEAREST GL TEXTURE MIN FILTER, GL LINEAR GL TEXTURE MAG FILTER, GL LINEAR i Qt

41 w Qt Koniec prezentacji Dziękuję za uwagę i Qt