Deformation de terrain

cs_nancyM Messages postés 6 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 8 septembre 2011 - 6 sept. 2011 à 19:04
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 - 9 sept. 2011 à 16:22
bonjour
j'espere que quelqu'un pourra me guider.
voila je souhaiterais réaliser une déformation de terrain (fait de triangle_strip ou de glCylinder je sais pas tout a fait) pour faire un effet de relief.
je sais qu'il faut utiliser les niveaux de gris d'une heigthmap, j'ai aussi regarder le displacement mapping, mais mon plus gros pb est que, en utilisant les niveaux de gris de ma heightmap cela ne fonctionne pas comme je le souhaite.
je me demande si c'est dans mon "fichier.vert (le vertex shader) qu'il faut que je lise le tableau des niveaux de gris, parce que je le fais directement dans la creation de mes triangles et c'est cela qui ne me semble pas correct.
et la je stagne vraiment!!!!
j'espere que quelqu'un pourra au moins me donner une piste.
merci

9 réponses

BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
7 sept. 2011 à 14:03
Hello,
Heightmap est, comme son nom l'indique, une map destiné à recenser les différentes hauteur de ton terrain.
L'idée est la suivante:
- la taille de ta heightmap correspond à la taille de ton terrain
- pour chaque point de ton terrain, tu va cherchers dans ta heightmap, la hauteur correspondante (la coordonnée Y, si tu es resté dans un repère standard)
- si ton point tombe entre des valeurs, il te vaudra extrapoler


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_nancyM Messages postés 6 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 8 septembre 2011
7 sept. 2011 à 16:03
ok, je sais que la heightmap c'est un tableau de haurteur comme tu dis, mais ce que je n'arrive pas à comprendre c'est justement comment la lire de telle sortes qu'elle agisse sur le terrain en question.
je m'explique, j'ai charge une texture, et j'ai une fonction loadBMP qui lit le fichier image.bmp.
le truc c'est que dans un programme .c je dessine le terrains avec ds triangles et tout. mais ce qui me bloque la c'est que je ne vois pas comment recureperer les niveaux de gris de la heigtmap pour les appliquer a la hauteur de mes triangles.
merci
0
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
7 sept. 2011 à 16:24
Ta heightmap correspond à ton image.bmp?
Si oui, à la suite du loadBMP, les valeurs des pixels de ton image correspondent à tes hauteurs.
Du coup, pour accéder à la hauteur du point (I,J), tu dois faire quelque chose du style
hauteur = monImage[I][J];

Bien évidemment, tu vas certainement "tombé à côté", dans le sens où ta matrice n'a pas de représentation continue mais discrète (dans le sens mathématiques). Il te faut donc extrapoler la valeur à partir des plus proches voisins (voir interpolation bilinéaire par exemple)

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_nancyM Messages postés 6 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 8 septembre 2011
8 sept. 2011 à 10:20
merci pour tes reponses,
j'ai une derniere question pour voir si j'ai tout bien compris,
qd je recupere les valeurs (i,j) de l'image, ces valeurs corresponde aux triangles de mon sol'ou pas, et du coup pour elever les triangles de sol je fais comment apres avoir recuperes les valeurs.
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
8 sept. 2011 à 10:32
Je ne connais pas la granularité de ton terrain (grille régulière ou non?) mais, en règle générale, il n'y a pas concordance entre les points de ton terrain et ta map.
D'ailleurs, la manip se fait dans l'autre sens: c'est quand tu construis tes triangles que tu va regarder la hauteur des sommets correspondants, et non au chargement de ta map.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_nancyM Messages postés 6 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 8 septembre 2011
8 sept. 2011 à 10:33
et ce que tu dis j'ai deja essaye d'une autre facon et ca marche, enfin je veux dire les triangles prennent de la hauteur mais en fait j'utilise glCylinder pour dessiner mes triangles qui serviront aux montagnes, du coup je vois pas comment plaquer la texture final apres, et c'est en fait qui me fais penser que ce que je fais n'est pas la bonne methode.
0
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
8 sept. 2011 à 10:41
Tu dessines des cylindres pour tes montagnes? Avec gluCylinder? (je ne connais pas glCylinder...)
Dans ce cas, tu peux récupérer la hauteur du centre du cylindre...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_nancyM Messages postés 6 Date d'inscription vendredi 22 avril 2011 Statut Membre Dernière intervention 8 septembre 2011
8 sept. 2011 à 11:20
oui c'est gluCylinder je me suis trompe, mais le pb avc gluCylinder est que la texture se plaque sur chaque cylindre, qu coup ca marche pas comme il faut.
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
9 sept. 2011 à 16:22
Il faut effectivement utiliser une heightmap via un vertex shader et fusionner la heightmap avec une autre qui correspond au cratère que tu veux ajouter. Mais il faut partir d'un plan ... pas d'un cylindre...
0