vers l'index général de l'aide
Puisque l'écriture d'un script nécessite la manipulation de données tridimensionnelles, il importe de bien comprendre comment fonctionne le système de coordonnées utilisé.
Le "monde" dans lequel sont décrits les objets est "balisé" par trois axes : x, y et z. Ces axes sont perpendiculaires entre eux, et on peut s'imaginer que chaque "paire" d'axes forme un plan.
En chaque point de ces axes existe une valeur, qui correspond à la distance (positive ou négative) entre l'origine de l'axe et le point considéré. Les trois axes se croisent à l'endroit de leurs origines.
Ce système, où +z pointe à l'"arrière" du plan défini par x et y (si x est l'abscisse et y est l'ordonnée), est appelé "système main gauche", on verra plus tard pourquoi. Conceptuellement, on peut voir ce système comme si on était en face d'un tableau, et que z exprime la profondeur derrière le tableau. Bien entendu, en travaillant sur une scène, on peut conceptualiser comme on veut ce rapport à l'observateur. Par exemple, votre serviteur aime bien travailler avec la caméra dans le "monde positif", regardant plutôt dans la direction de l'origine. D'une manière générale, ce système d'axe implique une notion d'immersion dans la scène.
D'autres systèmes d'axes existent, le plus courant étant le système "main droite", où on considère qu'on travaille à partir d'un plan horizontal, et que l'axe +z décrit une "élévation" vers l'observateur. En pratique, cela revient à permuter les axes +y et +z. C'est un système d'axes fréquemment rencontré dans les logiciels de CAO, qui fonctionnent beaucoup sur une notion de passage de la 2D (le plan) à la 3D (les volumes disposés sur le plan), et, par contamination, beaucoup de logiciels d'images de synthèse. Malheureusement, Moray, le modeleur le plus abouti dédié à POV-Ray, a pris le pli d'adopter ce système.
Si vous devez importer des éléments de scène créés dans un logiciel qui
utilise un système "main droite", vous pouvez :
- soit permuter toutes les valeurs de x et y, <14,54,75> devenant <14,75,54>,
ce qui est un peu fastidieux si ce n'est pas automatisé, mais permet de continuer
à travailler dans le système habituel.
- soit changer le vecteur right de la caméra, ce qui fera passer
POV-Ray (qui a de la souplesse, lui !) en système "main droite" : right x*-4/3.
En plus d'être un bon moyen mnémotechnique, cette métaphore sera utile pour travailler avec les rotations d'objets. C'est très simple : le pouce, l'index et le majeur sont respectivement les axes x, y et z dans le sens positif, ce qui en système "main gauche" donnera :
et en système "main droite" :
Chaque point dans l'espace peut être décrit comme une combinaison de trois positions sur ces trois axes, selon une syntaxe de type <x,y,z>. L'origine se note <0,0,0>. L'illustration suivante montre la correspondance entre un point dans l'espace, et sa position sur les trois axes.
Rappel : un vecteur est un segment de droite qui a une origine, une direction, un sens et une intensité (longueur). Pour simplifier, on peut dire que c'est un segment de droite avec un point de départ (l'origine) et un point d'arrivée (duquel dépendent la direction, l'intensité et le sens).
Dans POV-Ray, il n'y a pas de distinction entre la notation d'un point et celle d'un vecteur. Lorsqu'un vecteur est demandé, son origine implicite est <0,0,0>, et son point d'arrivée est le point spécifié. Ce n'est pas un problème, puisque les vecteurs servent à donner une direction (pour plane,..) ou une direction et une intensité (pour turbulence,..), etc...
Afin d'exploiter au mieux les éléments du système d'axes, il faut savoir qu'il existe des variables prédéfinies qui permettent de gagner du temps de dactylographie.
x = <1,0,0> y = <0,1,0> z = <0,0,1> //donc, au lieu d'écrire plane {<0,1,0>,0 ... rotate <0,0,45>} //on peut écrire plane {y,0 ... rotate z*45} //z*45 = <0,0,1>*45 = <0,0,45>
On dispose aussi de ce qui s'appelle la "promotion des vecteurs" ; partout où un vecteur est demandé, on peut utiliser un nombre décimal, qui sera interprété comme un vecteur dont les trois valeurs sont identiques.
cylinder {<0,0,0>,<20,20,20>,15 pigment {rgb <0.5,0.5,0.5>}} // peut s'écrire : cylinder {0,20,15 pigment {rgb 0.5}}
Et enfin, il existe un moyen d'extraire une des valeurs d'un vecteur :
si Vec1 = <12,54,68>, alors Vec1.x = 12 Vec1.y = 54 Vec1.z = 68
auteur : Fabien Mosen