Differences

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

Link to this comparison view

gp:laboratoare:05 [2026/03/27 19:38]
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 52: Line 52:
 | Taiga | 0.60 - 0.75 | > 0.40 | | Taiga | 0.60 - 0.75 | > 0.40 |
 | Zăpadă / Munte înalt | > 0.75 | - | | 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>​ <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 ==== ==== 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.1774633130.txt.gz · Last modified: 2026/03/27 19:38 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