Hlavní navigace

Knihovna PyOpenGL (3)

Jakub Matys 25. 3. 2005

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.

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…

Našli jste v článku chybu?
Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: E-shopy: jen sleva už nestačí

E-shopy: jen sleva už nestačí

Podnikatel.cz: Dárky v podnikání. Jak je uplatnit v daních?

Dárky v podnikání. Jak je uplatnit v daních?

Vitalia.cz: Jak koupit Mikuláše a nenaletět

Jak koupit Mikuláše a nenaletět

Vitalia.cz: Žloutenka v Brně: Nakaženo bylo 400 lidí

Žloutenka v Brně: Nakaženo bylo 400 lidí

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC