Images de synthèse sous POV-RAY
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.
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 ?
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.

#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 !
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}
}
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