Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1294 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Generation de terrain

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Generation de terrain

n°297478
Clie
Posté le 30-01-2003 à 20:45:50  profilanswer
 

Voila, je voudrais générer des montagnes toutes simples aléatoirement alors de souvenir j'ai codé ca :
 

Code :
  1. private void generateSubGround(int x1, int y1, int x2, int y2)
  2. {
  3.  int xtmp = (x1+x2)/2;
  4.  int ytmp = (y1+y2)/2;
  5.  if((xtmp!=x1)||(ytmp!=y1))
  6.  {
  7.   points[xtmp][y1]=((points[x1][y1]+points[x2][y1])/2)+hazard();
  8.   points[x1][ytmp]=((points[x1][y1]+points[x1][y2])/2)+hazard();
  9.   points[x2][ytmp]=((points[x2][y1]+points[x2][y2])/2)+hazard();
  10.   points[xtmp][y2]=((points[x1][y2]+points[x2][y2])/2)+hazard();
  11.   points[xtmp][ytmp] = ((points[x1][y1]+points[x2][y1]
  12.         +points[x2][y1]+points[x2][y2])/4)+hazard();
  13.   generateSubGround(x1,y1,xtmp,ytmp);
  14.   generateSubGround(xtmp,y1,x2,ytmp);
  15.   generateSubGround(x1,ytmp,xtmp,y2);
  16.   generateSubGround(xtmp,ytmp,x2,y2);
  17.  }
  18. }


 
Seulement les resulat que j'obtiens on pas l'air terrible.
J'ai pas affiche sous la forme d'un graphe mais seulement les valeur.
Est-ce que je me suis planté quelques part dans l'algo, il me semblait que les resultats etaient bien meilleurs

mood
Publicité
Posté le 30-01-2003 à 20:45:50  profilanswer
 

n°297623
Pitounet
Posté le 31-01-2003 à 00:02:09  profilanswer
 

tu devrais réduire l'amplitude possible du résultat de ta fonction hazard() en fionction de la longueur du coté de ton carré.
En gros, les variations doivent etre plus faibles lorsqu'elles concernent des vertex qui sont proches l'un de l'autre.
 
En générale, on divise l'intervale par 2 en chaque appel récursif.

n°297648
Clie
Posté le 31-01-2003 à 00:42:23  profilanswer
 

Je pense effectivement que ca permettrais de lisser la courbe tout en gardant le cote accidente donc je pense que je vais le faire.
Par contre je me rappel bien que dans l'algo d'origine on ne le faisait pas.
J'ai cherché sur le net et j'ai trouvé cette algo ainsi que d'autre (en diamant  :??: ) du meme genre mais a chaque fois c'est super mal expliqué.
Sinon j'ai deja trouvé une petite erreur dans ma somme des quatre cotes je somme deux fois le meme.

n°297664
LeGreg
Posté le 31-01-2003 à 01:48:39  profilanswer
 

la qualite de ton terrain dependra surtout de ta fonction "hasard()".
En general un terrain c'est autre chose que du bruit.
 
il existe d'autres methodes tres bien expliquees sur le web:
Perlin noise (c'est du bruit mais un peu organise),
fractales (faults par exemple),
deposition de particules,
diagrammes de voronoi etc..
 
Si tu as besoin d'explication plus precises n'hesite pas.
 
Legreg


---------------
voxel terrain render engine | animation mentor
n°297841
youdontcar​e
Posté le 31-01-2003 à 12:59:12  profilanswer
 

legreg a écrit :

Perlin noise (c'est du bruit mais un peu organise)

http://www.noisemachine.com
 
pour un tutorial & du code.

n°297963
HelloWorld
Salut tout le monde!
Posté le 31-01-2003 à 15:03:51  profilanswer
 

Y'a un superbe exemple de prog (genere montage + neigne + un lac) livré comme exemple avec la lib wxWindows ("fractal" je crois)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°297976
tomlameche
Et pourquoi pas ?
Posté le 31-01-2003 à 15:09:22  profilanswer
 

HelloWorld a écrit :

Y'a un superbe exemple de prog (genere montage + neigne + un lac) livré comme exemple avec la lib wxWindows ("fractal" je crois)


Sinon, j'avais fait un prog en C de montagne fractale quand j'étais étudiant que tu peux trouver ici : http://tomlameche.free.fr/V2/image [...] ntagne.htm
C'est pas hyper bien propre niveau programmation ( j'étais étudiant en math, pas en info ) mais l'algo est correct.


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
n°298047
Pitounet
Posté le 31-01-2003 à 15:56:14  profilanswer
 
n°298210
Clie
Posté le 31-01-2003 à 19:28:24  profilanswer
 

Oui alors j'ai regarde tout ca ets pour la plupart des truc c'est trop compliqué parcequ'en fait mon but n'est pas de faire une images de montagnes mais plutot des maps aleatoires pour tester un pathfinding 2D.
Pitounet : ta derniere URL je l'avais vue est ca me parait bien mais j'arrive pas a comprendre la methode du diamant.
C'est quoi qu'il appelle un diamant ?

n°298268
LeGreg
Posté le 31-01-2003 à 21:39:00  profilanswer
 

les anglophones appellent
"diamonds" les carres qui sont tournes  
d'un angle de 45 degres
 
Comme tu rajoutes des points au milieu d'une grille de carres
quand tu selectionnes ces points 4 par 4 ca constitue
ce qu'ils appellent un diamond.
(on pourrait traduire ca par losange meme si ca m'embete
cet abus de qualifier de losange ce qui n'est qu'un carre qui a la tete penchee)
 
LeGreg


---------------
voxel terrain render engine | animation mentor
mood
Publicité
Posté le 31-01-2003 à 21:39:00  profilanswer
 

n°298289
Clie
Posté le 31-01-2003 à 21:57:57  profilanswer
 

D'accord j'ai compris, il faut joindre les cote du carre un peu a la pacman  
Par contre je vois pas comment le faire de maniere recursive
Parce qu'il faut utiliser des points exterieurs:
Le diamant n'est pas contenu dans le carre de l'etape d'avant
C'est possible ?

n°298298
chrisbk
-
Posté le 31-01-2003 à 22:03:10  profilanswer
 

Clie a écrit :

Oui alors j'ai regarde tout ca ets pour la plupart des truc c'est trop compliqué parcequ'en fait mon but n'est pas de faire une images de montagnes mais plutot des maps aleatoires pour tester un pathfinding 2D.
Pitounet : ta derniere URL je l'avais vue est ca me parait bien mais j'arrive pas a comprendre la methode du diamant.
C'est quoi qu'il appelle un diamant ?


 
le perlin noise est vraiment tout con a faire, pour peu que tu dispose d'une fonction de resize d'image 2d.
 
La déposition de particule est pas ce que l'on a fait de plus dur non plus.  
 
 
 

n°298324
Clie
Posté le 31-01-2003 à 22:19:08  profilanswer
 

C'est vrai que le perlin noise a l'air pas mal mais le seul algo que j'ai trouve avait l'air complique.
En plus y a un truc que j'ai pas compris, on par forcement en 3D ?

n°298348
chrisbk
-
Posté le 31-01-2003 à 22:31:30  profilanswer
 

Clie a écrit :

C'est vrai que le perlin noise a l'air pas mal mais le seul algo que j'ai trouve avait l'air complique.
En plus y a un truc que j'ai pas compris, on par forcement en 3D ?


 
pour le perlin ? nope.
 
Bon, en version simple & culcul, vala comment faire :
 
prendre une bitmap B de taille N*N, ts les pixels etant egal a 0
prendre une valeur H (128 par ex)
 
tant que pas content
pour tous les pixels de N
N[i] += rand%H
H = H / 2;
N = N*2;
B = resize(B,N*2)
fpour
ftant que


Message édité par chrisbk le 31-01-2003 à 22:31:41
n°298352
Clie
Posté le 31-01-2003 à 22:33:45  profilanswer
 

Euh Tenez pas compte de mon dernier poste, j'ai trouve un site clair http://freespace.virgin.net/hugo.e [...] perlin.htm
sur perlin noise est j'ai mieux compris.
 
Alors j'hesite un peu sur l'utilisation que je pourrais en faire avec mon algo.
Parceque je peut pas l'utiliser seul, c'est deterministe
Est-ce que je l'utilise genre fonction de l'altitude moyenne des quatres points donc avec un noise sur une dimension ou est-ce que je l'utilise a l'aide des coordonnees des points  donc 2D.
Dans tous les cas ca reste deterministe

n°298361
Clie
Posté le 31-01-2003 à 22:35:56  profilanswer
 

Euh y a deux chose qui me choque dans ton algo :
Ca fait quoi resize ?
Comment tu estime pas content ?

n°298372
Clie
Posté le 31-01-2003 à 22:38:50  profilanswer
 

En relisant un peu je vois le pas content par contre le resize  :??:

n°298384
chrisbk
-
Posté le 31-01-2003 à 22:43:25  profilanswer
 

le pas content c toi qui voit, ca depend de la res finale de ta bitmap
 
le resize c juste une fonction resize de bitmap,genre le resize de ton toshop

n°298402
Clie
Posté le 31-01-2003 à 22:49:08  profilanswer
 

Eh oui mais c'est pour quelque chose d'automatique alors le pas content je vois je prend une valeur qui me plait et je la mets en dure.
Par contre le resize de toShop y fait quoi en simplifie je suis pas graphiste du tout (enfin si des fois mais au point a point)

n°298684
chrisbk
-
Posté le 01-02-2003 à 10:43:35  profilanswer
 

Clie a écrit :

Eh oui mais c'est pour quelque chose d'automatique alors le pas content je vois je prend une valeur qui me plait et je la mets en dure.
Par contre le resize de toShop y fait quoi en simplifie je suis pas graphiste du tout (enfin si des fois mais au point a point)


ben y t'etire ta bitmap, quoi d'autre ?
 
par exemple dans l'algo tu as une bitmap de 128x128, pour passer a l'etat suivant il te faut la resizer en 256x256. Y'a tout un tas de technique pour faire ca, qui te fournireront du plus ou moins moche en fonction de l'algo choisi (je te laisse deviner la contrepartie du beau...)
 
pourle perlin, je viens de me rapeller :
 
http://freespace.virgin.net/hugo.elias
 
pour le pas content, moi je donne juste la taille finale de la bitmap que je veux (par ex, 256x256)


Message édité par chrisbk le 01-02-2003 à 10:45:18
n°298698
Clie
Posté le 01-02-2003 à 11:07:29  profilanswer
 

Ok je vois, en fait etire ta map c'est un peu divise la frequence par 2

n°298700
chrisbk
-
Posté le 01-02-2003 à 11:10:07  profilanswer
 

Clie a écrit :

Ok je vois, en fait etire ta map c'est un peu divise la frequence par 2


 
heuh quand tu la double, tu augmente la frequence du bruit a venir (il aura 512 points au lieu de 256 par ex), mais pour ce qui etait la avant, vi, ca l'etale  
 
Le plus dur, la dedans c la fonction de resize, sinon c vraiment tres simple. Pas dit par contre que ca te genera un super paysage (j'esperes que tu reves pas de falaise par ex :D) mais bon

n°298743
Clie
Posté le 01-02-2003 à 12:49:49  profilanswer
 

Pour le paysage t'inquietes pas c'est pas pour faire des photo de vacances.
Merci a tous pour vos reponse je crois que j'ai de quoi bossé maintenant. (Foula du travail)

n°299242
Willyzekid
Posté le 01-02-2003 à 22:30:50  profilanswer
 

[:sicko]
 
(J'ai besoin des height map moi :) )


---------------
Horizon pas Net, reste à la buvette!!
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Generation de terrain

 

Sujets relatifs
génération d'évenement en c[Java] Génération d'un document XSL en Java RESOLU
Génération d'une chaîne de caractèreproblème étrange lors de la génération de mon code HTML
[PHP] Temps de generation des pages negative :??:[PHP] Comment recupperer le temps de generation des pages ???
pb de génération de combinaisons sur vba (excel)[PHP] pb de generation de tableau auto 1 ligne Ok 2eme NaN
[php html] comment aligner 2 tableaux avec generation auto de lignesGénération de pages html - templates
Plus de sujets relatifs à : Generation de terrain


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR