Descriptions et exemples pour le POV-Ray raytracer par Friedrich A. Lohmüller
Transformations géométriques avec POV-Ray -
English English English
Italiano Italiano
Deutsch Deutsch

Page d'Accueil
- POV-Ray Tutoriel
  Transformations
  géométriques
   - Index

    Transformations
    élémentaires
    - "translate<  ... >"
    - "rotate<  ... >"
    - "scale<  ... >"
    - Réflexion

    Autres
    Transformations
    - "matrix<  ... >"
    - Cisaillement
    - transforms.inc

    - "transform{ ...}"
       et "inverse"

    Vecteurs et
    Transformations

    Insert Menu Add-on
      & téléchargement
 
                                           
normal vertical shearing

matrix < , , >
Matrice et Carte Affine

Le mot clé "matrix"- peut être utilisé pour définir explicitement la matrice de transformation des objet ou textures.
La syntaxe de celui-ci :
 matrix <m00, m01, m02,
         m10, m11, m12,
         m20, m21, m22,
         m30, m31, m32>

Le nombre mij peut être n'importe quelle sorte d'expressions numériques
Il forme les éléments des 3 premières colonnes d'une matrice 4x4, dont la 4ème colonne est définie fixe en <0,0,0,1>.
Un point P1(x1/y1/z1) est inplémenté dans un autre point P2(x2/y2/z2) , selon la définition suivante :

x2 = m00*x1 + m10*y1 + m20*z1 + m30
y2 = m01*x1 + m11*y1 + m21*z1 + m31
z2 = m02*x1 + m12*y1 + m22*z1 + m32


Un peu abstrait, n'est-ce pas ? Voici quelques exemples pour le clarifier :

1) La matrice identité :
matrix < 1, 0, 0,
         0, 1, 0,
         0, 0, 1,
         0, 0, 0 >
2) Cette matrice produit une translation parallèle par le vecteur <2,3,4>:
matrix < 1, 0, 0,
         0, 1, 0,
         0, 0, 1,
         2, 3, 4 >
La même, mais plus efficace et plus facile à comprendre :    translate< 2, 3, 4>.
3) Rotation autour d'un axe avec un angle Alpha (mesuré en degrés) produite par la matrice suivante :
(Remarque : sinus et cosinux en POV-Ray ont besoin de leurs arguments quand l'angle est en radians !)
#declare A = radians(Alpha);
matrix<cos(A), 0, sin(A),
          0  , 1,    0  ,
      -sin(A), 0, cos(A),
          0  , 0,    0   >

Rotation autour de »y« de 30°
(sin30° = 0.5; cos30° = 0.886):

matrix <0.886, 0,   0.5,
          0  , 1,     0,
       -0.5  , 0, 0.886,
          0  , 0,     0 >

Même chose, seulement plus efficace et se comprenant mieux, est décrite par la commande : rotate< 0, Alpha, 0> .

4) La matrice suivante produit un étirement d'un facteur de k = 3 avec le centre en O(0/0/0):
matrix < 3, 0, 0,
         0, 3, 0,
         0, 0, 3,
         0, 0, 0 >

Cette description peut être définie par "scale<3,3,3>" ou plus simplement par "scale 3" plus facile et qui se comprend mieux.


Ces exemples ont montré que des transformations simples sont décrites avec "matrix".

Normalement on n'utilise pas des matrices pour les transformations simples (translation, scaling = centric streching, rotation), parce-que c'est difficile à comprendre et demande beaucoup d'effort. Mais il existe un aspect intérêssant de l'instruction »matrix« : Celle-ci permet aussi de définir précisement le type général que l'on ne peut obtenir d'une autre façon tel que par exemple le crénellage »shearing«. Cette matrice produit un crénellage ou une texture selon l'axe »y« :


matrix < 1, 1, 0,
         0, 1, 0,
         0, 0, 1,
         0, 0, 0 >

Un crénellage selon la direction »y« avec facteur 0,5 (30°) est produit par :


  matrix< 1 , 0, 0,
         0.5, 1, 0,
          0 , 0, 1,
          0 , 0, 0 >


La combinaison de différentes cartes de matrices n'est pas facile à comprendre. La matrice suivante peut le montrer. Cette-ci effectue une rotation d'un objet autour de â??yâ?? de 30 degrés ensuite c'est crénellé selon »y« et une translation parallèle dans la direction »y« :

 matrix< 0.886, 0.5,  0.5  ,
           0  , 1  ,  0    ,
           0  , 0  ,  0.886,
           0  , 1.5,  0     >


Cela montre ce qui est recommandé » si vous n'avez pas beaucoup d'expérience avec le mapping « la façon de diviser de tels mappings en le faisant étape par étape:

 rotate<0,30,0> 
 //Shearing in y direction:
 matrix<1, 0.5, 0,
        0, 1  , 0,
        0, 0  , 1,
        0, 0  , 0 >
 translate<0,1.5,0>

Cette instruction fait pareil !


translate | rotate | scale | matrix | cisaillement | transforms.inc | transform | transformations de vecteurs
top

© Friedrich A. Lohmüller, 2010
www.f-lohmueller.de