This shows you the differences between two versions of the page.
|
gp:laboratoare:04 [2025/03/23 19:02] maria_anca.balutoiu |
gp:laboratoare:04 [2025/03/30 14:51] (current) maria_anca.balutoiu [Diamond Square Algorithm] |
||
|---|---|---|---|
| Line 7: | Line 7: | ||
| - **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 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 Diamant.** Se calculează punctul din mijloc al fiecărui diamant, făcând media aritmetică ale celor 4 colțuri ale diamantului la care se adună o valoare aleatoare din intervalul predefinit de valori aleatoare. În cazul în care diamantul este incomplet, se iau în calcul doar colțurile existente în calculul mediei aritmetice. | - **Pasul Diamant.** Se calculează punctul din mijloc al fiecărui diamant, făcând media aritmetică ale celor 4 colțuri ale diamantului la care se adună o valoare aleatoare din intervalul predefinit de valori aleatoare. În cazul în care diamantul este incomplet, se iau în calcul doar colțurile existente în calculul mediei aritmetice. | ||
| - | - **Recursivitate.** Intervalul predefiniti de valori aleatoare se înjumătățește. Se reiau pașii pătrat și diamant până se aleg calculează toate valorile din grid. | + | - **Recursivitate.** Intervalul predefinit de valori aleatoare se înjumătățește. Se reiau pașii pătrat și diamant până se aleg calculează toate valorile din grid. |
| ==== Fractal Noise ==== | ==== Fractal Noise ==== | ||
| Line 14: | Line 14: | ||
| <code> | <code> | ||
| float CalculateFractalNoise(int x, int y) | float CalculateFractalNoise(int x, int y) | ||
| + | { | ||
| + | for (i = 0; i < octaves; i++) | ||
| { | { | ||
| - | float amplitude = 1; | + | xCoord = (float)x / width * scale * frequency; |
| - | float frequency = 1; | + | yCoord = (float)y / height * scale * frequency; |
| - | float noiseHeight = 0; | + | |
| - | for (int i = 0; i < octaves; i++) | + | perlinValue = Mathf.PerlinNoise(xCoord, yCoord) * 2 - 1; |
| - | { | + | noiseHeight += perlinValue * amplitude; |
| - | float xCoord = (float)x / width * scale * frequency; | + | |
| - | float yCoord = (float)y / height * scale * frequency; | + | |
| - | float perlinValue = Mathf.PerlinNoise(xCoord, yCoord) * 2 - 1; | + | amplitude *= persistence; |
| - | noiseHeight += perlinValue * amplitude; | + | frequency *= lacunarity; |
| + | } | ||
| - | amplitude *= persistence; | + | return (noiseHeight + 1) / 2; // Normalize to 0 - 1 |
| - | frequency *= lacunarity; | + | } |
| - | } | + | |
| - | + | ||
| - | return (noiseHeight + 1) / 2; // Normalize to 0 - 1 | + | |
| - | } | + | |
| </code> | </code> | ||
| ==== Tasks ==== | ==== Tasks ==== | ||
| - Implementați algoritmul diamond-square. | - Implementați algoritmul diamond-square. | ||
| - | + | - Deformați un teren, folosind fractal noise în Unity. | |
| - | + | - **Bonus.** Generați procedural multiple biomes. (Puteți porni de la acest exemplu: [[https://www.youtube.com/watch?v=aZyrimErjJ0]]) | |
| - | <hidden> | + | |
| - | </hidden> | + | |