Partager via


Transformation d’affichage (Direct3D 9)

Cette section présente les concepts de base de la transformation d’affichage et fournit des détails sur la configuration d’une matrice de transformation d’affichage dans une application Direct3D.

La transformation d’affichage localise l’observateur dans l’espace mondial, transformant les sommets en espace de caméra. Dans l’espace de la caméra, la caméra, ou visionneuse, est à l’origine, regardant dans la direction z positive. Rappelez-vous que Direct3D utilise un système de coordonnées gaucher. Z est donc positif dans une scène. La matrice de vue déplace les objets dans le monde autour de la position d’une caméra - l’origine de l’espace de la caméra - et de son orientation.

Il existe de nombreuses façons de créer une matrice d’affichage. Dans tous les cas, la caméra a une position logique et une orientation dans l’espace mondial qui est utilisée comme point de départ pour créer une matrice de vue qui sera appliquée aux modèles d’une scène. La matrice d’affichage traduit et fait pivoter les objets pour les placer dans l’espace de la caméra, là où la caméra est à l’origine. Une façon de créer une matrice d’affichage consiste à combiner une matrice de traduction avec des matrices de rotation pour chaque axe. Dans cette approche, l’équation de matrice générale suivante s’applique.

équation de la transformation d’affichage

Dans cette formule, V est la matrice d’affichage en cours de création, T est une matrice de traduction qui repositionne des objets dans le monde, et Rₓ à Rz sont des matrices de rotation qui font pivoter des objets le long de l’axe x, y et z. Les matrices de traduction et de rotation sont basées sur la position logique et l’orientation de la caméra dans l’espace mondial. Ainsi, si la position logique de la caméra dans le monde est <de 10 20 100>, l’objectif de la matrice de traduction est de déplacer des objets -10 unités le long de l’axe des X, -20 unités le long de l’axe y et -100 unités le long de l’axe z. Les matrices de rotation dans la formule sont basées sur l’orientation de la caméra, en termes de rotation des axes de l’espace de la caméra par rapport à l’espace mondial. Par exemple, si l’appareil photo mentionné précédemment pointe vers le bas, son axe z est de 90 degrés (pi/2 radians) hors de l’alignement avec l’axe z de l’espace mondial, comme illustré dans l’illustration suivante.

illustration de l’espace de vue de la caméra par rapport à l’espace mondial

Les matrices de rotation appliquent des rotations de magnitude égale, mais opposée, aux modèles de la scène. La matrice de vue de cette caméra comprend une rotation de -90 degrés autour de l’axe X. La matrice de rotation est combinée à la matrice de traduction pour créer une matrice de vue qui ajuste la position et l’orientation des objets dans la scène afin que leur sommet soit face à la caméra, donnant l’apparence que la caméra est au-dessus du modèle.

Configuration d’une matrice d’affichage

Les fonctions d’assistance D3DXMatrixLookAtLH et D3DXMatrixLookAtRH créent une matrice d’affichage basée sur l’emplacement de la caméra et un point d’affichage.

L’exemple suivant crée une matrice d’affichage pour les coordonnées gauchers.

D3DXMATRIX out;
D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixLookAtLH(&out, &eye, &at, &up);

Direct3D utilise le monde et les matrices de vue pour configurer plusieurs structures de données internes. Chaque fois que vous définissez une nouvelle matrice de monde ou de vue, le système recalcule les structures internes associées. La définition fréquente de ces matrices prend du temps de calcul. Vous pouvez réduire le nombre de calculs requis en concaténant votre monde et vos matrices de vue dans une matrice de vue du monde que vous définissez comme matrice mondiale, puis en définissant la matrice d’affichage sur l’identité. Conservez des copies mises en cache de matrices de monde et d’affichage individuelles que vous pouvez modifier, concaténer et réinitialiser la matrice mondiale si nécessaire. Pour plus de clarté, les exemples utilisent rarement cette optimisation.

Transformations