Directx texture [Résolu]

Signaler
Messages postés
295
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
6 décembre 2010
-
Messages postés
295
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
6 décembre 2010
-
Salut a tous.
Voila j'ai mon triangle texturé mais je voudrai que la texture ce repete plusieur fois au lieu d'un simple plaquage.
Si quelqu'un sait comment faire et me dire comment ca s'appel.
merci.

Vertex g_cubeVertices[] =
{
{-1,1,0,0,1,-1,0.0f,0.0f },//-1,1,-1
{1 ,1,0,0,1,-1,1.0f,0.0f },//1,1,-1
{-1,-1,0,0,1,-1,0.0f,1.0f },//-1,-1,-1
{1,-1,0,0,1,-1,1.0f,1.0f },//1,-1,-1
};


g_pd3dDevice->CreateVertexBuffer( 4*sizeof(Vertex),0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL );
void *pVertices = NULL;


g_pVB->Lock( 0, sizeof(g_cubeVertices), (void**)&pVertices, 0 );
memcpy( pVertices, g_cubeVertices, sizeof(g_cubeVertices) );
g_pVB->Unlock();


D3DXCreateTextureFromFile( g_pd3dDevice,Text, &g_pTexture );


g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
g_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
g_pd3dDevice->SetTexture( 0, g_pTexture );
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(Vertex) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );

5 réponses

Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Tu veux appliquer une texture de taille raisonnable sur un terrain
immense et tu ne vois pas comment faire pour ne pas qu'il s'étire
énormement ?



C'est ce que je crois comprendre d'où:

Vertex g_cubeVertices[] =

{

{-1,1,0,0,1,-1,0.0f,0.0f },

{1 ,1,0,0,1,-1,n,0.0f },

{-1,-1,0,0,1,-1,0.0f,n},

{1,-1,0,0,1,-1,n,n },

};



avec supérieur à 1.

Plus n est grand, moins la texture sera étiré car plus elle sera dupliquée.



La texture doit cependant avoir une caractéristique: collées bout à bout, tu ne dois pas pouvoir trouver les bords des textures.

Google -> tiled textures



Si tu veux agrandir le carré qui contient la texture, modifie les coordonnées x,y,z directement.
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Apparement ton format de vertex est le suivant:



float position coordonnée x

float position coordonnée y

float position coordonnée z

float composante normale nx


float composante normale ny


float composante normale nz

float coordonnée texture u

float coordonnée texture v



Multiplie par 2 les coordonnées textures, et visualise le résultat, tu comprendras tout seul.

En fait, pour chaque pixel sur ton écran, la carte graphique lui
affecte un pixel de la texture en fonction des coordonnées textures des
points qui constituent la face par interpolation linéaire.



(u,v) = (0,0) coorespond au coin haut gauche de la texture

(u,v) = (1,0) coorespond au coin haut droit de la texture

(u,v) = (1,1) coorespond au coin bas droit de la texture

(u,v) = (0,1) coorespond au coin bas gauche de la texture



donc (0.5, 0.5) est le centre etc...



Ca s'appelle du tiling.
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Oups, l'essenciel is missing !



si u (ou v) = 2.34f, u (ou v) est interprété comme 0.34f.

En gros seule la partie décimale est prise en compte sauf pour les
valeurs sans parties décimales non nulles (qui équivalent à 1.0f).



Donc pour afficher n*n textures sur ton quad,

Vertex g_cubeVertices[] =

{

{-1,1,0,0,1,-1,0.0f,0.0f },//-1,1,-1

{1 ,1,0,0,1,-1,n,0.0f },//1,1,-1

{-1,-1,0,0,1,-1,0.0f,n},//-1,-1,-1

{1,-1,0,0,1,-1,n,n },//1,-1,-1

};
Messages postés
295
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
6 décembre 2010

Oups j'ai du mal m'exprimé.
Ce que je veut faire c'est un sol,le terrain fera une certaine taille donc je voudrai reproduire la texture.
(Merci pour ton aide je m'en servirai pour le ciel !).
Messages postés
295
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
6 décembre 2010

Merci de ton aide.