Stručný přehled OpenGL

50
Stručný přehled OpenGL Jiří Danihelka

Transcript of Stručný přehled OpenGL

Page 1: Stručný přehled OpenGL

Stručný přehled OpenGL

Jiří Danihelka

Page 2: Stručný přehled OpenGL

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

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

Platformová nezávislost OpenGL OpenGL používá vlastní primitivní

datové typy GLbyte, GLint, GLdouble

Page 5: Stručný přehled OpenGL

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

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

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

Výsledek

Page 9: Stručný přehled OpenGL

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

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

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

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

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

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

Základní tvary OpenGL GL_POINTS

GL_LINES

Page 16: Stručný přehled OpenGL

Základní tvary OpenGL GL_LINE_STRIP

GL_LINELOOP

Page 17: Stručný přehled OpenGL

Základní tvary OpenGL GL_TRIANGLES

GL_TRIANGLE_STRIP

Page 18: Stručný přehled OpenGL

Základní tvary OpenGL GL_TRIANGLE_FAN

GL_QUADS

Page 19: Stručný přehled OpenGL

Základní tvary OpenGL GL_TRIANGLE_FAN

GL_QUAD_STRIP

Page 20: Stručný přehled OpenGL

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

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

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

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

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

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

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

3D grafika

Page 28: Stručný přehled OpenGL

Co je potřeba nastavit v 3D polohu kamery čočku kamery polohu zobrazovaných objektů

Page 29: Stručný přehled OpenGL

Nastavení polohy kamery void glTranslate{f,d}(x, y, z);

Page 30: Stručný přehled OpenGL

Nastavení polohy kamery void glRotate{f,d}(uhel,x, y, z);

Page 31: Stručný přehled OpenGL

Nastavení polohy kamery void glScale{f,d}(x, y, z);

Page 32: Stručný přehled OpenGL

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

Funkce gluLookAt 3 trojice čísel poloha kamery poloha objektu vektor nahoru

Page 34: Stručný přehled OpenGL

Ortogonální projekce Pomocí funkce glOrtho(...);

Page 35: Stručný přehled OpenGL

Nastavení čočky kamery Pomocí funkce glFrustum(...);

Page 36: Stručný přehled OpenGL

Nastavení čočky kamery

Page 37: Stručný přehled OpenGL

Využití změn kamery

Page 38: Stručný přehled OpenGL

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

Pořadí vykreslování

Page 40: Stručný přehled OpenGL

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

Z-Buffer demonstrace

Page 42: Stručný přehled OpenGL

Textury

                                                                        

    

Page 43: Stručný přehled OpenGL

Zvolení textury glTexImage2D(...); Parametry:

výška, šířka,barevná hloubka, ukazatel na pole bytů

Page 44: Stručný přehled OpenGL

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

Výsledek použití textury

Page 46: Stručný přehled OpenGL

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

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

Výpočet pseudonormálů

Page 49: Stručný přehled OpenGL

Stínovací metody

Page 50: Stručný přehled OpenGL

Konec

Dotazy?