DirectX 8 Graphics 2: Texture your life.

Pré-requis:

Objectif :
On va continuer notre aventure dans DirectGraphics. Au programme, comment ajoutter les textures, utiliser un autre type de primitive et d'autres choses sans doute.

Programme exemple:
Vous le trouverez ici.
On passe à 355 lignes de code, c'est la même base que la dernière fois, et comme la dernière fois on va faire une FAQ (donc si vous avez des question additionnelles c'est )

1. Coordonnées de textures ???
Dans la main droite vous avez un triangle triangulaire et dans l'autre une texture rectangulaire, vous avez sans doute, quand vous êtiez enfant remarquer qu'un rectangle ne tennait pas dans un triangle. ...euh ... aucun rapport.
Reprenons cette texture, assignons la coordonnée (0,0) à l'extrémité gauche en haut, et (1,1) à l'extrémité opposée. Mettez-vous à l'esprit que la surface est répété à l'infinie; de telle sorte que (0,0) représente aussi l'extrémité bas droit de la texture.
Ensuite, on va assigner à chaque vertex une coordonnée dans l'espace engendré par cette texture. En reliant les 3 coordonnées des vertex dans la texture, on obtient la surface qui va être assigné au triangle.
Image:


Pour plus de preuve regardez l'image de notre objectif, en haut de la texture on apperçoit un peut la marque noire du personnage. Pour comprendre la raison de cet artefact il faut lire le passage avec les filtres de textures.

2. Des filtres à café ???
g_lpDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR );
g_lpDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR );

Le momment où la carte graphique choisit quel pixel écrire sur l'écran s'appele la rasterisation, si on ne dits rien, DirectX cherche le pixel sur la texture qui se rapproche le plus de celui qui doit être dessiné à l'écran. Imaginons une texture sur un triangle très éloigné, il ne fait qu'un pixel à l'écran, DirectX affichera le pixel qui se trouve au milieu de la zone de texture que l'on utilise avec ce triangle, imaginons que la texture soit noire avec juste à cet endroit un point blanc, on aura un pixel blanc alors qu'en majorité la texture est noire. Pareil si le triangle est trop grand, on aura l'effet de pixelisation bien connu.
Cette méthode de resterisation s'appelle le "nearest point"; on dessine le point le plus proche.
Pour rendre le tout plus naturel, on peut utiliser un filtre "linear" à la place. En fait bilinéaire, on prend une surface de 2x2 autour du point désirer et on fait un moyenne. On a aussi le filtre "anisotropic" qui gère aussi la distorsion causé par l'angle d'inclinaison de la texture, ce filtre est plus coûteux en temps machine.
Le MAGFILTER interviens quand les surface d'arrivé est plus grande que celle de départ (on parle de magnification) et le MINFILTER interviens quand la surface d'arrivée est plus petite.

3. Du Mip-Map pour les braves ???
g_lpDevice->SetTextureStageState( 0, D3DTSS_MIPFILTER, D3DTEXF_LINEAR );
Tient un filtre pour le mip-map mais qu'est-ce que le mip-map?
C'est encore une méthode pour virer un artifact (erreur dans le rendu), si qq1 à la texture du mur de pierre qui était avec le SDK de DirectX merci de me mailler