vers l'index général de l'aide
Créer un objet prismatique, c'est-à-dire une surface polygonale extrudée perpendiculairement à sa surface. L'extrusion peut être linéaire (les faces latérales sont droites) ou conique (les faces se rejoignent en un point au sommet). On peut ainsi obtenir un prisme triangulaire, pentagonal, hexagonal, étoilé, patatoïde,.. ou encore se faire des lettres de l'alphabet, si on n'arrive pas à trouver la police parfaite.
POV-Ray 3.0 +sup.
Il y a, dans le comportement de POV-Ray (il faut bien qu'il ait des petits défauts aussi !), une anomalie notoire en ce qui concerne les coordonnées des points d'un prisme.
En effet, le prisme étant (apparemment) extrudé le long de l'axe Y, les coordonnées de ses points doivent, selon la doc originale, être donnés sous forme de vecteurs <x,z>, ce qui est assez bizarre, vu que tous les autres cas de vecteurs 2D se donnent sous la forme <x,y>.
Voici ce qui se passe réellement : en fait, POV-Ray prend les coordonnées que vous lui donnez comme des vecteurs <x,y>, et extrude le prisme dans la direction -Z (la base se retrouvant à -Z*Z_Base, et l'extrémité à -Z*Z_Extrem), et enfin, ni vu ni connu, applique une rotation de 90° sur l'axe X (rotate x*90) !
On comprend (un peu) pourquoi il est plus confortable d'imaginer que l'extrusion se fait sur +Y, mais cela pose de gros problèmes lorsqu'on veut manipuler les vecteurs à l'aide de fonctions telles que vrotate,.. !!! C'est également la raison pour laquelle les extrusions coniques ont la pointe vers le bas !
Aussi, à la lumière de cette explication, nous avons choisi, dans cette page, de considérer que les coordonnées se donnent dans le plan XY, et que l'extrusion se situe en -Z, sachant qu'une rotation "automatique" de 90° sur l'axe X sera appliquée.
prism { linear_sweep / conic sweep linear_spline / quadratic_spline / cubic_spline / bezier_spline Z_Extrem, // nombre décimal Z_Base, // nombre décimal Nb_Points // nombre entier <x1,y1>, <x2,y2>, ..., <xn,yn> (open) (..modificateurs d'objets..) (..transformations..) (..matériau..) }
Le premier paramètre définit le type d'extrusion qui sera effectué. Il y a deux possibilités: linear_sweep et conic_sweep. conic_sweep indique que le prisme prendra une apparence conique, c'est-à-dire que surface diminuera le long de l'axe d'extrusion, allant jusqu'à une taille nulle (un point) si on le veut. linear_sweep, par contre, ne modifie pas la taille du profil, et ainsi l'extrémité et la base seront identiques.
Le type de profil indique comment POV-Ray interprétera la série de points définissant le profil. linear_spline est la méthode la plus simple, chaque point étant joint à ses voisins par une ligne droite. Les deux autres possibilités, quadratic_spline et cubic_spline, permettent d'avoir un profil lissé, par contre une certaine vigilance est nécéssaire (quand au nombre et placement des points) pour obtenir ce que l'on veut. Des explications sur l'utilisation de ces types de profil peuvent être trouvées dans les splines appliquées aux prismes.
Z_Extrem et Z_Base définissent les distances de la base et de l'extrémité du prisme par rapport à l'origine. Nb_Points indique le nombre de points qui font partie du profil. Le dernier point doit être le même que le premier, donc un point sera compté deux fois. Par exemple: un prisme hexagonal nécessiterait 7 points. Il y a une exception à cette règle: il est possible d'énumérer plusieurs séries de points, chacune correspondant à un profil fermé. La première série sera celle du prisme "premier", et les autres serviront à faire des trous dans ce prisme.
Enfin, une série de coordonnées (x, y) servent à définir la forme du profil.
Le mot clé optionnel open, comme pour les cylindres et les cônes, permet de laisser les extrémités du prisme ouvertes.
Prenons l'exemple du prisme hexagonal inscrit dans un cercle de rayon égal à 1.
#declare P3=pi/3; //60°, en radians, puisque les fonctions trigo veulent des radians prism { linear_sweep // extrusion normale linear_spline // les côtés du prisme seront plans 0,2,7 // de z = -0 à z = -2, le profil ayant 7 points <cos(0*P3),sin(0*P3)>, <cos(1*P3),sin(1*P3)>, <cos(2*P3),sin(2*P3)>, <cos(3*P3),sin(3*P3)>, <cos(4*P3),sin(4*P3)>, <cos(5*P3),sin(5*P3)>, <cos(0*P3),sin(0*P3)> pigment {YellowGreen} rotate x*-90 //correction de l'orientation du prisme }
Ce qui donne, selon le type d'extrusion :
linear sweep | conic sweep |
Attention, quelles que soient les distances de la base et de l'extrémité, la pointe d'un prisme conique se trouve toujours sur l'origine, et la forme inchangée se trouve toujours à -Z*1. Si les distances spécifiées sont différentes de 0 et 1, le prisme sera tronqué et/ou amplifié vers -Z.
Voyons maintenant comment faire un "trou" dans un prisme :
prism { linear_sweep linear_spline 0,1,10 //un total de 10 points <0,0>,<2,0>,<2,2>,<0,2>,<0,0>, //un carré <.1,.1>,<1.8,.2>,<1.6,1.9>,<.2,1.6>,<.1,.1> //un quadrilatère à l'intérieur du carré pigment {YellowGreen} rotate x*-90 //correction de l'orientation du prisme scale <3,3,1> }
Quand vous faites ce genre d'opérations, veillez à bien structurer (comme ci-dessus) les différentes formes. Et si vous placez un trou à l'intérieur d'un trou, eh bien, ça deviendra un plein !
Un petit parasol plissé, qui est un véritable casse-tête à mettre au point si on croit que les coordonnées se donnent en x,z (que les fonctions vectorielles ne comprennent évidemment pas !). Quand on SAIT (c'est avec une forme de ce type que j'ai découvert le pot-aux-roses) que c'est en réalité x,y, ça va tout seul !
prism { linear_spline conic_sweep 0,5,72 #declare boucle=0; #while (boucle < 36) ,vrotate (<1.0,0>,<0,0,boucle*10>), vrotate (<1.2,0>,<0,0,5+boucle*10>) #declare boucle = boucle+1; #end open rotate x*-90 //correction de l'orientation du prisme pigment {YellowGreen} }
Le prisme a un intérieur et un extérieur bien défini, et fonctionne donc parfaitement en CSG.
L'utilisation du mot-clé open élimine la base et la face supérieure du prisme, ne laissant que les faces latérales. Le comportement en CSG ne sera pas modifié.
Rédacteur: Serge Larocque