Formation POV #4: Objets

Primitives

Les primitives sont les objets de base à partir desquels, par combinaisons, on va pouvoir obtenir des objets plus complexes.

Les primitives les plus utilisées sont plane, sphere, box, cylinder, cone, et torus.

primitives

plane (plan)

plane {<n>,a}

Un plan est défini par sa normale extérieure n (l’intérieur étant rempli de matière) et par l’abcisse a de ce plan sur l’axe (0,u) où u est n normalisé.

Par exemple, pour faire un plafond à une altitude +10, la normale extérieure sera -y et l’altitude -10.

plane

sphere (sphère)

sphere {<c>,r}

Une sphère est définie par son centre et son rayon.

sphere

box (parallélépipède rectangle)

box {<c1>,<c2>}

Un parallélépipède rectangle est défini par les coordonnées de 2 sommets opposés. Ses arêtes sont parallèles aux axes.

Ainsi, si les 2 coins sont <x1,y1,z1> et <x2,y2,z2>, la boîte contiendra tous les points <x,y,z> tels que x est compris entre x1 et x2, y entre y1 et y2 et z entre z1 et z2.

box

cylinder (cylindre)

cylinder {<c1>,<c2>,r}

Un (tronc de) cylindre est défini par le centre de ses 2 faces et par son rayon.

cylinder

cone (cône)

cone {<c1>,r1,<c2>,r2}

Un (tronc de) cône est défini par le centre de ses 2 faces et par les rayons de ces faces.

cone

torus (tore)

torus {R,r}

Un tore est défini par son rayon majeur R et son rayon mineur r.

Il est centré en 0 et se situe dans le plan (x0z).

torus

CSG

La CSG (Constructive Solid Geometry) est un ensemble d’opérations permettant de combiner des objets pour en faire de plus complexes.
Ces opérations sont union, intersection, difference et merge.
Elles utilisent autant d’objets que l’on veut, mais nous en prendrons 3 (2 sur la figure) pour fixer les idées.

CSG

union

union {A B C} contient les points qui sont dans A, dans B, ou dans C.

intersection

intersection {A B C} contient les points qui sont à la fois dans A, B, et C.

difference

difference {A B C} contient les points qui sont dans A, mais pas dans B, ni dans C.

merge

Lorsque l’on fait l’union d’objets transparents, les parois des objets constituant l’union sont visibles. Quand ce n’est pas l’effet souhaité, on remplace union {A B C} par merge {A B C} :

merge

Note : Attention aux surfaces coïncidentes quand vous faites des CSG : difference {box {0,1} box {.5,1}} risque de poser des problèmes ; il faut mieux écrire difference {box {0,1} box {.5,2}}.

Objets avancés

Il existe d’autres objets POV. Tous sont décrits dans la documentation. Voici les plus utilisés :

height_field

height_field {_type_ "_fichier_"}

Un height_field prend un fichier image de type gif, tga, pot, png, pgm, ppm ou sys, et en fait une surface dont la hauteur de chaque point correspond à la couleur de l’image.
Cette surface est inscrite dans une boîte de coins <0,0,0> et <1,1,1>. Il sera souvent nécessaire de la redimensionner à l’aide d’un scale.
Les height_field sont très pratiques pour faire des terrains vallonnés.
La méthode la plus simple pour faire un height_field est de créer avec un programme de dessin une image en 256 niveaux de gris, le blanc correspondant à l’altitude maximale et le noir à l’altitude minimale.
Un petit dessin valant parfois mieux qu’un long discours, voici un exemple :

image d'origine montagne

L’image de gauche a été créée à partir d’un programme de dessin (Gimp) puis sauvée au format gif sous le nom map.gif. Dans l’image de droite, le height_field est obtenu par :

height_field {gif "map.gif"
 pigment {rgb <1,.9,.8>}
 finish {ambient .2 diffuse 1 specular .2 roughness .005}
}

text

On peut utiliser les height_fields pour dessiner du texte, mais pour cela on peut aussi utiliser la fonction text :

text {ttf "_fichier.ttf_" "_texte_" _épaisseur_,_décalage_}

On spécifie le fichier police ttf (truetype) à utiliser, la chaîne de caractères dont on veut faire un objet, l’épaisseur des caractères et un décalage, généralement <0,0,0>, à rajouter au décalage normal entre chaque caractère.
La taille des caractères dépend de la police ; il font généralement entre .5 et .75 unités de haut.
Les caractères sont situés dans le plan (x0y), la ligne de base étant l’axe X, et suivant Z ils vont de 0 à p où p est la profondeur.

text

Dans l’image ci-dessus le fichier ariblk.ttf se trouve dans le même répertoire que le fichier .pov et l’objet texte est obtenu par :

text {ttf "ariblk.ttf" "PovRay" .4,0
 pigment {rgb <1,.9,.8>}
 finish {ambient .2 diffuse 1 specular .5 roughness .01}
}

[ Page précédente | Sommaire | Page suivante ]