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 les coordonnées de texture 2D.

    SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
    
  • Définissez et définissez une matrice de transformation de coordonnée 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 photo 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, comme 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);
    
  • Indiquez au rastériseur d’attendre les 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 un mappage d’environnement cube

  • 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 cube.

    SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR);
    
  • Indiquez au rastériseur d’attendre les 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 de vertex comme 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 est le sujet de plusieurs articles de l’industrie.

  • Indiquez au rastériseur d’attendre les 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