V tomto článku se zaměříme na vytvoření jednoduché aplikace pro vykreslení 3D scény pomocí OpenGL. OpenGL sámo o sobě neumí vytvořit okno a zpracovávat události - prvky GUI. Proto použijeme jako nástavbu pythonovskou knihovku pyglet. Tato knihovna nám umožní pracovat se základními grafickými prvky, což jsou události myši, klávesnice a okna pro vykreslení scény, popřípadě taky multimediální soubory (obrázky, zvuk, atd).
Nejprve si nainstalujeme pyglet, možností je několik, buď z repozitáře vašeho systému nebo z pip repozitáře.
# ubuntu:
sudo apt-get install python-pyglet
# pip
sudo pip install pyglet
# fedora
sudo yum install python-pyglet
Celou naši aplikaci si zabalíme do hlavní třídy, aby se nám s ní lépe pracovalo
import pyglet #install python-pyglet
class UI:
def __init__(self):
self.win = pyglet.window.Window()
@self.win.event
def on_draw():
self.win.clear()
def run(self):
pyglet.app.run()
if __name__=="__main__":
ui = UI().run()
V příkladu vidíme už první práci s událostmi a to on_draw, která se zašle vždy když dojde ke změně sceny. Dekotárot @self.sin.event nám slouží pro registraci této události na volání dané funkce. Podobně budeme pracovat i s ostatními událostmi. Pro ty kdo se nesetkali s dekorátory, tak v jednoduchosti se jedná o označení funkce jinou funkcí, která se zavolá před a po jejím spuštění. :)
Práce s událostmi pak vypadá následovně, jen je potřeba dodržovat názvy method/funkcí. Zde si uvedeme zpracování většiny potřebných událostí.
class UI:
def __init__(self):
self.win = pyglet.window.Window()
@self.win.event
def on_draw():
self.win.clear()
@self.win.event
def on_key_press(symbol, modifiers):
print "key press (%s %s)" % (symbol, modifiers)
@self.win.event
def on_mouse_press(x, y, button, modifiers):
print "mouse press: ", x, y, button, modifiers
@self.win.event
def on_mouse_release(x, y, button, modifiers):
print "mouse release ", x, y, button, modifiers
@self.win.event
def on_mouse_motion(x, y, dx, dy):
print "mouse move: (%s, %s) -> (%s, %s) " % ( x, y, dx, dy)
Názvy funkcí mluví dostatečně, ale raději si ještě popíšeme. Volání funkce on_key_press se provede vždy když stiskneme nějakou klávesnice. Funkce on_mouse_press pak v případě stisknutí tlačítka myši, rozlišujeme pak klik na levé a pravé tlačítko myši. Tato událost se nám vyvolá i v případě že držíme tlačíko myši delší dobu. K tomu nám pak dobře poslouží funkce on_mouse_release která je zavolána jakmile tlačítko myši pustíme. Funkce on_mouse_motion je volána vždy když dojde ke změně kurozru, tedy pohybu myši, a to počáteční souřadnice a konečné. Nulové souřadnice jsou určeny levým horním bodem.
A máme jednoduchou aplikaci která nám zpracovává události GUI. Teď ještě něco vykreslit, ale na to se podíváme příště.