V dnešním a v několika dalších dílech se budeme zabývat popisem funkcí v PyOpenGL. Popis bude skoro vždy obsahovat céčkovskou syntaxi, syntaxi v Pythonu a samotný popis funkce. Dost bylo však řečí, pusťme se do toho…
Začněme velmi jednoduchým příkladem, na kterém si popíšeme základní funkce. V následujících dvou kusech kódu budeme vytvářet bílý čtverec v černém poli(viz. obrázek).

Příklad v C:
/* Na tomto místě by měl být příkaz #include <...>, ten by měl obsahovat GL/gl.h, GL/glu.h nebo GL/glut.h, podle toho, co potřebujete */ main() { /* Zde by mělo být otevření okna */ glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); glFlush(); /* A zde spuštění smyčky okna */ }
Příklad v Pythonu:
#!/usr/bin/env python import sys from OpenGL.GLUT import * from OpenGL.GL import * def Displayed(): glClearColor(0.0, 0.0, 0.0, 0.0) glClear(GL_COLOR_BUFFER_BIT) glColorf(1.0, 1.0, 1.0) glBegin(GL_POLYGON) glVertexf(-0.5, -0.5) glVertexf(-0.5, 0.5) glVertexf(0.5, 0.5) glVertexf(0.5, -0.5) glEnd() glFlush() glutInit(sys.argv) glutCreateWindow("Ctverec") glutReshapeWindow(400, 400) glutPositionWindow(100, 100) glutDisplayFunc(Displayed) glutMainLoop()
Funkce s předponou glut jsou importovány z moduluOpenGL.GLUT. Knihovna GLUT implementuje aplikační rozhraní pro tvorbu oken a jednoduchého grafického uživatelského prostředí. Podrobněji ji probereme později, zatím nám pro příklady bude stačit, že vytváří okno, ve kterém se zobrazí grafika pomocí OpenGL.
glClearColor
void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); glClearColor(red, green, blue, alpha) -> None
Funkce specifikuje pomocí hodnot red, green, blue a alpha barvu, která bude použita funkcí glClear při vyčištění barevných bufferů. Předávané hodnoty musí být v rozmezí 0 až 1.
glClear
void glClear(GLbitfield mask); glClear(mask) -> None
Nastaví plochu okna na hodnoty nastavené funkcemi glClearColor, glClearIndex, glClearDepth, glClearStencil a glClearAccum. Funkce přejímá jeden argument, který je logickým součtem(OR) následujících hodnot:
- GL_COLOR_BUFFER_BIT – vyčistí zadní barvový buffer
- GL_DEPTH_BUFFER_BIT – vyčistí paměť hloubky
- GL_STENCIL_BUFFER_BIT – vyčistí paměť šablony
- GL_ACCUM_BUFFER_BIT – vyčistí akumulační buffer.
glColor
Funkce určuje, jaká barva bude použita pro kreslení objektů. Existují dvě varianty funkce: 1) s třemi parametry, 2) se čtyřmi parametry. První nastavuje kombinaci RGB, druhá RGBA.
glColor3b(red, green, blue) -> None glColor3d(red, green, blue) -> None glColor3f(red, green, blue) -> None glColor3i(red, green, blue) -> None glColor3s(red, green, blue) -> None glColor3ub(red, green, blue) -> None glColor3ui(red, green, blue) -> None glColor3us(red, green, blue) -> None glColor4b(red, green, blue, alpha) -> None glColor4d(red, green, blue, alpha) -> None glColor4f(red, green, blue, alpha) -> None glColor4i(red, green, blue, alpha) -> None glColor4s(red, green, blue, alpha) -> None glColor4ub(red, green, blue, alpha) -> None glColor4ui(red, green, blue, alpha) -> None glColor4us(red, green, blue, alpha) -> None
glBegin, glEnd
void glBegin(GLenum mode); void glEnd(); glBegin(mode) -> None glEnd() -> None
Při vykreslování primitiv musíme zadat příkaz glBegin (typ primitiva) pro sdělení, že se začínají zadávat jednotlivé vrcholy primitiva, a glEnd(), který primitivum ukončí. Pro každý typ primitiva musíte zadat samostatný pár těchto příkazů. Zde bych doporučil odskočit na článek Grafická knihovna OpenGL (3): základní geometrické prvky, kde autor popisuje módy této funkce velmi vyčerpávajícím způsobem.
glVertex
Tato funkce vykresluje jednotlivé vrcholy primitiv. Funkci mohou být předány dva, tři nebo čtyři parametry, které představují souřadnice bodu. Pro 2D scény postačí dva parametry, pro 3D scény se používají tři nebo čtyři parametry.
glVertex2d(x, y) -> None glVertex2f(x, y) -> None glVertex2i(x, y) -> None glVertex2s(x, y) -> None glVertex3d(x, y, z) -> None glVertex3f(x, y, z) -> None glVertex3i(x, y, z) -> None glVertex3s(x, y, z) -> None glVertex4d(x, y, z, w) -> None glVertex4f(x, y, z, w) -> None glVertex4i(x, y, z, w) -> None glVertex4s(x, y, z, w) -> None
glFlush
void glFlush(); glFlush() -> None
Tato funkce zajistí provedení všech operací na grafické kartě.
Tak a to by bylo pro dnešek vše…