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
- 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
- Exécution d’un mappage d’environnement avec une carte d’environnement cubique
- Exécution d’une texturation projective
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);
Rubriques connexes
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour