+ All Categories
Home > Documents > OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou...

OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou...

Date post: 22-Dec-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
20
Základy programování OpenGL
Transcript
Page 1: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

Základy programování

OpenGL

Page 2: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

• Nízkoúrovňová knihovna pro práci s 2D a 3D grafikou

• Představuje jednotné API ▫ mezi programem a grafickým hardware

▫ nezávislost na cílové platformě

• Aktuální verze 4.5 (11. srpna 2014)

• Nepoužívá objektově orientované programování▫ primitiva jsou definována pomocí vrcholů, které obsahují:

souřadnice umístění bodu

barvu

normálu

texturovací souřadnice

OpenGL (Open Graphics Library)

Page 3: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

• OpenGL nepodporuje vstupní zařízení▫ klávesnice, myš, …

• Získání vstupu ze vstupních zařízení si musí uživatel zajistit sám▫ registrace callback funkcí

▫ registrace událostí

Interakce uživatele

Page 4: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

• Podpora geometrických primitiv, které lze vykreslit

Geometrická primitiva

Page 5: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

Souřadný systém v OpenGL

Page 6: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

• Soubor stavových proměnných

• Každé vlákno, které volá OpenGL funkce musí mít RC

• RC spojuje OpenGL s okením systémem Windows (nebo Linux, Mac)

• Inicializace v C#

Render Context

Page 7: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

• 3D vrchol lze předat pomocí mnoha příkazů:▫ glVertex3d, glVertex3dv -> double

▫ glVertex3f, glVertex3fv -> float

▫ glVertex3i, glVertex3iv -> int

▫ glVertex3s, glVertex3sv -> short

▫ glVertex3h, glVertex3hv -> ushort

Syntaxe příkazů

Page 8: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

Vykreslení 2D grafiky

Page 9: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

Vykreslení 2D grafiky

Page 10: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

• Nastavení aktuální matice pro geometrické transformace s objektem▫ glMatrixMode(GL_MODELVIEW);

▫ glLoadIdentity(); -> naplnění aktuální matice jednotkovou maticí

• Rotace o daný úhel (CCW) kolem osy dané vektorem▫ glRotatef(angle, vx, vy, vz);

• Posun o daný vektor▫ glTranslatef(dx, dy, dz);

• Změna měřítka▫ glScale(sx, sy, sz);

• Uložení aktuální transformační matice do zásobníku▫ glPushMatrix(); pro vrácení matice zavolat: glPopMatrix();

Geometrické transformace

Page 11: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

• Pozorovatel se může ve scéně pohybovat▫ pozice a směr pohledu lze vyjádřit transformační maticí

• C/C++▫ gluLookAt(eye.x, eye.y, eye.z, center.x, center.y, center.z, up.x, up.y, up.z)

• C#

Pohledová transformace

Page 12: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

• Přepnutí aktuální matice na matici projekce▫ glMatrixMode(GL_PROJECTION);

• Ortogonální (kolmá projekce)▫ glOrtho(left, right, bottom, top, near, far);

• Perspektivní (nejvíce používaná projekce)▫ gluPerspective(fovy, aspect, near, far);

▫ C#: Matrix.Perspective(fovy, aspect, near, far);

Projekce

Page 13: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

• Nutné používat depth buffer▫ glEnable(GL_DEPTH_TEST); // zapnutí depth testu

▫ glClearDepth(1.0f); // nastavení hodnoty na kterou se maze

• Vymazání bufferů▫ Maže se na začátku každého renderování

▫ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

• Nastavení vyřazení (nevykreslování) trojúhelníků▫ glEnable(GL.CULL_FACE); // povolení vyřazení (X glDisable(…))

▫ glCullFace(GL_BACK); // vyřazovat zadní Δ (nebo GL_FRONT)

▫ glFrontFace(GL_CCW); // Δ jsou CounterClockWise (nebo GL_CW)

Navíc používané ve 3D oproti 2D

Page 14: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

Osvětlení a nastavení světel

Page 15: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

Definice materiálu

Page 16: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

• Nastavení modelu stínování v OpenGL:▫ glShadeModel(GL_FLAT); nebo glShadeModel(GL_SMOOTH);

• Pro stínování jsou zapotřebí normály▫ glNormal3fv(…) -> stejné jako předání vrcholu

▫ GL_FLAT -> jedna normála pro trojúhelník

▫ GL_SMOOTH -> jedna normála pro každý vrchol

Metody stínování

Page 17: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

• Povolení používání 2D textury▫ glEnable(GL_TEXTURE_2D);

• Vygenerování texturovacího objektu▫ glGenTextures(1, &texture);

• Oznámení OpenGL jaká textura bude dále definována▫ glBindTexture(GL_TEXTURE_2D, texture);

• Nahrání 2D textury do GPU paměti▫ glTexImage2D(GL_TEXTURE_2D, 0, …);

• Nastavení parametrů používání textury▫ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

▫ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

▫ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

▫ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

Textury

Page 18: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

Textury

Page 19: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

Předkopírování dat na GPU

Page 20: OpenGLsmolik/zpg/prednasky/OpenGL.pdf•Nízkoúrovňováknihovna pro práci s 2D a 3D grafikou •Představuje jednotné API mezi programem a grafickým hardware nezávislost na cílové

Vykreslení trojúhelníků


Recommended