PDA

Voir la version complète : Terrain : partages des sommets des triangles/problème de mapping des UV


codespirit
12/08/2005, 18h22
Hello
Je travaille actuellement sur mon editeur de level et je dois faire face a un petit problème.J ai une map de X*Z sommets .
les sommets d' un triangle et de ses semblables adjacents sont partagés(ce sont les mêmes).Du coup lorsque je veux plaquer mes textures je n' ai qu un set de coordonnées de texture ...(restons dans l hypothèse simple ou je ne gère qu 'une couche).
par exemple si mon premier quadrilatère (2 triangles donc)
sont mappés de 0 à gauche jusqu' à 1 à droite alors son voisin de droite aura
les U de gauche égaux à 1 .Le problème est symétriques sur les axes X/Z.
J ai beau penser aux modes d'adressage, aux textures de matrices je finis par me demander si le problème est solvable .

NB: j aimerai continuer à rendre via le FFP et pouvoir afficher
mon vb assez rapidement ;pas d upload en VRAM triangle par triangle ça serait beaucoup trop lent .

Voila si vous avez une idée ...
Je sais pas si je suis clair : je joins quelques screens du problème
merci d'avance.

http://perso.wanadoo.fr/metald/editor1.JPG
http://perso.wanadoo.fr/metald/editor2.JPG
http://perso.wanadoo.fr/metald/editor3.JPG

NewbiZ
12/08/2005, 18h31
Excuses moi mais pourrais tu donner quelques précisions ?

1) En fait tu utilises des TRIANGLE_STRIP, et tu fournis directement tes vertex, et tu as des problèmes de coordonnées de texturage ?
2) tu voudrais juste que ta texture soit plaquée dans l'autre sens ?
3) pourrais tu donner ton algorithme pour le moment ?

codespirit
12/08/2005, 18h55
oui bien sur

1)Pour l instant c est une triangle list mais comme dans le cas du strip mes sommets ne sont pas dupliqués dans mon vb (heureusement car les maps sont du genre imposantes).Comme tu l auras compris je met tout dans un vb que j' upload de temps en temps (à chaque modif du relief/propriétés des sommets).

2) je voudrai répéter ma texture et qu elle garde la même orientation
ascii art time (pour une rangée):
actuellement
><><><>...
je voudrais
>>>>>>>...
NB: je sais que je pourrais excéder 1 pour les coordonnées mais vu la taille des maps je risquerai de tomber sur un MaxTextureRepeat trop faible.

3)pour les uv je n'ai pas encore trouvé l 'algo( c' est la le problème donc j 'alterne les 1 et 0 d'ou cet effet mirroir)
pour les sommets (on a XSize*ZSize sommets)

float u=0.0f;
float v=1.0f;

for(long Row=0;Row<ZSize;++Row)

{

for(long Column=0;Column<XSize;++Column)

{

vbData[XSize*Row+Column].X=Column*XStep ;

vbData[XSize*Row+Column].Y=0.0f;

vbData[XSize*Row+Column].Z=Row*ZStep;
vbData[XSize*Row+Column].Tu=u;
vbData[XSize*Row+Column].Tv=v;

if(u==0.0f)u=1.0f; else u=0.0f;
}
if(v==0.0f)v=1.0f; else v=0.0f;

}

Laeti²x
02/09/2005, 13h21
ca depend quel est le ratio entre la taille de ta texture / zone couverte,
si tu ne veux pas mapper chaque case avec une texture tu peux deja decouper ton espace en petits bouts.

Genre si tu reuni deja des strips de carreaux 128x128 avec une tex en disons (c'est gros je sais) 512 ca peut etre sympa.

Pour un terrain accidente ca peut le faire, pas pour des grandes surfaces plates... mais c'est un peu l'interet du terrain.

Ou alors tu met une grosse texture moche (512 gourmand again) sur une plus grande surface et tu fais du multitex/un mesh en plus pour faire une deuxieme passe pour salire et preciser le bazar^H^H^H^H^H^H^H^H^H^H^H^H (desole j'avais mal regarde le screen avec le texte).

je vois que ca. je sais pas si j'ai bien compris le probleme.

De loin et de ma faible experience en decors d'exterieurs, a long terme en fait, je crois que si tu essaye d'optimiser en faisant des grands carrés sur les zones planes en laissant le details sur les zones accidentees il faudra jouer avec le mode de repetition de la texture et faire de plus petits groupes de strips.

mainge
02/10/2005, 03h53
salut,
recherche dans ton manuel, si tu utilise opengl ou directx, il y a une option pour les texture : WrapMode qui peut etre CLAMP, BORDER, REPEAT, MIRROR,...etc.
apparement dans ton cas tu voudrait l'option REPEAT alors que tu est en mode MIROR.
ainsi tu pourra mapper 8x8 la texture sur 128x128 vertex par example ou 128x128 comme dans ton example.

concernant l'optimisation des vertices, il y a deux solution a exploiter en mem temps.
- la première est comme dit précédemment, de regrouper les surfaces planes, je te conseil de calculer les angles arrête par arrête et de poser une limite d'angle.
- la deuxième est la plus puissante, c'est le Dynamic LOD, gestion dynamique des niveaux de détails. en fait il sagit de faire une grille plus grossière sur les zones éloignés (au fond) et une grille plus dense sur les zones proches (devant). c'est un calcul qui doit etre fait a chaque image mais il t'économisera du vertex sans altérer la qualitée (ca depend de la resolution de rendu).

voir gamasutra.com : dynamic L.O.D. (SSX)

puisse ces conseils éclairé ton terrain d'uv...