Hlavní navigace

Knihovna PyOpenGL (3)

25. 3. 2005
Doba čtení: 4 minuty

Sdílet

V dnešním dílu seriálu o knihovně PyOpenGL začneme probírat popis jednotlivých funkcí knihovny. Začneme velmi jednoduchým příkladem.

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

Bílý čtverec v černém poli

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_BUF­FER_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.

root_podpora

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…

Byl pro vás článek přínosný?