Voici une nouvelle version de l'ouverture d'une fenêtre graphique, bien plus longue mais bien plus propre que la précédente.
Elle est à retenir.
modules importés
from OpenGL.GL import * from OpenGL.GLUT import * from OpenGL.GLU import * import sys
On donne un numéro à notre future fenêtre graphique
window = 0
Une fonction générale d'initialisation OpenGL. On fixe tous les paramètres initiaux
On appelle cette fonction juste après que notre fenetre OpenGL a été créée.
def InitGL(Width, Height):
On fixe la couleur du fond d'écran à noir
glClearColor(0.0, 0.0, 0.0, 0.0)
On fixe la couleur de buffer de profondeur
glClearDepth(1.0)
Le type de test de la profondeur à effectuer
glDepthFunc(GL_LESS)
Actionner le test de profondeur
glEnable(GL_DEPTH_TEST)
Actionner l'étalement des ombres
glShadeModel(GL_SMOOTH) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(45.0, float(Width)/float(Height), 0.1, 100.0) glMatrixMode(GL_MODELVIEW)
La fonction appelée quand la fenêtre OpenGL est redimentionnée (sans effet si l'on met en place l'option plein écran)
def ReSizeGLScene(Width, Height):
Evite la division par 0 si la fenêtre est trop petite
if Height == 0: Height = 1
Remise à zéro de toute transformation de point de vue ou de perspective
glViewport(0, 0, Width, Height) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(45.0, float(Width)/float(Height), 0.1, 100.0) glMatrixMode(GL_MODELVIEW)
La fonction principale de dessin
def DrawGLScene():
Efface l'écran et le tampon de profondeur, remet la vue à zéro.
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity()
Si l'on est en double buffer, échange les buffers pour afficher ce qui vient juste d'être dessiné
glutSwapBuffers()
La fonction appelée quand une touche esr pressée.
def keyPressed(*args):
global window
Si on appuie sur Echap, on ferme tout
if args[0] == 'q': sys.exit()
def main():
global window
On passe les arguments de la ligne de commande à la fonction d'initialisation
glutInit(sys.argv)
Sélectionne le type d'affichage : Double buffer, couleurs RGBA, composante Alpha supportée, buffer de profondeur
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
La fenêtre fera 640 x 480 pixels
glutInitWindowSize(640, 480) glutInitWindowPosition(0, 0) glutDisplayFunc(DrawGLScene)
Quand on ne fait rien, redéssiner la scène
glutIdleFunc(DrawGLScene)
Fixe quelle sera la fonction à appeler quand la fenêtre sera redimentionnée
glutReshapeFunc(ReSizeGLScene)
Fixe quelle sera la fonction à appeler quand une touche (clavier) sera pressée
glutKeyboardFunc(keyPressed)
Initialise notre fenêtre
InitGL(640, 480)
Commence la boucle de gestion des événements
glutMainLoop()
Affiche un message à la console, et appelle la fonction main()
print "Appuyez sur q pour quitter."
main()