Eklablog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

Images de synthèse sous POV-RAY

Publicité

Tutoriel : La CSG part 1 : union

Prérequis

Nous supposerons que vous savez créer une scène simple sous POV-RAY : une source de lumière, même basique, et une caméra. Il vous faudra connaître, au moins pour les bases, les objets box, sphere et cylinder dans un premier temps, et torus par la suite. 

Quasiment tous les objets sont utilisables en CSG. Nous n'utiliserons que les plus simples pour l'instant.

Les codes source donnés ci-dessous fonctionneront parfaitement à condition d'ajouter en début de votre fichier la ligne

#include "couleur.inc" 

et, bien évidemment, de posséder mon fichier du même nom (vous le trouverez dans les outils). Si vous ne souhaitez pas l'utiliser, libre à vous de remplacer les noms de couleur par des définitions "classiques". Par exemple, vous pouvez utiliser le "color.inc" livré avec le programme pour utiliser les couleurs anglaises.

L'union : les bases

Comme son nom l'indique, l'union permet de réunir plusieurs objets en un seul. Pour réaliser un union, il suffit d'écrire :

union {
    objet1
    objet2
    .....
    dernier objet
}

 Exemple :


 

 

 


union {
    box {<-1,-1,-1>,<1,1,1>}
    box {<-0.5,1,-0.5>,<0.5,1.5,0.5>}
    pigment {color ROUGE}
}

 

 

 

 

Facile. Mais quel intérêt ?

Les opérations de CSG mutualisent les textures

Dans le code précédent, on voit que l'on n'a défini qu'une seule texture, commune aux deux objets. Cela permet d'économiser du code, et de gagner en lisibilité, ainsi qu'en facilité d'évolution. En effet, vous voulez changer la couleur de l'ensemble ? Une seule ligne à changer. Pas de risque d'oubli.

Plus intéressant encore, la texture est réellement plaquée sur l'ensemble comme si c'était un seul et unique objet.

 

 

 

union {
    box {<-1,-1,-1>,<1,1,1>}
    box {<-0.5,1,-0.5>,<0.5,1.5,0.5>}
    pigment {marble turbulence 1}
}

 

 

 

 

 

Pas de discontinuité. Pas de raccord.

Les CSG peuvent être utilisés dans un #declare


 

 

 

#declare tour=union {
    box {<-1,-1,-1>,<1,1,1>}
    box {<-0.5,1,-0.5>,<0.5,1.5,0.5>}
    pigment {marble turbulence 1}
}
object {tour}
object {tour translate 3*y}

 

 

 

 

 Quelle économie de code !

Les textures sont mutualisées, sauf si l'on demande le contraire

Il est en effet possible de définir des textures spécifiques à une partie de l'union. Si un des éléments définit une texture de manière explicite, elle sera prédominante sur la texture de l'union :

 

 

 

union {
    sphere {<-4,1,0>,1}
    sphere {<-2,1,0>,1}
    sphere {<0,1,0>,1 pigment {color BLEU}}
    sphere {<2,1,0>,1}
    sphere {<4,1,0>,1}
    pigment {color ROUGE}
}

 

 

 

 

Les Union permettent de créer des objets manquant à POV-RAY

Ainsi, par exemple, voici un cylindre aux bords arrondis :

 

 

 

 

union {
    cylinder {<-3,1,0>,<3,1,0>,1}
    sphere {<-3,1,0>,1}
    sphere{<3,1,0>,1}
    pigment {color ROUGE}
}

 

 

 

 

Evidemment, on ne fait pas tout avec un union. C'est pour celà que l'on verra plus tard les autres techniques de CSG.

Pour terminer, un exemple plus complexe, qui ne fait appel qu'à des union :

(adapté d'un précédent projet)

#declare Cadre = union {
    sphere {<-3,0.2,-10>,0.2}
    sphere {<3,0.2,-10>,0.2}
    sphere {<-3,0.2,10>,0.2}
    sphere {<-3,0.2,-10>,0.2}
    sphere {<-3,8,-10>,0.2}
    sphere {<3,8,-10>,0.2}
    sphere {<-3,8,10>,0.2}
    sphere {<-3,8,-10>,0.2}
    cylinder {<-3,0.2,-10>,<-3,0.2,10>, 0.2}
    cylinder {<3,0.2,-10>,<3,0.2,10>, 0.2}
    cylinder {<-3,0.2,10>,<3,0.2,10>,0.2}
    cylinder {<-3,8,-10>,<-3,8,10>, 0.2}
    cylinder {<3,8,-10>,<3,8,10>, 0.2}
    cylinder {<-3,8,10>,<3,8,10>,0.2}
    cylinder {<-3,0.2,-10>,<-3,8,-10>,0.2}
    cylinder {<3,0.2,-10>,<3,8,-10>,0.2}
}
#declare Boule=union{ 
    cylinder{ <-3,0,0>,<0,-5.5,0>,0.02}
    cylinder{ <3,0,0>,<0,-5.5,0>,0.02}
    sphere{<0,-6,0>,1}
}
union {
    object {Cadre}
    object{Boule rotate 45*x translate <0,8,-6>}
    object{Boule translate <0,8,-4>}
    object{Boule translate <0,8,-2>}
    object{Boule translate <0,8,0>}
    object{Boule translate <0,8,2>}
    object{Boule translate <0,8,4>}
    object{Boule translate <0,8,6>}
    pigment {color ROUGE}
    scale 0.3
}

 

Prochain épisode : l'opération Merge.

A bientôt

Publicité
Retour à l'accueil
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article