python-visual, encore appelé VPython, est un package de graphisme 3D pour le langage de programmation Python, créé par David Scherer en 2000 sous le nom de "Visual". VPython permet de créer facilement des formes 3D en mouvement et des animations. Il est accessible aux personnes ayant une expérience limitée en programmation. Étant donné qu'il est basé sur Python, il offre également de nombreuses possibilités pour les programmeurs ou chercheurs.
Il suffit d'installer le paquet python-visual.
Pour les versions précédentes d'Ubuntu, l'installation sera plus compliquée, se référer à cette page.
Visitez le site internet de Vpython, ainsi que la page de documentation.
Pour démarrer avec un exemple simple, créez, avec votre éditeur de texte préféré, le script balle.py
, qui contiendra :
from visual import * floor = box (pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue) ball = sphere (pos=(0,4,0), radius=1, color=color.red) ball.velocity = vector(0,-1,0) dt = 0.01 while 1: rate (100) ball.pos = ball.pos + ball.velocity*dt if ball.y < ball.radius: ball.velocity.y = abs(ball.velocity.y) else: ball.velocity.y = ball.velocity.y - 9.8*dt
Ouvrez ensuite une console, déplacez vous dans le répertoire contenant le fichier balle.py
, et exécutez le script avec :
python balle.py
Vous devriez voir apparaître une nouvelle fenêtre contenant l'animation d'une balle rebondissant sur un sol.
python-visual ne supporte pas de fonctionnalité pour exporter votre animation en fichier vidéo. Afin de remédier à ce problème, il existe une solution consistant à :
pov
, grâce au module povexport
, à intervalle régulier de l'animation. Cela créera, par exemple, des fichers anim00.pov
, anim01.pov
… anim099.pov
. Les fichiers pov
sont des fichiers textes.pov
obtenus en fichier png
, grâce à l'outil en ligne de commande povray
.anim.avi
, grâce à l'outils en ligne de commande mencoder.povexport est une module Python disponible sur le site vpython.org à cette adresse (clic droit + Enregistrer la cible du lien sous…).
Après décompression de l'archive zip, vous obtiendrez trois fichiers (attention, l'archive ne contient pas de répertoire, directement les trois fichiers) :
C'est bien entendu le premier fichier, povexport.py
qui est important. Pour faire simple, il doit être présent dans le même répertoire que votre script VPython
. (Les habitués de Python placeront ce script dans un répertoire du PYTHONPATH
par exemple.)
Il suffit d'installer le paquet povray.
Reprenons notre script d'animation de balle ci-dessus, et modifions le pour créer des fichiers pov
à intervalles réguliers durant l'animation, nous appellerons ce script balle_video.py
:
from visual import * import povexport import os #creating a directory for stocking *.pov files pov_output = 'pov_output' if not os.path.isdir(pov_output): os.mkdir(pov_output) #necessary when exporting to pov file to capture all the scene scene.range = 7 floor = box (pos=(0,0,0), length=4, height=0.5, width=4, color=color.blue) ball = sphere (pos=(0,4,0), radius=1, color=color.red) ball.velocity = vector(0,-1,0) dt = 0.01 for image_num in range(100): rate (100) ball.pos = ball.pos + ball.velocity*dt if ball.y < ball.radius: ball.velocity.y = abs(ball.velocity.y) else: ball.velocity.y = ball.velocity.y - 9.8*dt #exporting to pov file basename = 'balle%3.3i.pov' % (image_num,) filename = os.path.join(pov_output,basename) povexport.export(filename=filename) print filename
Après avoir vérifié que le fichier povexport
est bien présent dans le même répertoire que balle_video.py
, l'exécution du script :
python balle_video.py
va créer 100 fichiers balleXXX.png dans le sous-répertoire pov_output
.
Déplacez vous dans le répertoire pov_output
:
cd pov_output
La syntaxe pour créer un fichier image png
à partir du fichier texte pov
est :
povray +Oballe000.png balle000.pov
Afin de traiter les 100 fichiers en une seule commande, on va utiliser une boucle. (voir ce tutoriel pour une introduction aux scripts shell) :
for file in *.pov; do povray +O${file%.pov}.png $file; done
qui a créer 100 fichiers png.
Nous pouvons maintenant encoder les fichiers images png
en fichier vidéo, grâce à mencoder :
mencoder mf://*.png -mf w=320:h=240:fps=10:type=png -ovc lavc -o balle.avi
et visualiser la vidéo créée à l'aide d'un lecteur vidéo.
Pour supprimer cette application, il suffit de supprimer le paquet python-visual.