Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Stručný přehled OpenGL Jiří Danihelka. Co je OpenGL?  Open Graphics Library  Knihovna pro počítačovou grafiku  Zhruba 120 funkcí  Představuje standard.

Podobné prezentace


Prezentace na téma: "Stručný přehled OpenGL Jiří Danihelka. Co je OpenGL?  Open Graphics Library  Knihovna pro počítačovou grafiku  Zhruba 120 funkcí  Představuje standard."— Transkript prezentace:

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

2 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

3 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

4 Platformová nezávislost OpenGL  OpenGL používá vlastní primitivní datové typy  GLbyte, GLint, GLdouble

5 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, WGL

6 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é knihovny SDL, GLUT, GLX, WGL, DirectX…

7 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(); glFlush(); }

8 Výsledek

9 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(); glFlush(); }

10 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

11 Zápis funkcí v OpenGL  Většinu funkcí OpenGL lze volat s různým počtem a druhem parametrů  např.: glVertex3fv glVertex3f glVertex4d glVertex2i

12 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ů)

13 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();

14 Základní tvary OpenGL  GL_POINTS  GL_LINES  GL_LINE_STRIP  GL_LINE_LOOP  GL_POLYGON  GL_TRIANGLES  GL_TRIANGLE_STRIP  GL_TRIANGLE_FAN  GL_QUADS  GL_QUAD_STRIP

15 Základní tvary OpenGL  GL_POINTS  GL_LINES

16 Základní tvary OpenGL  GL_LINE_STRIP  GL_LINELOOP

17 Základní tvary OpenGL  GL_TRIANGLES  GL_TRIANGLE_STRIP

18 Základní tvary OpenGL  GL_TRIANGLE_FAN  GL_QUADS

19 Základní tvary OpenGL  GL_TRIANGLE_FAN  GL_QUAD_STRIP

20 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

21 Barevný trojúhelník void draw(void) { glClear(GL_COLORBUFFER_BIT); glColor3f(0, 1.0f, 0); glBegin(GL_TRIANGLES); glVertex3f(...); glVertex3f(...); glVertex3f(...); glEnd(); glFlush(); }

22 Vícebarevný trojúhelník void 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(); glFlush(); }

23 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

24 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(); glFlush(); }

25 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í

26 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)

27 3D grafika

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

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

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

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

32 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

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

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

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

36 Nastavení čočky kamery

37 Využití změn kamery

38 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(); glFlush(); }

39 Pořadí vykreslování

40 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);

41 Z-Buffer demonstrace

42 Textury

43 Zvolení textury  glTexImage2D(...);  Parametry: výška, šířka, barevná hloubka, ukazatel na pole bytů

44 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(); glFlush(); }

45 Výsledek použití textury

46 Druhy světelných zdrojů  všesměrový zdroj  reflektor  rovnoběžné paprsky  všudypřítomné světlo

47 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 vrcholu Píše se většinou před každý glVertex

48 Výpočet pseudonormálů

49 Stínovací metody

50 Display Lists id = glGenLists(1); glNewList(id, GL_COMPILE;.... glEndList(id);

51 Použité zdroje  www.sgi.com www.sgi.com  www.nehe.com www.nehe.com  nehe.opengl.cz  www.root.cz  jiné internetové stránky

52 Konec Dotazy?


Stáhnout ppt "Stručný přehled OpenGL Jiří Danihelka. Co je OpenGL?  Open Graphics Library  Knihovna pro počítačovou grafiku  Zhruba 120 funkcí  Představuje standard."

Podobné prezentace


Reklamy Google