Differences

This shows you the differences between two versions of the page.

Link to this comparison view

gp:laboratoare:05 [2026/03/27 18:27]
maria_anca.balutoiu [Modelul Whittaker]
gp:laboratoare:05 [2026/04/01 11:48] (current)
maria_anca.balutoiu [Fractal Noise]
Line 8: Line 8:
   * Octava 3+: detalii fine (stânci, denivelări mici)   * Octava 3+: detalii fine (stânci, denivelări mici)
  
-Parametrii care controlează ​fBm sunt:+Parametrii care controlează ​Fractal Noise sunt:
   * **Octave:** Numărul de straturi de zgomot   * **Octave:** Numărul de straturi de zgomot
   * **Persistence:​** Cât de repede scade amplitudinea   * **Persistence:​** Cât de repede scade amplitudinea
Line 37: Line 37:
 Pentru a clasifica biomurile se poate folosi modelul Whittaker, care folosește două axe climatice pentru a defini zonele geografice: temperatura (corelată cu elevația) și nivelul de precipitații (corelat cu umiditatea). Pentru a clasifica biomurile se poate folosi modelul Whittaker, care folosește două axe climatice pentru a defini zonele geografice: temperatura (corelată cu elevația) și nivelul de precipitații (corelat cu umiditatea).
  
-{{ :​gp:​laboratoare:​whittaker.png?​600 |}}+{{ :​gp:​laboratoare:​whittaker.png?​500 |}} 
 + 
 +Un tabel simplificat de clasificare Whittaker poate fi următorul:​ 
 + 
 +^ Biom ^ Elevație ^ Umiditate ^ 
 +| Ocean | < 0.35 | - | 
 +| Plajă | 0.35 - 0.40 | - | 
 +| Deșert | 0.40 - 0.75 | < 0.20 | 
 +| Savană | 0.40 - 0.75 | 0.20 - 0.40 | 
 +| Pădure temperată | 0.40 - 0.75 | 0.40 - 0.65 | 
 +| Junglă | 0.40 - 0.75 | 0.65 - 0.85 | 
 +| Mlaștină | 0.40 - 0.75 | > 0.85 | 
 +| Tundră | 0.60 - 0.75 | < 0.40 | 
 +| Taiga | 0.60 - 0.75 | > 0.40 | 
 +| Zăpadă / Munte înalt | > 0.75 | - | 
 + 
 +<note important>​Harta de elevație și harta de umiditate trebuie generate cu seed-uri diferite. Dacă se folosește același seed, cele două hărți vor fi identice, iar clasificarea biomilor va fi incorectă, deoarece fiecare punct va avea aceeași valoare de elevație și umiditate.</​note>​ 
 + 
 +==== Implementare ==== 
 +  - Fractal Noise 
 +  - Generarea celor două hărți de elevație și de umiditate, fiecare cu propriul seed 
 +  - Clasificarea biomurilor 
 +  - Construirea mesh-ului 3 
 + 
 +Pentru fiecare vertex al grilei se calculează înălțimea din harta de elevație și culoarea din clasificarea biomurilor. Apa este aplatizată la ''​waterLevel''​ pentru a simula suprafața oceanului:​ 
 + 
 +<code csharp>​ 
 +for (int z = 0; z < mapHeight; z++) 
 +
 +    for (int x = 0; x < mapWidth; x++) 
 +    { 
 +        int idx = z * mapWidth + x; 
 +        float height = elevationMap[x,​ z] < waterLevel ? waterLevel : elevationMap[x,​ z]; 
 +        vertices[idx] = new Vector3(x * meshScale, height, z * meshScale);​ 
 +        colors[idx] ​  = GetBiomeColor(elevationMap[x,​ z], moistureMap[x,​ z]); 
 +    } 
 +
 +</​code>​ 
 + 
 +Triangularea grilei (două triunghiuri per pătrat): 
 + 
 +<code csharp>​ 
 +int a = z * mapWidth + x; 
 +int b = a + 1; 
 +int c = a + mapWidth; 
 +int d = c + 1; 
 + 
 +triangles[triIdx++] = a; 
 +triangles[triIdx++] = c; 
 +triangles[triIdx++] = b; 
 + 
 +triangles[triIdx++] = b; 
 +triangles[triIdx++] = c; 
 +triangles[triIdx++] = d; 
 +</​code>​ 
 + 
 +{{ :​gp:​laboratoare:​result.png?​500 ​|}}
 ==== Tasks ==== ==== Tasks ====
 +  - Generați harta de elevație și harta de umiditate cu seed-uri diferite, folosind în ambele cazuri multiple octave (6-8).
 +  - Generați culori diferite pentru fiecare biom, folosind tabelul Whittaker.
 +  - Construiți mesh-ul 3D atribuind fiecărui vertex înălțimea și culoarea corectă.
 +  - **Bonus 1.** Implementați algoritmul ''​Diamond Square'',​ pentru a genera un heightmap.
 +
 +<note tip>
 +  - **Inițializare.** Se crează un grid de zerouri. Cele 4 colțuri sunt setate la o valoare aleatoare dintr-un interval predefinit de posibile înălțimi.
 +  - **Pasul Pătrat.** Se calculează punctul din mijloc al fiecărui pătrat, făcând media aritmetică ale celor 4 colțuri la care se adaugă o valoare aleatoare dintr-un interval predefinit.
 +  - **Pasul Romb.** Se calculează punctul din mijloc al fiecărui diamant, făcând media aritmetică ale celor 4 colțuri ale rombului la care se adună o valoare aleatoare din intervalul predefinit de valori aleatoare. În cazul în care rombul este incomplet, se iau în calcul doar colțurile existente în calculul mediei aritmetice.
 +  - **Recursivitate.** Intervalul predefinit de valori aleatoare se înjumătățește. Se reiau pașii pătrat și romb până se aleg calculează toate valorile din grid.
  
 +Resurse: [[https://​www.youtube.com/​watch?​v=4GuAV1PnurU|https://​www.youtube.com/​watch?​v=4GuAV1PnurU]]
 +</​note>​
  
  
gp/laboratoare/05.1774628854.txt.gz · Last modified: 2026/03/27 18:27 by maria_anca.balutoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0