Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilAndrej Zeman
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?
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.