Partager via


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 des 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, shérifie ou combinaison de celles-ci) peut être effectuée avec une matrice 4x4.

Note

Direct3D ne modifie pas les sommets transformés et allumé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érées par le matériel (T&L 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 geometry 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 la nécessité de 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 méthodes. Ces méthodes acceptent les D3DTS_TEXTURE0 par 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 pour l’étape de texture 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 de phase de texture sont définies par le type énuméré D3DTEXTURETRANSFORMFLAGS.

Les transformations de coordonnées de texture sont désactivées lorsque D3DTSS_TEXTURETRANSFORMFLAGS est définie 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 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 matrices 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 transmis par le dernier élément. Prenez 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 informe le 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