Partager via


Effets spéciaux (Direct3D 9)

Cette rubrique contient des exemples d’effets spéciaux réalisés avec le traitement des coordonnées de texture.

Animation de textures (par traduction ou rotation) sur un modèle

  • Définissez les coordonnées de texture 2D dans votre format de vertex.

    // Use a single texture, with 2D texture coordinates. This
    // bit-pattern should be expanded to include position, normal, 
    // and color information as needed.
    DWORD dwFVFTex = D3FVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0);
    
  • Configurez le rastériseur pour utiliser des coordonnées de texture 2D.

    SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
    
  • Définissez et définissez une matrice de transformation de coordonnées de texture appropriée.

    // M is a D3DMATRIX being set to translate texture
    // coordinates in the U and V directions.
    //      1   0  0  0
    //      0   1  0  0
    //      du dv  1  0 (du and dv change each frame)
    //      0   0  0  1
    
    D3DMATRIX M = D3DXMatrixIdentity(); // declared in d3dutil.h
    M._31 = du; 
    M._32 = dv; 
    

Création de coordonnées de texture en tant que fonction linéaire de la position de l’espace caméra d’un modèle

  • Utilisez l’indicateur D3DTSS_TCI_CAMERASPACEPOSITION pour indiquer au système de passer la position du vertex, dans l’espace de la caméra, en tant qu’entrée à une transformation de texture.

    // The input vertices have no texture coordinates, saving 
    // bandwidth. Three texture coordinates are generated by 
    // using vertex position in camera space (x, y, z).
    SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
    
  • Demandez au rastériseur d’attendre des coordonnées de texture 2D.

    // Two output coordinates are used.
    SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
    
  • Définissez et définissez une matrice qui applique une fonction linéaire.

    // Generate texture coordinates as linear functions 
    // so that:
    //      u = Ux*x + Uy*y + Uz*z + Uw 
    //      v = Vx*x + Vy*y + Vz*z + Vw
    // The matrix M for this case is:
    //      Ux  Vx  0  0 
    //      Uy  Vy  0  0 
    //      Uz  Vz  0  0 
    //      Uw  Vw  0  0 
    
    SetTransform(D3DTS_TEXTURE0, &M);
    

Exécution d’un mappage d’environnement avec une carte d’environnement cubique

  • Utilisez l’indicateur D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR pour indiquer au système de générer automatiquement des coordonnées de texture en tant que vecteurs de réflexion pour le mappage cubique.

    SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR);
    
  • Demandez au rastériseur d’attendre des coordonnées de texture avec trois éléments.

    SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT3);
    

Exécution d’une texturation projective

  • Utilisez l’indicateur D3DTSS_TCI_CAMERASPACEPOSITION pour indiquer au système de passer la position du vertex en tant qu’entrée à une matrice de transformation de texture.

    SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
    
  • Créez et appliquez la matrice de projection de texture. Cela dépasse le cadre de cette documentation et fait l’objet de plusieurs articles du secteur.

  • Demandez au rastériseur d’attendre des coordonnées de texture projetées à trois éléments.

    // Two output coordinates are used.
    
    SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTF_PROJECTED | D3DTTFF_COUNT3);
    

Traitement des coordonnées de texture