stručný přehled opengl
TRANSCRIPT
![Page 1: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/1.jpg)
Stručný přehled OpenGL
Jiří Danihelka
![Page 2: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/2.jpg)
Co je OpenGL? Open Graphics Library Knihovna pro počítačovou grafiku Zhruba 120 funkcí Představuje standard grafického
rozhraní pro přístup k akcelerovaným grafickým kartám
![Page 3: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/3.jpg)
Vlastnosti OpenGL Využívá jazyk C, ale dá se používat i
v jiných jazycích (Fortran,Pascal,Java)
Velká snaha o platformovou nezávislost
Hardwarově nepodporované operace jsou softwarově simulovány
![Page 4: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/4.jpg)
Platformová nezávislost OpenGL OpenGL používá vlastní primitivní
datové typy GLbyte, GLint, GLdouble
![Page 5: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/5.jpg)
Platformová nezávislost OpenGL OpenGL neobsahuje žádné příkazy
pro práci s okny Je třeba využít jiné knihovny pro
otevření okna pro kreslení Vhodné knihovny: SDL, GLUT, GLX, GLW
![Page 6: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/6.jpg)
Co OpenGL není Komplexní knihovna pro počítačové hry Knihovna pro ovládání periférií Zvuková knihovna Knihovna pro komunikaci po síťi Knihovna pro načítání formátů souborů
Je potřeba použít jiné knihovnySDL, GLUT, GLX, WGL
![Page 7: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/7.jpg)
Ukázka programu v OpenGL
void draw(void){ glClear(GL_COLORBUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(0.0f, 1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f); glEnd(); }
![Page 8: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/8.jpg)
Výsledek
![Page 9: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/9.jpg)
Ukázka programu v OpenGL
void draw(void){ glClear(GL_COLORBUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(0.0f, 1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f); glEnd(); }
![Page 10: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/10.jpg)
Zápis volání funkcí v OpenGL např.: glVertex3fv(v[0]); názvy všech funkcí začínají gl... dále následuje jméno funkce (Vertex) 3 – značí počet parametrů f – značí typ parametrů (GLfloat) v – značí předání parametrů
ukazatelem
![Page 11: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/11.jpg)
Zápis funkcí v OpenGL Většinu funkcí OpenGL lze volat s
různým počtem a druhem parametrů např.: glVertex3fv
glVertex3fglVertex4dglVertex2i
![Page 12: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/12.jpg)
Zápis funkcí v OpenGL Význam jednotlivých písmen
b – GLbyte (8 bitů)ub – GLubyte (8 bitů)s – GLshort (16 bitů)us – GLushort (16 bitů)i – GLint (32 bitů)ui – GLuint (32 bitů)f – GLfloat (32 bitů)d – GLdouble (64 bitů)
![Page 13: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/13.jpg)
Základní příkazy OpenGL 98% veškerého kreslení je prováděno
pomocí následujících tří funkcí:glBegin(základní_tvar);
glVertex...(souřadnice);glVertex...(souřadnice);...glVertex...(souřadnice);
glEnd();
![Page 14: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/14.jpg)
Základní tvary OpenGL GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP
GL_POLYGON GL_TRIANGLES GL_TRIANGLE_STRI
P GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP
![Page 15: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/15.jpg)
Základní tvary OpenGL GL_POINTS
GL_LINES
![Page 16: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/16.jpg)
Základní tvary OpenGL GL_LINE_STRIP
GL_LINELOOP
![Page 17: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/17.jpg)
Základní tvary OpenGL GL_TRIANGLES
GL_TRIANGLE_STRIP
![Page 18: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/18.jpg)
Základní tvary OpenGL GL_TRIANGLE_FAN
GL_QUADS
![Page 19: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/19.jpg)
Základní tvary OpenGL GL_TRIANGLE_FAN
GL_QUAD_STRIP
![Page 20: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/20.jpg)
Barvy v OpenGL Barvu lze nastavit pomocí funkce
glColor{3,4}{b,i,f,d}{v}(parametry);
Barvu lze měnit kdykoliv a výsledek se projeví na všech dalších vrcholech až do příští změny barvy
![Page 21: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/21.jpg)
Barevný trojúhelníkvoid draw(void){ glClear(GL_COLORBUFFER_BIT); glColor3f(0, 1.0f, 0); glBegin(GL_TRIANGLES); glVertex3f(...); glVertex3f(...); glVertex3f(...); glEnd(); }
![Page 22: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/22.jpg)
Vícebarevný trojúhelníkvoid draw(void){ glClear(GL_COLORBUFFER_BIT); glBegin(GL_TRIANGLES); glColor3f(1.0f, 0, 0); glVertex3f(...); glColor3f(0, 1.0f, 0); glVertex3f(...); glColor3f(0, 0, 1.0f); glVertex3f(...); glEnd(); }
![Page 23: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/23.jpg)
Stavy OpenGL Některé příkazy mění globálně
způsob vykreslování (=stav) glColor...(...); glClearColor(...);
Používání stavů má výhody i nevýhody
![Page 24: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/24.jpg)
Animace – první pokus
void draw(int faze){ glClear(GL_COLORBUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(0.0f+faze, 10.0f, 0.0f); glVertex3f(-10.0f+faze, -10.0f, 0.0f); glVertex3f(10.0f+faze, -10.0f, 0.0f); glEnd(); }
![Page 25: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/25.jpg)
Double buffer Máme dvě místa na kreslení
(buffery), jedno na monitoru, druhé v paměti
Kreslíme nejprve do paměti Až bude kresba dokončená buffery
prohodíme a obrázek se objeví na monitoru bez nepříjemného blikání
![Page 26: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/26.jpg)
Double buffer - poznámka Operace s double bufferem nejsou
součástí příkazů OpenGL, ale jsou obsažené v jiných knihovnách
Například: glutSwapBuffers(); Pro některá zobrazovací zařízení
může být bufferů i více než 2(brýle virtuální reality)
![Page 27: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/27.jpg)
3D grafika
![Page 28: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/28.jpg)
Co je potřeba nastavit v 3D polohu kamery čočku kamery polohu zobrazovaných objektů
![Page 29: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/29.jpg)
Nastavení polohy kamery void glTranslate{f,d}(x, y, z);
![Page 30: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/30.jpg)
Nastavení polohy kamery void glRotate{f,d}(uhel,x, y, z);
![Page 31: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/31.jpg)
Nastavení polohy kamery void glScale{f,d}(x, y, z);
![Page 32: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/32.jpg)
Poloha kamery - poznámky Na výslednou polohu kamery má
zásadní vliv pořadí transformačních operací
Kameru je potřeba nastavit ještě před kreslením
Polohu kamery je možné měnit i během vykreslování.
Neměňte polohu mezi glBegin a glEnd
![Page 33: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/33.jpg)
Funkce gluLookAt 3 trojice čísel poloha kamery poloha objektu vektor nahoru
![Page 34: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/34.jpg)
Ortogonální projekce Pomocí funkce glOrtho(...);
![Page 35: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/35.jpg)
Nastavení čočky kamery Pomocí funkce glFrustum(...);
![Page 36: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/36.jpg)
Nastavení čočky kamery
![Page 37: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/37.jpg)
Využití změn kamery
![Page 38: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/38.jpg)
Animace – druhý pokus
void draw(int faze){ glTranslate(-faze,0,0); glClear(GL_COLORBUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(0.0f, 10.0f, 0.0f); glVertex3f(-10.0f, -10.0f, 0.0f); glVertex3f(10.0f, -10.0f, 0.0f); glEnd(); }
![Page 39: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/39.jpg)
Pořadí vykreslování
![Page 40: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/40.jpg)
Z-Buffer Paměť do které se ukládá vzdálenost
nakresleného pixelu od pozorovatele Je obvykle hardwarově akcelerována glEnable(GL_DEPTH_TEST); glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);
![Page 41: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/41.jpg)
Z-Buffer demonstrace
![Page 42: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/42.jpg)
Textury
![Page 43: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/43.jpg)
Zvolení textury glTexImage2D(...); Parametry:
výška, šířka,barevná hloubka, ukazatel na pole bytů
![Page 44: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/44.jpg)
Nastavení souřadnic textury
void draw(void){ glClear(GL_COLORBUFFER_BIT); glBegin(GL_QUADS); glTexCoord2f(1.0f, 0); glVertex3f(...); glTexCoord2f(1.0f, 1.0f); glVertex3f(...); glTexCoord2f(0, 1.0f); glVertex3f(...); glTexCoord2f(0.0f, 0.0f); glVertex3f(...); glEnd(); }
![Page 45: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/45.jpg)
Výsledek použití textury
![Page 46: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/46.jpg)
Druhy světelných zdrojů všesměrový zdroj reflektor rovnoběžné paprsky všudypřítomné světlo
![Page 47: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/47.jpg)
Příkazy pro práci se světlem glLight...v(index, vlastnosti,
intenzita);Vytvoří nový světelný zdroj
glNormal3f(x,y,z);Nastaví normálový vektor ve vrcholuPíše se většinou před každý glVertex
![Page 48: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/48.jpg)
Výpočet pseudonormálů
![Page 49: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/49.jpg)
Stínovací metody
![Page 50: Stručný přehled OpenGL](https://reader031.vdocuments.site/reader031/viewer/2022021422/58a472b31a28aba34c8b56e7/html5/thumbnails/50.jpg)
Konec
Dotazy?