Partager via


Vue d’ensemble de la transformation

Les transformations de matrice gèrent beaucoup de mathématiques de bas niveau des graphiques 3D.

Le pipeline geometry prend les sommets comme entrée. Le moteur de transformation applique le monde, la vue et les transformations de projection aux sommets, extrait le résultat et transmet tout au rastériseur.

Transformer et espace Description
Coordonnées de modèle dans l’espace du modèle À la tête du pipeline, les sommets d’un modèle sont déclarés par rapport à un système de coordonnées local. Il s’agit d’une origine locale et d’une orientation. Cette orientation des coordonnées est souvent appelée espace de modèle. Les coordonnées individuelles sont appelées coordonnées de modèle.
Transformer le monde en espace mondial La première étape du pipeline geometry transforme les sommets d’un modèle de leur système de coordonnées local en un système de coordonnées utilisé par tous les objets d’une scène. Le processus de réorientation des sommets est appelé la transformation du monde, qui convertit de l’espace modèle en une nouvelle orientation appelée espace mondial. Chaque vertex dans l’espace mondial est déclaré à l’aide de coordonnées mondiales.
Transformer en espace d’affichage (espace de caméra) Dans la phase suivante, les sommets qui décrivent votre monde 3D sont orientés par rapport à une caméra. Autrement dit, votre application choisit un point de vue pour la scène, et les coordonnées spatiales mondiales sont déplacées et pivotées autour de la vue de la caméra, ce qui transforme l’espace du monde en espace d’affichage (également appelé espace de caméra). Il s’agit de la transformation d’affichage, qui convertit de l’espace du monde en espace d’affichage.
Transformation de projection en espace de projection L’étape suivante est la transformation de projection, qui convertit de l’espace d’affichage en espace de projection. Dans cette partie du pipeline, les objets sont généralement mis à l’échelle par rapport à leur distance de la visionneuse afin de donner l’illusion de profondeur à une scène ; les objets close sont rendus pour apparaître plus grands que les objets distants. Par souci de simplicité, cette documentation fait référence à l’espace dans lequel les sommets existent après la transformation de projection en tant qu’espace de projection. Certains livres graphiques peuvent faire référence à l’espace de projection comme espace homogène post-perspective. Toutes les transformations de projection ne mettez pas à l’échelle la taille des objets d’une scène. Une projection telle que celle-ci est parfois appelée une projection affine ou orthogonale.
Découpage dans l’espace d’écran Dans la dernière partie du pipeline, les sommets qui ne seront pas visibles sur l’écran sont supprimés, de sorte que le rastériseur ne prend pas le temps de calculer les couleurs et l’ombrage pour quelque chose qui ne sera jamais vu. Ce processus est appelé découpage. Après découpage, les sommets restants sont mis à l’échelle en fonction des paramètres de la fenêtre d’affichage et convertis en coordonnées d’écran. Les sommets résultants, visibles à l’écran lorsque la scène est ratérisée, existent dans l’espace de l’écran.

 

Les transformations sont utilisées pour convertir la géométrie d’objet d’un espace de coordonnées vers un autre. Direct3D utilise des matrices pour effectuer des transformations 3D. Les matrices créent des transformations 3D. Vous pouvez combiner des matrices pour produire une matrice unique qui englobe plusieurs transformations.

Vous pouvez transformer des coordonnées entre l’espace du modèle, l’espace mondial et l’espace d’affichage.

  • Transformation mondiale : convertit de l’espace modèle en espace mondial.
  • Transformation d’affichage : convertit de l’espace mondial en espace d’affichage.
  • Transformation de projection : convertit de l’espace d’affichage en espace de projection.

Transformations de matrice

Dans les applications qui fonctionnent avec des graphiques 3D, vous pouvez utiliser des transformations géométriques pour effectuer les opérations suivantes :

  • Exprimez l’emplacement d’un objet par rapport à un autre objet.
  • Faire pivoter et dimensionner des objets.
  • Modifier les positions, les directions et les perspectives d’affichage.

Vous pouvez transformer n’importe quel point (x,y,z) en un autre point (x', y', z') à l’aide d’une matrice 4x4, comme illustré dans l’équation suivante.

équation de transformation d’un point en un autre point

Effectuez les équations suivantes sur (x, y, z) et la matrice pour produire le point (x', y', z').

équations pour le nouveau point

Les transformations les plus courantes sont la traduction, la rotation et la mise à l’échelle. Vous pouvez combiner les matrices qui produisent ces effets en une seule matrice pour calculer plusieurs transformations à la fois. Par exemple, vous pouvez créer une matrice unique pour traduire et faire pivoter une série de points.

Les matrices sont écrites dans l’ordre des colonnes de ligne. Une matrice qui met uniformément à l’échelle les sommets le long de chaque axe, appelée mise à l’échelle uniforme, est représentée par la matrice suivante à l’aide de la notation mathématique.

équation d’une matrice pour la mise à l’échelle uniforme

En C++, Direct3D déclare des matrices en tant que tableau à deux dimensions, à l’aide d’un struct de matrice. L’exemple suivant montre comment initialiser une structure D3DMATRIX pour agir comme une matrice de mise à l’échelle uniforme (facteur d’échelle « s »).

D3DMATRIX scale = {
    5.0f,            0.0f,            0.0f,            0.0f,
    0.0f,            5.0f,            0.0f,            0.0f,
    0.0f,            0.0f,            5.0f,            0.0f,
    0.0f,            0.0f,            0.0f,            1.0f
};

Traduire

L’équation suivante traduit le point (x, y, z) en un nouveau point (x', y', z').

équation d’une matrice de traduction pour un nouveau point

Vous pouvez créer manuellement une matrice de traduction en C++. L’exemple suivant montre le code source d’une fonction qui crée une matrice pour traduire les sommets.

D3DXMATRIX Translate(const float dx, const float dy, const float dz) {
    D3DXMATRIX ret;

    D3DXMatrixIdentity(&ret);
    ret(3, 0) = dx;
    ret(3, 1) = dy;
    ret(3, 2) = dz;
    return ret;
}    // End of Translate

Écaille

L’équation suivante met à l’échelle le point (x, y, z) par des valeurs arbitraires dans les directions x, y et z vers un nouveau point (x', y', z').

équation d’une matrice d’échelle pour un nouveau point

Tourner

Les transformations décrites ici concernent les systèmes de coordonnées gauchers et peuvent donc être différentes des matrices de transformation que vous avez vues ailleurs.

L’équation suivante fait pivoter le point (x, y, z) autour de l’axe x, produisant un nouveau point (x', y', z').

équation d’une matrice de rotation x pour un nouveau point

L’équation suivante fait pivoter le point autour de l’axe y.

équation d’une matrice de rotation y pour un nouveau point

L’équation suivante fait pivoter le point autour de l’axe z.

équation d’une matrice de rotation z pour un nouveau point

Dans ces exemples de matrices, la lettre grecque theta représente l’angle de rotation, en radians. Les angles sont mesurés dans le sens des aiguilles d’une montre en regardant le long de l’axe de rotation vers l’origine.

Le code suivant montre une fonction permettant de gérer la rotation sur l’axe X.

    // Inputs are a pointer to a matrix (pOut) and an angle in radians.
    float sin, cos;
    sincosf(angle, &sin, &cos);  // Determine sin and cos of angle

    pOut->_11 = 1.0f; pOut->_12 =  0.0f;   pOut->_13 = 0.0f; pOut->_14 = 0.0f;
    pOut->_21 = 0.0f; pOut->_22 =  cos;    pOut->_23 = sin;  pOut->_24 = 0.0f;
    pOut->_31 = 0.0f; pOut->_32 = -sin;    pOut->_33 = cos;  pOut->_34 = 0.0f;
    pOut->_41 = 0.0f; pOut->_42 =  0.0f;   pOut->_43 = 0.0f; pOut->_44 = 1.0f;

    return pOut;
}

Concaténation de matrices

L’un des avantages de l’utilisation de matrices est que vous pouvez combiner les effets de deux matrices ou plus en les multipliant. Cela signifie que, pour faire pivoter un modèle, puis le traduire à un emplacement donné, vous n’avez pas besoin d’appliquer deux matrices. Au lieu de cela, vous multipliez les matrices de rotation et de traduction pour produire une matrice composite qui contient tous leurs effets. Ce processus, appelé concaténation de matrice, peut être écrit avec l’équation suivante.

équation de concaténation de matrice

Dans cette équation, C est la matrice composite en cours de création, et M₁ à mn sont les matrices individuelles. Dans la plupart des cas, seules deux ou trois matrices sont concaténées, mais il n’y a aucune limite.

L’ordre dans lequel la multiplication de matrice est effectuée est crucial. La formule précédente reflète la règle de concaténation de matrice de gauche à droite. Autrement dit, les effets visibles des matrices que vous utilisez pour créer une matrice composite se produisent dans l’ordre de gauche à droite. Une matrice mondiale classique est illustrée dans l’exemple suivant. Imaginez que vous créez la matrice mondiale pour une sauce volante stéréotypée. Vous voudriez probablement tourner la sauce volante autour de son centre - l’axe y de l’espace modèle - et le traduire en un autre emplacement dans votre scène. Pour accomplir cet effet, vous créez d’abord une matrice de rotation, puis la multipliez par une matrice de traduction, comme illustré dans l’équation suivante.

équation de rotation basée sur une matrice de rotation et une matrice de traduction

Dans cette formule, Ry est une matrice pour la rotation sur l’axe y, et Tw est une traduction vers une position dans les coordonnées mondiales.

L’ordre dans lequel vous multipliez les matrices est important car, contrairement à la multiplication de deux valeurs scalaires, la multiplication de matrice n’est pas commutative. La multiplication des matrices dans l’ordre opposé a l’effet visuel de traduire la sauce volante à sa position spatiale mondiale, puis de la faire pivoter autour de l’origine du monde.

Quel que soit le type de matrice que vous créez, n’oubliez pas la règle de gauche à droite pour vous assurer que vous obtenez les effets attendus.

Transformations