TP 1 : Introduction à l`utilisation de POV
Transcription
TP 1 : Introduction à l`utilisation de POV
TP 1 : Introduction à l'utilisation de POV-Ray Option Géométrie et Infographie L2 Math-Info 2008-2009 1.Opérateurs de transformation Allez sur la page web : http://lumimath.univ-mrs.fr/~broglio/ dans la rubrique Enseignement - L2. Téléchargez sur votre compte le fichier exemple.pov (dans un nouveau répertoire de travail que vous nommerez pov).Ce fichier comporte un texte qui décrit la scène dont on cherche à calculer une vue. Procédez au calcul en tapant dans un terminal, et dans le bon répertoire où se trouve le fichier, la ligne suivante : povray +Iexemple.pov +L/usr/local/povray31/include/ +D +P Editez le fichier et comparez le langage de description de scène avec le résultat obtenu. 2.Premiers éléments du langage de PovRay Un fichier de scène comporte toujours un certain nombre d'éléments, dans un ordre précis : une seule caméra active, puis au moins une lumière et enfin une série d'objets. Toutes les descriptions se font par rapport à un repère orthonormé indirect. Tapez le listing depart.pov suivant, puis calculez l'image. Les parties entre /* et */ sont des commentaires pour vous aider :vous n'êtes pas obligés de les recopier ! Remarquez la structure suivante qui est obligatoire : en premier, l'observateur, puis les lampes et seulement après les objets. /* depart.pov : Scene de base pour la suite... */ #include "colors.inc" /* incorpore les definitions des couleurs */ #include "textures.inc" /* incorpore les definitions des textures */ /****************** D'abord une camera : *******************/ camera { location <0,3,-5> /* Position de la camera */ look_at <0,1,0> /* Point qu'elle vise */ } /****************** Puis au moins une lumiere : *******************/ light_source { <-3,5,-5> /* Position de la lumiere : */ /* un peu au dessus et a gauche de la camera */ color White /* Lumiere blanche */ } /****************** Maintenant les objets : *******************/ /* Un plan pour materialiser un sol vert : */ plane { <0,1,0>,0 /* vecteur normal au plan (vers l'exterieur), */ /* distance a laquelle commence le plan dans cette direction */ texture { pigment { color Green } }} /* Une boule blanche posee sur le sol : */ sphere { <0,1,0>,1 /* coordonnees du centre et rayon de la sphere */ texture { pigment { color White } }} Modifiez des paramètres dans la scène et effectuez le rendu pour voir si l'effet prévu est bien celui produit. 3.Les primitives a.Syntaxe des objets de base • sphere { <x,y,z>,r } Une sphère de rayon dont le centre est à la coordonnée . box { <xmin,ymin,zmin>,<xmax,ymax,zmax> } Un boite définie par un coin min et un coin max, les arêtes sont parallèles aux axes. cylinder { <x1,y1,z1>,<x2,y2,z2>,r } Un cylindre de rayon dont l'axe est le segment . cone { <x1,y1,z1>,r1,<x2,y2,z2>,r2 } Même signification que pour le cylindre, mais avec un rayon pour chaque extrémité du segment. torus { grand,petit } Un tore centré en et dont le grand rayon est rayon du trou intérieur est égal à et le petit et le rayon extérieur est égal à plane { <normx,normy,normz>,distance} Un plan (en fait un demi-espace) dont la normale est le vecteur situé à . Par conséquent, le . . Ce plan est unités de l'origine. En fait, tous ces objets sont pleins. La notion de leur intérieur et extérieur est bien définie. Ce ne sont pas juste des surfaces. Le coté plein est toujours celui qui est à l'intérieur. Pour le plan c'est un peu plus subtil, le vecteur normal de la définition indique le demi-espace quin'est pas le coté plein. Il existe plusieurs autres types de primitives que nous aborderons ultérieurement car elles sont moinsévidentes. b. Opérateurs booléens : Constructive Solid Geometry Puisqu'on peut toujours savoir par le calcul si un point est à l'intérieur d'un objet, on peutdéfinir les opérateurs suivants. Soient deux objets A et B, les commandes union { A B } intersection { A B } difference { A B } désignent respectivement l'union logique de A et B,leur intersection et leur différence (A-B).Par exemple, pour qu'un point soit à l'intérieur de difference { A B }, il doit être à l'intérieur de A mais pas de B. Tapez la scène csg.pov suivante, puis effectuez le rendu. /* csg.pov: Demo des Constructive Solid Geometry */ #include "colors.inc" #include "textures.inc" /****************** D'abord une camera : *******************/ camera { location <2,3,-3> /* Position de la camera */ look_at <0,0,0> /* Point qu'elle vise */ } /****************** Puis au moins une lumiere : **************/ light_source { <-6,5,-5> color White } light_source { < 6,5,-5> color White } /****************** Maintenant les objets : *******************/ plane { <0,1,0>,-1 texture { pigment { color Green } }} union { sphere { <-.5,0,0>,1 texture { pigment { Red } } } sphere { < .5,0,0>,1 texture { pigment { Blue } } } } Changez le mot clé union successivement en intersection puis en differenceet calculez l'image à chaque fois. 4.Opérateurs de transformation Il existe plusieurs opérateurs permettant de transformer un objet : translate, scale, rotate et matrix.Ils s'insèrent tous à la fin d'un objet (juste avant le "}" final). Pour déplacer un objet, on dispose de la commande translate qui est suivie d'un vecteur< , , > qui indique le vecteur de translation souhaité. La commande rotate est normalement suivie d'un vecteur commetranslate, mais il est, en général, plus simple de l'écrire commeun produit. Par exemple, la commande rotate 60*z provoquera une rotation de l'objet de 60 degrés dans le sens positif, autour de l'axe . La commande scale < , , > effectue une affinité sur chaque axe de rapport respectifs , et . Un rapport égal à -1 donne une symétrie. La commande matrix < de coefficients , ,..., > effectue une transformation suivant la matrice . Attention, l'ordre est important, ces opérations ne sont pas commutatives : elles opérent dans l'ordre où elles apparaissent dans le fichier. sphere { <0,1,0>,1 /* centre et rayon de la sphere */ scale <1,1,2> /* affinité de rapport 2 suivant 0z */ translate <1,1,1> /* puis translation en (1,1,1) */ } 5.Les textures Chaque objet doit comporter une texture (son aspect), sous peine d'apparaîtretotalement noir. Cela se fait simplement en mettant dans chaque objet destiné à être calculé un bloc texture. Une bille chromée se fait en tapant les lignes suivantes : sphere { <0,0,0>,1 texture { Chrome_Metal }} Cependant, afin de disposer du nom de texture Chrome_Metal,il est nécessaire de placer en tête du fichier ceci : #include "colors.inc" #include "textures.inc" Ce qui donne l'ordre à PovRay de lire les fichiers colors.inc ettextures.inc et d'incorporer dans le texte actuel les définitionsqu'ils contiennent, respectivement des couleurs et des matières. On a alors quelques identificateurs de textures facilement utilisables(attention aux majuscules) dont : texture { Copper_Metal } texture { Chrome_Metal } texture { DMFWood6 } texture { pigment { color White } } texture { pigment { color Red } } Les deux dernières commandes permettent de "peindre" l'objet dans une couleur uniforme. Choisissez une couleur (en anglais, évidement) et essayez-la. 6.L'instruction #declare On peut donner un nom à une construction pour y faire référence plus tard.Cela se fait grâce à #declare : #declare rayon = 10 ; /* une valeur */ #declare position = <1,2,3> ; /* un vecteur */ #declare boule = sphere { position,rayon } /* un objet */ #declare truc = union { boule /* objet declare au dessus */ torus { rayon+rayon2 , rayon2 /* les deux rayons du tore */ translate position } /* on deplace le tore pour qu'il entoure la boule */} Puis pour que l'objet déclaré boule apparaisse dans le résultat, il faut en plus placer une (ou plusieurs) référence(s) à cet objet par : object { boule } De manière générale, un #declare "apprend" au logiciel quelque chose, mais cela ne le fait pas pour autant apparaître dans la scène. On se sert de cette méthode pour factoriser certains éléments constituant une scène qui apparaissent plusieurs fois : ça évite de les taper inutilement. C'est aussi très utile pour paramétrer une construction : dans l'exemple truc utilise les mêmes paramètres que boule, ainsi sion veut changer rayon ou position, cela modifiera d'un coup boule et truc. Tapez la scène complexe.pov suivante, effectuez en le rendu. /* complexe.pov: Mise en scene complexe avec references d'objets. */ #include "colors.inc" #include "textures.inc" /****************** D'abord une camera : *******************/ camera { location <0,3,-5> /* Position de la camera */ look_at <0,1,0> /* Point qu'elle vise */ } /****************** Puis au moins une lumiere : *******************/ light_source { <-3,5,-5> /* Position de la lumiere : */ /* un peu au dessus et a gauche de la camera */ color White /* Lumiere blanche */} /****************** Maintenant les objets : *******************/ /* Un plan pour materialiser un sol vert : */ plane { <0,1,0>, /* vecteur normal au plan (vers l'exterieur), */ 0 /* distance a laquelle se trouve le plan dans cette direction */ texture { pigment { color Green } }} #declare longueur_cote = 4 ; #declare hauteur_cendrier = 1 ; #declare cendrier = difference { box { <-longueur_cote/2, 0,-longueur_cote/2>, < longueur_cote/2, hauteur_cendrier, longueur_cote/2> } sphere { <0,hauteur_cendrier,0>,1 scale <longueur_cote/2.1,hauteur_cendrier*0.8,longueur_cote/2.1> }} object { cendrier texture { pigment { color Grey } } rotate <0,30,0>} #declare intervalle = 1 ; #declare rayon = 0.2 ; #declare hauteur_tube = 4 ; #declare tube = cylinder { <0,0,0>,<0,hauteur_tube,0>,rayon} #declare rangee = union { object {tube translate -4*intervale*<1,0,0> } object {tube translate -3*intervale*<1,0,0> } object {tube translate -2*intervale*<1,0,0> } object {tube translate -1*intervale*<1,0,0> } object {tube} object {tube translate 1*intervale*<1,0,0> } object {tube translate 2*intervale*<1,0,0> } object {tube translate 3*intervale*<1,0,0> } object {tube translate 4*intervale*<1,0,0> } } object { rangee texture { pigment { color Blue } } translate <0,0,5>} Exercice 1 : modélisation d'une table Le but est de modéliser une table à partir de certains paramètres : 1. longueur, largeur et épaisseur de la planche, 2. hauteur et épaisseur des pieds (forme à choisir) 3. distance entre les pieds et le bord de la planche. Une fois que vous avez une table acceptable, placez la sur un sol (plane)que vous aurez créé (à l'altitude 0).Faites varier les paramètres, si vous vous êtes bien débrouillés, vous ne devriez pas avoir de table volante ou autres bizarreries... Exercice 2 : rotations d'un dé à jouer Modélisez un dé à jouer, cube sur les faces duquel sont posés des symboles en nombre égal à 1, 2, 3, 4, 5, 6. Faites d'abord 6 copies de ce cube, orientées pour présenter chacune des 6 faces, puis présentez le cube posé sur un coin, c'est-à-dire présentant à l'observateur 3 faces contigües.