vers l'index général de l'aide

prisme

objectif

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.

compatibilité

POV-Ray 3.0 +sup.

important !

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.

syntaxe

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.

exemples

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 sweepconic 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.

formes imbriquées

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 !

utilisation avec les fonctions vectorielles

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}
}  
un parasol chinois !

CSG

Le prisme a un intérieur et un extérieur bien défini, et fonctionne donc parfaitement en CSG.

Remarques

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