Transformations de coordonnées de texture (Direct3D 9)

Les appareils Direct3D peuvent transformer les coordonnées de texture pour les sommets en appliquant une matrice 4x4. Le système applique les transformations aux coordonnées de texture de la même manière que la géométrie. Toute transformation (mise à l’échelle, rotation, traduction, projection, cisaillement ou toute combinaison de ceux-ci) peut être effectuée avec une matrice 4x4.

Notes

Direct3D ne modifie pas les sommets transformés et éclairés. Par conséquent, une application utilisant des sommets transformés et éclairés ne peut pas utiliser Direct3D pour transformer les coordonnées de texture des sommets.

 

Les appareils qui prennent en charge les opérations de transformation et d’éclairage à accélération matérielle (TL&HAL Device) accélèrent également la transformation des coordonnées de texture. Lorsque l’accélération matérielle des transformations n’est pas disponible, les optimisations spécifiques à la plateforme dans le pipeline de géométrie Direct3D s’appliquent aux transformations de coordonnées de texture.

Les transformations de coordonnées de texture sont utiles pour produire des effets spéciaux tout en évitant d’avoir à modifier directement les coordonnées de texture de votre géométrie. Vous pouvez utiliser des matrices de traduction ou de rotation simples pour animer des textures sur un objet, ou transformer des coordonnées de texture générées automatiquement par Direct3D pour simplifier et peut-être accélérer les effets avancés tels que les textures projetées et le mappage dynamique de la lumière. En outre, vous pouvez utiliser des transformations de coordonnées de texture pour réutiliser un ensemble unique de coordonnées de texture à plusieurs fins, dans plusieurs étapes de texture.

Définition et récupération des transformations de coordonnées de texture

Comme les matrices utilisées par votre application pour la géométrie, vous définissez et récupérez des transformations de coordonnées de texture en appelant les méthodes IDirect3DDevice9::SetTransform et IDirect3DDevice9::GetTransform . Ces méthodes acceptent les D3DTS_TEXTURE0 via D3DTS_TEXTURE7 membres du type énuméré D3DTRANSFORMSTATETYPE pour identifier les matrices de transformation pour les étapes de texture 0 à 7, respectivement.

Le code suivant définit une matrice à appliquer aux coordonnées de texture de l’étape 0.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

D3DMATRIX matTrans = D3DXMatrixIdentity( NULL );

// Set up the matrix for the desired transformation.
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matTrans );

Activation des transformations de coordonnées de texture

L’état de l’étape de texture D3DTSS_TEXTURETRANSFORMFLAGS contrôle l’application des transformations de coordonnées de texture. Les valeurs de cet état d’étape de texture sont définies par le type énuméré D3DTEXTURETRANSFORMFLAGS .

Les transformations de coordonnées de texture sont désactivées quand D3DTSS_TEXTURETRANSFORMFLAGS est défini sur D3DTTFF_DISABLE (valeur par défaut). En supposant que les transformations de coordonnées de texture ont été activées pour l’étape 0, le code suivant les désactive.

// For this example, assume the d3dDevice variable contains a 
// valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_DISABLE );

Les autres valeurs définies dans D3DTEXTURETRANSFORMFLAGS sont utilisées pour activer les transformations de coordonnées de texture et pour contrôler le nombre d’éléments de coordonnées de texture résultants passés au rastériseur. Par exemple, prenez le code suivant.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_COUNT2 );

La valeur D3DTTFF_COUNT2 indique au système d’appliquer le jeu de matrice de transformation pour l’étape de texture 0, puis de passer les deux premiers éléments des coordonnées de texture modifiées au rastériseur.

L’indicateur de transformation de texture D3DTTFF_PROJECTED indique les coordonnées d’une texture projetée. Lorsque cet indicateur est spécifié, le rastériseur divise les éléments passés par le dernier élément. Prenons le code suivant, par exemple.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_COUNT3 | D3DTTFF_PROJECTED );

Cet exemple indique au système de passer trois éléments de coordonnées de texture au rastériseur. Le rastériseur divise les deux premiers éléments par le troisième, produisant les coordonnées de texture 2D nécessaires pour traiter la texture.

Traitement des coordonnées de texture