2013-06-03 4 views
2

Je souhaite répéter une petite texture de 2x2 pixels sur un quad plus grand, par exemple, 50x50 pixels.Texture répétée

Set sommets -

float X = 100, Y = 100, Width = 50, Height = 50; 
float TextureLeft = 0, TextureTop = 0, TextureRight = 25, TextureBottom = 25; 

Vertices[0].x = X; 
Vertices[0].y = Y + Height; 
Vertices[0].z = 0; 
Vertices[0].rhw = 1; 
Vertices[0].tu = TextureLeft; 
Vertices[0].tv = TextureBottom; 

Vertices[1].x = X; 
Vertices[1].y = Y; 
Vertices[1].z = 0; 
Vertices[1].rhw = 1; 
Vertices[1].tu = TextureLeft; 
Vertices[1].tv = TextureTop; 

Vertices[2].x = X + Width; 
Vertices[2].y = Y; 
Vertices[2].z = 0; 
Vertices[2].rhw = 1; 
Vertices[2].tu = TextureRight; 
Vertices[2].tv = TextureTop; 

Vertices[3].x = X; 
Vertices[3].y = Y + Height; 
Vertices[3].z = 0; 
Vertices[3].rhw = 1; 
Vertices[3].tu = TextureLeft; 
Vertices[3].tv = TextureBottom; 

Vertices[4].x = X + Width; 
Vertices[4].y = Y; 
Vertices[4].z = 0; 
Vertices[4].rhw = 1; 
Vertices[4].tu = TextureRight; 
Vertices[4].tv = TextureTop; 

Vertices[5].x = X + Width; 
Vertices[5].y = Y + Height; 
Vertices[5].z = 0; 
Vertices[5].rhw = 1; 
Vertices[5].tu = TextureRight; 
Vertices[5].tv = TextureBottom; 

Tirage au sort -

DrawPrimitive(D3DPT_TRIANGLELIST, 0, 6); 

problème est "pépin" dans le bord entre les triangles, probablement à cause des sommets mal coordonnées et aussi "pépin" sur les frontières de quad.

texture originale - http://i.imgur.com/tNqYePs.png

Résultat - http://i.imgur.com/sgUZvqE.png

+0

Vous n'avez pas spécifié l'état du rastériseur que vous utilisez. Peut-être que vous manquez les paramètres de blocage/répétition de la texture. Quoi d'autre appelez-vous avant le DrawPrimitive pour configurer la texture? –

+0

Pourriez-vous me dire quels réglages de rasterizer/clamp/repeat doivent être réglés? Je dessine une scène vide avec quad de texture unique. – Demion

+0

Le réglage "repeat" est appelé "wrap" dans DX. J'ai ajouté la réponse avec le lien vers MSDN, si vous avez des questions sur les valeurs. –

Répondre

1

Avant l'appel à vous DrawPrimitive devez configurer l'emballage de texture comme dans ce article. Pour éliminer le problème en diagonale, vous pouvez utiliser le quad simple au lieu de deux triangles.

Le problème sur les bords est considéré comme here. Vous devez ajouter un petit décalage à chaque coordonnée de texture. "Petit" signifie une moitié normalisée du pixel. Si votre résolution de texture est 512x512, ajoutez (0.5/512.0) à chacune des coords u/v.

+0

Merci de votre réponse, mais cela n'a rien changé du tout. Toujours "pépin" aux frontières et au bord entre les triangles. – Demion

+0

J'ai ajouté un peu sur ce problème, j'espère que ça aide. Essayez d'abord d'ajouter le décalage. –

1

Si vous dessinez 2d, vous devez ajouter 0,5px aux coordonnées U et V lors de la texturation. Cela vous donnera une précision de pixel/texel exacte. Sinon, vous perdrez 0,5 pixel à chaque fois et la texture sera floue.

Questions connexes