Exemple PyOpenGL
Animation 3D crée avec PyOpenGL
On peut créer des animations 3D avec VPython mais aussi avec PyOpenGL:
Cela permet de se familiariser avec OpenGL qui est compatible avec Android, tout en restant sur une interface en Python.
En fait, la 3D pour Android, c'est plutôt OpenGLES, la version allégée de OpenGL ...
OpenGL est plus puissant que VPython...
Voilà un exemple, c'est un programme PYTHON qui génère une animation qui varie à l'infini... Il s'agit ici bien évidemment d'un extrait :
Et le code:
# -*- coding: cp1252 -*
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import
import random
def cube(trans_abs,trans_ordo,trans_cote):
x=trans_abs
y=trans_ordo
z=trans_cote
# liste des sommets
sommets=((1+x,-1+y,-1+z),(1+x,1+y,-1+z),(-1+x,1+y,-1+z),(-1+x,-1+y,-1+z),
(1+x,-1+y,1+z),(1+x,1+y,1+z),(-1+x,-1+y,1+z),(-1+x,1+y,1+z))
# liste des segments
segments=((0,1),(0,3),(0,4),(2,1),
(2,3),(2,7),(6,3),(6,4),
(6,7),(5,1),(5,4),(5,7))
# liste des faces
faces=((0,1,2,3),(3,2,7,6),(6,7,5,4),(4,5,1,0),(1,5,7,2),(4,0,3,6))
# liste des couleurs
couleurs=((1,0,0),(0,1,0),(0,0,1),(0,1,0),(1,1,1),(0,1,1),
(1,0,0),(0,1,0),(0,0,1),(1,0,0),(1,1,1),(0,1,1))
# dessine des carrés
glBegin(GL_QUADS)
for face in faces:
x=0
for som in face:
x=x+1
glColor3fv(couleurs[x])
glVertex3fv(sommets[som])
glEnd()
# dessine des segments
glBegin(GL_LINES)
for segment in segments:
for som in segment:
glVertex3fv(sommets[som])
glEnd()
def main():
pygame.init()
display = (1000,600)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
gluPerspective(60, (display[0]/display[1]), 0.1 , 220.0
glTranslatef(0 , 0 , -200
glRotate(0,0,0,0)
depasse = 0
bouge_x=0
bouge_y=0
while depasse==0:
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
m = glGetDoublev(GL_MODELVIEW_MATRIX)
#print(m)
cote_cam = m[3][2]
print(cote_cam)
if cote_cam<-1:
#depasse= 1
glTranslatef(0 , 0,-200)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glTranslatef(bouge_x , bouge_y , 2 )
cube(10,-10,-50)
cube(-10,15,50)
cube(-20,45,10)
pygame.display.flip()
pygame.time.wait(30)
main()
pygame.quit()