Aller au menu - Aller au contenu

Icône Les associations d'objets

Mise à jour : 01/07/2010
525 visites depuis 7 jours, dont 7 sur ce chapitre classé 218/786
Dernier de cette partie, ce chapitre vous apprendra à combiner plusieurs objets afin de faire de nouvelles formes, comme une demi-sphère, un cube aux arêtes arrondies, etc...
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Association - CSG...

Non, je ne vais pas vous parler d'une association de parents d'élèves :lol: mais d'associations d'objets, aussi appelées Opérations CSG (pour Constructive Solid Geometry). Ces choses permettent d'utiliser plusieurs objets afin d'en donner un nouveau. Elles sont au nombre de 4 :
  • L'union
  • La différence
  • L'intersection
  • La fusion

A part l'union, qui se contente d'unir plusieurs objets, les 3 autres opérations tiennent compte de l'intérieur et de l'extérieur des objets. Pour tous les objets que nous avons vus jusque là, l'intérieur et l'extérieur sont bien définis.

Il est possible d'inverser l'intérieur de l'extérieur en ajoutant le mot-clé invert à la fin d'un objet. Ce n'est pas vraiment utile, je ne l'ai personnellement jamais utilisé... Ça n'a aucune influence sur l'apparence directe de l'objet, mais uniquement sur son comportement dans les différentes opérations.

Une association (ou opération) se déclare comme un objet, en écrivant son mot-clé suivi d'accolades, mais prend pour paramètres les différents objets la composant... vous comprendrez mieux dans les explications spécifiques à chaque opération.

Union

L'association d'objets la plus couramment utilisée est l'union. Cette association sert uniquement à unir plusieurs objets en un seul...

Voici comment on s'en sert :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
union {
box {
<-0.5,-0.5,-0.5>
<0.5,0.5,0.5>
}

sphere {
<0,0.5,0>
0.2
}

}


Cette union regroupe donc une boîte et une sphère ! :D

Mais... à quoi ça sert ? :o
A beaucoup de choses ! :p

Plus sérieusement, l'union a de nombreuses utilités : puisque l'union associe plusieurs objets, toute modification appliquée à l'union sera appliquée sur tous les objets de cette union !

Exemple :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
cylinder {
  <0,0,0>
  <0,1,0>
  0.3
}

sphere {
  <0,1,0>
  0.3
}


Cela nous donne un cylindre, avec une sphère à une des extrémités. Supposons maintenant que l'on veuille déplacer cet ensemble de <0,0,1>. On pourrait utiliser un translate <0,0,1> pour le cylindre et pour la sphère, mais ce ne serait pas très pratique : à chaque modification, il faudrait modifier les deux...
On va donc utiliser une union regroupant le cylindre et la sphère ! Et, en appliquant un translate <0,0,1> à cette union, tout sera ainsi déplacé ! ^^

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
union {

cylinder {
  <0,0,0>
  <0,1,0>
  0.3
}

sphere {
  <0,1,0>
  0.3
}
translate <0,0,1>
}


De la même manière, rotate et scale fonctionne aussi sur les associations d'objets !

Il est également possible d'attribuer une couleur à une union, qui sera donc utilisée pour tous les objets la composant.

Utilisez union lorsque vous utilisez plusieurs formes afin de créer un objet. Même lorsque ce n'est pas directement utile, c'est un grand plus au niveau de la clarté !

Différence

Voilà une autre association d'objets que vous utiliserez énormément : c'est la différence, dont le mot-clé est difference.
Qu'a-t-elle de si magique ? :o Cette association prend le premier objet, puis lui enlève tout ce qui appartient aux autres.
Vous commencez à voir ?
Image utilisateur

Par exemple, pour faire une demi-sphère, il suffit de faire ça :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
difference {
sphere {
<0,0,0>
1
pigment { rgb <1,0,0> }
}
box {
<-2,-2,-2>
<2,0,2>
}
}


Et voilà ce que ça donne :
Image utilisateur
Super, non ? :D

Il faut savoir que la couleur de la nouvelle face est celle de l'autre objet...

Qu'est-ce que ça veut dire ?
Que si on regarde par en-dessous, pour voir la nouvelle face créée par la différence, elle sera noire !
Image utilisateur
Petit problème !
Il y a deux méthodes pour remédier à cela :
  • Donner la même couleur à la boîte : comme cela, la nouvelle face sera également rouge.
  • Donner la couleur rouge à la différence au lieu de la sphère.

La deuxième solution est bien plus pratique si notre objet est de couleur uniforme, comme ici !

Voilà donc le résultat, avec ce code-là :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
difference {
        sphere {
        <0,0,0>
        1 
        
    }
    box {
        <-2,-2,-2>
        <2,0,2>
    }  
    pigment { rgb <1,0,0> }
}


Image utilisateur

Mais si, maintenant, on remet la zone pigment dans la sphère, et que l'on donne un autre couleur à la boîte, comme bleu par exemple :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
difference {
        sphere {
        <0,0,0>
        1 
        pigment { rgb <1,0,0> } 
    }
    box {
        <-2,-2,-2>
        <2,0,2>
        pigment { rgb <0,0,1> }
    }  
    
}

Image utilisateur
Sympa ^^ on a fait une demi-sphère mi-rouge, mi-bleue...

Maintenant, on va faire un quart de sphère. Comment faire ? Très simple ! Il suffit d'ajouter une autre boîte !
Lors de différence où l'on retire plusieurs objets, on utilise souvent une union pour plus de clarté.

On va donc soustraire à notre sphère une union, composée des deux boîtes !
Et voilà le travail :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
difference {
        sphere {
        <0,0,0>
        1 
        pigment { rgb <1,0,0> } 
    }
    union {
        box {
            <-2,-2,-2>
            <2,0,2>
            pigment { rgb <0,0,1> }
        }  
        box {
            <-2,-2,-2>
            <0,2,2>
            pigment { rgb <0,1,0> }
        }  

    }    
}


Et le résultat :
Image utilisateur

Voilà tout pour la différence !
Évidemment, comme pour l'union, on peut appliquer des rotations, des translations, etc... directement à la différence !

Intersection

L'intersection, dont le mot-clé est intersection, est un petit peu moins employée que l'union et que la différence, mais peut s'avérer bien pratique dans certains cas.
Elle prend le premier objet, puis lui enlève tout ce qui n'appartient PAS au second, puis tout ce qui n'appartient pas au troisième, et ainsi de suite.
L'objet final est donc l'intersection de tous les objets.
Voilà un simple exemple : à gauche, l'intersection ; à droite, les deux sphères.
Image utilisateur

Et voilà le code :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
intersection {
    sphere {
        <0,-0.5,0>
        1 
        pigment { rgb <1,0,0> } 
    }
     sphere {
        <0,0.5,0>
        1 
        pigment { rgb <1,0,0> } 
    }
}


Tout comme la différence, la couleur d'une face est celle de l'objet l'ayant créée... Donc, avec un code comme celui-ci :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
intersection {
    sphere {
        <0,-0.5,0>
        1 
        pigment { rgb <1,0,0> } 
    }
     sphere {
        <0,0.5,0>
        1 
        pigment { rgb <0,1,0> } 
    }
}

... on obtiendra :
Image utilisateur

De plus, il est possible d'assigner une couleur globale à toute l'intersection, et de lui appliquer des modifications (translate, rotate, scale.... )

Pour info, une intersection est en fait une différence, où les objets après le premier sont pourvus de invert.


C'est tout pour l'intersection !

Fusion

Le mot-clé de la fusion est merge. La fusion est comme une union, sauf que les bords intérieurs de l'objet sont supprimés... Pour l'instant, ça n'a aucune influence sur ce que vous ferez, mais ce sera très utile plus tard, lorsque l'on utilisera des objets transparents.
Voilà un exemple de ce que vous pourrez faire plus tard, afin de vous expliquer le fonctionnement de merge : à gauche, deux sphères unies par union ; à droite, les même fusionnées avec merge :
Image utilisateur

Vous n'êtes pas obligés de retenir ça, on ne l'utilisera que dans la prochaine partie...

Q.C.M.

Qu'est-ce qu'une association d'objets ?
Que faut-il mettre dans une union ?
Que fait ce code ?

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
difference {
  sphere {
    <0,0,0>
    1.2
  }
  box {
    <-2,-2,-2>
    <2,0,2>
  }
}
Que donne ce code ?

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
intersection {
  sphere {
    <1,0,0>
    0.5
  }
  sphere {
    <-1,0,0>
    0.5
  }
}

Statistiques de réponses au QCM

C'est tout pour les opérations de CSG !
Évidemment, il est possible de les imbriquer : nous avons déjà vu la différence d'un objet et d'une union, il est aussi possible de faire l'intersection d'une union et de la différence d'une intersection et d'une fusion... o_O

Vous connaissez maintenant toutes les bases de POV-Ray ! Avant de finir cette partie, on va faire un petit TP pour faire... un luth !
Chapitre précédent Sommaire Chapitre suivant

Partager

3 commentaires pour "Les associations d'objets"
Note moyenne : 3.96 / 4 (24 votes)
Pseudo Commentaire
Hors ligne hunst # Posté le 26/08/2006 à 05:45:05
coucou !
Avatar

tuto très bien du premier coup d'oeil, j'crois que je vais essayer de me mettre a POV-ray ^^
Hors ligne Knacki # Posté le 30/08/2006 à 18:48:35

Parfait :D
Clair, concis et silmple à comprendre comme d'hab ^^

Le tuto donne les opérations de base avec lesquelles on peut effecteur toutes sortes de choses (que j'imagine pas encore)

Merci (vivement la transparence ça a l'air cool).


Secret (cliquez pour afficher)
18/20
Hors ligne titi.be # Posté le 23/11/2006 à 23:19:31
Avatar

Toujours aussi claire 18
Bravo

Voir tous les commentaires