View Full Version : [c#] Perlin Noise informazioni
Scusate volevo un informazione qualcuno sa spiegarmi il metodo perlin?e come lo potrei applicarlo?un esempio semplicissimo
The_ouroboros
17-02-2013, 16:53
non è una chat.
Cmq eccoti due link utili:
Descrizione metodo Perlin (http://www.giannellisalvatore.it/Perlin/Descrizione.htm)
Perlin Noise in C# (http://lotsacode.wordpress.com/2010/02/24/perlin-noise-in-c/)
Non c'è un esempio più semplice?
TheEnigmist
17-02-2013, 18:19
Non c'è un esempio più semplice?
Non vorrei ma il Perlin Noise non è per niente un algoritmo "base". Cioè nel senso che è deve essere per forza complesso e ti ci devi spremere le meningi per comprenderlo veramente.
Io comunque consiglio di leggere gli articoli di Ken Perlin, l'inventore del noise con la sua veloce e antica implementazione.
Non vorrei ma il Perlin Noise non è per niente un algoritmo "base". Cioè nel senso che è deve essere per forza complesso e ti ci devi spremere le meningi per comprenderlo veramente.
Io comunque consiglio di leggere gli articoli di Ken Perlin, l'inventore del noise con la sua veloce e antica implementazione.
e dove potrei trovarli?
perchè mi serve per creare una mappa casuale
TheEnigmist
17-02-2013, 18:36
e dove potrei trovarli?
perchè mi serve per creare una mappa casuale
Quelli che un po' tutti associano al perlin noise.
Comunque qui http://mrl.nyu.edu/~perlin/doc/oscar.html hai tutto ciò che ti serve per implementarlo. Have fun
Quelli che un po' tutti associano al perlin noise.
Comunque qui http://mrl.nyu.edu/~perlin/doc/oscar.html hai tutto ciò che ti serve per implementarlo. Have fun
è l'unico modo per generare mappe/mondi casuali?con un "senso"?
TheEnigmist
17-02-2013, 18:55
è l'unico modo per generare mappe/mondi casuali?con un "senso"?
Oddio, ci devi lavorare parecchio per trovare il "senso" che intendi te. Ma comunque si, solo con quello puoi generare già una mappa sensata. Poi ci sono altre tecniche da utilizzare per generare territori ancora più "naturali".
Oddio, ci devi lavorare parecchio per trovare il "senso" che intendi te. Ma comunque si, solo con quello puoi generare già una mappa sensata. Poi ci sono altre tecniche da utilizzare per generare territori ancora più "naturali".
davvero?del tipo??comunque con del "senso" intendo un modo per generare mondi/mappe in maniera casuale e naturale,esempio un mondo di pianura sempre diverso o deserti ecc
TheEnigmist
17-02-2013, 19:40
davvero?del tipo??comunque con del "senso" intendo un modo per generare mondi/mappe in maniera casuale e naturale,esempio un mondo di pianura sempre diverso o deserti ecc
http://en.wikipedia.org/wiki/Fractal_landscape
Divertiti :)
http://en.wikipedia.org/wiki/Fractal_landscape
Divertiti :)
esempi?..
TheEnigmist
17-02-2013, 20:25
esempi?..
Guarda io ti consiglio di trovare più che esempi dei trattati sull'argomento. Se non conosci in teoria cosa è, come funziona e come dovrebbe essere creato ti posso dare anche il codice sorgente di Outerra, non riusciresti a capirci niente e non apprendi nulla.
Di soli esempi vai poco lontano, anche perché poi rischi di legarti agli esempi che "guardi" e quando ti ritrovi in situazioni del tutto diverse dagli esempi non riusciresti a risolvere il problema. Comunque sui fractal non ho materiale, fai un giretto su google. Se poi vuoi la pappa pronta allora non posso aiutarti, i fractal sono ancora ignoti per me xD
Guarda io ti consiglio di trovare più che esempi dei trattati sull'argomento. Se non conosci in teoria cosa è, come funziona e come dovrebbe essere creato ti posso dare anche il codice sorgente di Outerra, non riusciresti a capirci niente e non apprendi nulla.
Di soli esempi vai poco lontano, anche perché poi rischi di legarti agli esempi che "guardi" e quando ti ritrovi in situazioni del tutto diverse dagli esempi non riusciresti a risolvere il problema. Comunque sui fractal non ho materiale, fai un giretto su google. Se poi vuoi la pappa pronta allora non posso aiutarti, i fractal sono ancora ignoti per me xD
infatti non voglio la pappa pronta sto cercando di capire se no non farei domande
TheEnigmist
17-02-2013, 20:46
infatti non voglio la pappa pronta sto cercando di capire se no non farei domande
Bene, io comunque ti consiglio di studiarti per bene in teoria il fractal, il perlin e tutto ciò che ci gira intorno. Poi con google ti cerchi da solo gli esempi oppure (meglio ancora) tenti di implementarlo da solo partendo dalla teoria, così impari a colpo sicuro tutto, però ci metti tempo ed è meglio ;)
Ora ti conviene andare di google, tanto di roba ne trovi in tutti i linguaggi.
Bene, io comunque ti consiglio di studiarti per bene in teoria il fractal, il perlin e tutto ciò che ci gira intorno. Poi con google ti cerchi da solo gli esempi oppure (meglio ancora) tenti di implementarlo da solo partendo dalla teoria, così impari a colpo sicuro tutto, però ci metti tempo ed è meglio ;)
Ora ti conviene andare di google, tanto di roba ne trovi in tutti i linguaggi.
sul fractal non trovo molto e nemmeno perlin o meglio che per me sia comprensibile ma devo assolutamente capire come funziona anche se come cosa la vedo molto ardua,ma devo capirlo..
TheEnigmist
17-02-2013, 22:06
sul fractal non trovo molto e nemmeno perlin o meglio che per me sia comprensibile ma devo assolutamente capire come funziona anche se come cosa la vedo molto ardua,ma devo capirlo..
Sul perlin a suo tempo io trovai un casino di roba e poi ti ricordo che qui parliamo di algoritmi alquanto complessi per chi si avvicina per la prima volta. Buona fortuna con il tuo lavoro ;)
Sul perlin a suo tempo io trovai un casino di roba e poi ti ricordo che qui parliamo di algoritmi alquanto complessi per chi si avvicina per la prima volta. Buona fortuna con il tuo lavoro ;)
aspetta mi vuoi dire che te sei in grado di generare una mappa??O.O
TheEnigmist
17-02-2013, 23:43
aspetta mi vuoi dire che te sei in grado di generare una mappa??O.O
Una velocemente si, ma non è il massimo del dettaglio e della naturalezza, però col perlin e con un po' di codice non ci metti nulla.
Una velocemente si, ma non è il massimo del dettaglio e della naturalezza, però col perlin e con un po' di codice non ci metti nulla.
scusa non metto in dubbio le tue capicità anzi ma non riesco a capire una cosa...se per esempio...io prendo unity prendo un cubo e cerco con perlin di creare una prateria(solo terreno) non saprei come fare...te invece sì?e velocemente??è così semplice??sono così scemo?:muro: ...
TheEnigmist
18-02-2013, 00:20
scusa non metto in dubbio le tue capicità anzi ma non riesco a capire una cosa...se per esempio...io prendo unity prendo un cubo e cerco con perlin di creare una prateria(solo terreno) non saprei come fare...te invece sì?e velocemente??è così semplice??sono così scemo?:muro: ...
Conosco poco unity (mi sto concentrato sui Terrain di quell'engine per ora), ma non capisco se vuoi creare un cubo come quello in figura a lato qui
http://mrl.nyu.edu/~perlin/paper445.pdf
Comunque con il perlin puoi semplicemente creare una heightmap e poi applicarla alla superficie del cubo per modificarla. Invece di iniziare sul 3D io ti consiglio di iniziare, come sto facendo io, sul 2D e applicare le heightmap al Terrain di unity, così vedi subito il risultato senza sbatterti troppo sulla 3a dimensione.
EDIT: comunque non è essere scemi, nemmeno io conosco bene il perlin e tutto il mondo procedurale, però ci sto sbattendo da parecchio per cercare di comprenderlo al meglio :)
Conosco poco unity (mi sto concentrato sui Terrain di quell'engine per ora), ma non capisco se vuoi creare un cubo come quello in figura a lato qui
http://mrl.nyu.edu/~perlin/paper445.pdf
Comunque con il perlin puoi semplicemente creare una heightmap e poi applicarla alla superficie del cubo per modificarla. Invece di iniziare sul 3D io ti consiglio di iniziare, come sto facendo io, sul 2D e applicare le heightmap al Terrain di unity, così vedi subito il risultato senza sbatterti troppo sulla 3a dimensione.
EDIT: comunque non è essere scemi, nemmeno io conosco bene il perlin e tutto il mondo procedurale, però ci sto sbattendo da parecchio per cercare di comprenderlo al meglio :)
scusa mi sono spiegato male-_- io volevo creare un mondo di blocchi esempio: una pianura irregolare
TheEnigmist
18-02-2013, 01:14
scusa mi sono spiegato male-_- io volevo creare un mondo di blocchi esempio: una pianura irregolare
Tipo minecraft? :O
Comunque se ho capito quello che vuoi uoi leggerti questo:
http://catchvar.com/terrain-generation-using-perlin-noise-with-ne
E credo che questo (vedendo solo le immagini, con calma lo leggerò nel dettaglio) è ciò che cerchi:
http://www.gamedev.net/blog/33/entry-2227887-more-on-minecraft-type-world-gen/
Tipo minecraft? :O
Comunque se ho capito quello che vuoi uoi leggerti questo:
http://catchvar.com/terrain-generation-using-perlin-noise-with-ne
E credo che questo (vedendo solo le immagini, con calma lo leggerò nel dettaglio) è ciò che cerchi:
http://www.gamedev.net/blog/33/entry-2227887-more-on-minecraft-type-world-gen/
Mi scuso in anticipo perchè sono fuori e magari mi spiego male...comunque..
Sono andato a cercare questo"Minecraft" e diciamo di sì mi interessa creare mondi di deserti,pianure,mare ,caverne ecc. ma non mi interessa ne scavare ne costruire ,vorrei con unity creare un mondo casuale con dei cubi in modo da "attaccare"la zona di deserto,pianura ecc così da creare questo mondo:)
Ora...sono andato a cercarmi la teoria di perlin e ho capito che si tratta di un algoritmo di "disturbo" che permette di creare paesaggi(ti prego dimmi che ho capito bene:cry: ) e il punto chiave di disturbo sta nello sfruttare dei numeri casuali...
con questo ho pensato di creare due cicli per vedere se riesco a creare un mondo in 2D(come mi hai consigliato te) e poi se tutto va bene passare al 3D.
Ho visto che te ne intendi MOLTO più di me e che ci hai già lavorato ti andrebbe di darmi una mano?di spiegarmi come dovrei(circa)fare?
dovrei creare un vettore bidimensionale giusto e poi appicare un disturbo?
ah ho letto ora che potrei fare dei biomi come base...come li creo con unity?
TheEnigmist
18-02-2013, 13:15
Mi scuso in anticipo perchè sono fuori e magari mi spiego male...comunque..
Sono andato a cercare questo"Minecraft" e diciamo di sì mi interessa creare mondi di deserti,pianure,mare ,caverne ecc. ma non mi interessa ne scavare ne costruire ,vorrei con unity creare un mondo casuale con dei cubi in modo da "attaccare"la zona di deserto,pianura ecc così da creare questo mondo:)
Ora...sono andato a cercarmi la teoria di perlin e ho capito che si tratta di un algoritmo di "disturbo" che permette di creare paesaggi(ti prego dimmi che ho capito bene:cry: ) e il punto chiave di disturbo sta nello sfruttare dei numeri casuali...
con questo ho pensato di creare due cicli per vedere se riesco a creare un mondo in 2D(come mi hai consigliato te) e poi se tutto va bene passare al 3D.
Ho visto che te ne intendi MOLTO più di me e che ci hai già lavorato ti andrebbe di darmi una mano?di spiegarmi come dovrei(circa)fare?
dovrei creare un vettore bidimensionale giusto e poi appicare un disturbo?
ah ho letto ora che potrei fare dei biomi come base...come li creo con unity?
Il perlin più che creare paesaggi è stato pensato per creare delle texture in tempo reale che siano molto naturali (tipo una texture per un albero, una tavola di legno ecc). Se poi utilizzi lo stesso metodo per creare una heightmap allora puoi ricreare una sorta di terreno.
Purtroppo non sono riuscito nemmeno io a creare in modo ben definito i vari territori (deserti, pianure, montagne ecc).
Una cosa posso dirti subito, se utilizzi il terreno base di unity non puoi creare le caverne in quanto il terreno non può essere "bucato". Però questo è un problema che cercherò di risolvere in seguito.
Io quello che ho fatto è stato molto semplice. Partendo dal simplex creo una heightmap (una matrice di float) e poi la applico al terreno di unity. Però non crei deserti, montagne ecc subito. Devi giocare un po' con i valori e con il codice per riuscire a trovare il set che va bene per te.
Ora il codice che uso io su unity è questo:
public class MapGen : MonoBehaviour {
private Object terrain;
private int heightRes= 513;
// Use this for initialization
void Start () {
float[,] heightmap = new float[heightRes,heightRes];
TerrainData tData = new TerrainData();
tData.size = new Vector3(2000, 2000, 2000);
tData.heightmapResolution=heightRes;
tData.SetDetailResolution(1024,8);
for (int i=0; i<heightRes; ++i)
for (int j=0; j<heightRes; ++j)
heightmap[i,j]= (float) PERLINNOISE (x,y);
tData.SetHeights(0, 0, heightmap);
terrain = Terrain.CreateTerrainGameObject(tData);
}
// Update is called once per frame
void Update () {
}
}
Dove PERLINNOISE ci piazzi il tuo perlin noise. Ora ti consiglio per vedere subito un risultato di portare in C# il Simplex di Ken che ho postato prima.
Consiglio, con quel perlin in 3D richiama la funzione con uno stile tipo:
noise.getvalue(i/scale, j/scale, 1/scale)
Dove scale è un numero reale e ti permette di fare una sorta di "zoom" del noise. Ora appena ho un po' di tempo lo faccio e ti faccio degli screen
Il perlin più che creare paesaggi è stato pensato per creare delle texture in tempo reale che siano molto naturali (tipo una texture per un albero, una tavola di legno ecc). Se poi utilizzi lo stesso metodo per creare una heightmap allora puoi ricreare una sorta di terreno.
Purtroppo non sono riuscito nemmeno io a creare in modo ben definito i vari territori (deserti, pianure, montagne ecc).
Una cosa posso dirti subito, se utilizzi il terreno base di unity non puoi creare le caverne in quanto il terreno non può essere "bucato". Però questo è un problema che cercherò di risolvere in seguito.
Io quello che ho fatto è stato molto semplice. Partendo dal simplex creo una heightmap (una matrice di float) e poi la applico al terreno di unity. Però non crei deserti, montagne ecc subito. Devi giocare un po' con i valori e con il codice per riuscire a trovare il set che va bene per te.
Ora il codice che uso io su unity è questo:
public class MapGen : MonoBehaviour {
private Object terrain;
private int heightRes= 513;
// Use this for initialization
void Start () {
float[,] heightmap = new float[heightRes,heightRes];
TerrainData tData = new TerrainData();
tData.size = new Vector3(2000, 2000, 2000);
tData.heightmapResolution=heightRes;
tData.SetDetailResolution(1024,8);
for (int i=0; i<heightRes; ++i)
for (int j=0; j<heightRes; ++j)
heightmap[i,j]= (float) PERLINNOISE (x,y);
tData.SetHeights(0, 0, heightmap);
terrain = Terrain.CreateTerrainGameObject(tData);
}
// Update is called once per frame
void Update () {
}
}
Dove PERLINNOISE ci piazzi il tuo perlin noise. Ora ti consiglio per vedere subito un risultato di portare in C# il Simplex di Ken che ho postato prima.
Consiglio, con quel perlin in 3D richiama la funzione con uno stile tipo:
noise.getvalue(i/scale, j/scale, 1/scale)
Dove scale è un numero reale e ti permette di fare una sorta di "zoom" del noise. Ora appena ho un po' di tempo lo faccio e ti faccio degli screen
mio perlin noise?comunque davvero complimenti fai ste cose con una semplicità incredibile:mbe: per il fatto delle grotte avevo pensato di utilizzare dei cubi appunto per poi poter bucare il terreno e fare in modo che si formassero delle grotte,comunque grazie mi stai aiutando tantissimo
scusa non ho capito che intendi:muro:
TheEnigmist
18-02-2013, 19:51
scusa non ho capito che intendi:muro:
Cosa non hai capito di preciso?
Comunque con "mio perlin noise" intendo il perlin noise che hai implementato tu. Io per esempio ho portato in C# il simplex e uso quello con le 3 coordinate.
Il perlin più che creare paesaggi è stato pensato per creare delle texture in tempo reale che siano molto naturali (tipo una texture per un albero, una tavola di legno ecc). Se poi utilizzi lo stesso metodo per creare una heightmap allora puoi ricreare una sorta di terreno.
Purtroppo non sono riuscito nemmeno io a creare in modo ben definito i vari territori (deserti, pianure, montagne ecc).
Una cosa posso dirti subito, se utilizzi il terreno base di unity non puoi creare le caverne in quanto il terreno non può essere "bucato". Però questo è un problema che cercherò di risolvere in seguito.
Io quello che ho fatto è stato molto semplice. Partendo dal simplex creo una heightmap (una matrice di float) e poi la applico al terreno di unity. Però non crei deserti, montagne ecc subito. Devi giocare un po' con i valori e con il codice per riuscire a trovare il set che va bene per te.
Ora il codice che uso io su unity è questo:
public class MapGen : MonoBehaviour {
private Object terrain;
private int heightRes= 513;
// Use this for initialization
void Start () {
float[,] heightmap = new float[heightRes,heightRes];
TerrainData tData = new TerrainData();
tData.size = new Vector3(2000, 2000, 2000);
tData.heightmapResolution=heightRes;
tData.SetDetailResolution(1024,8);
for (int i=0; i<heightRes; ++i)
for (int j=0; j<heightRes; ++j)
heightmap[i,j]= (float) PERLINNOISE (x,y);
tData.SetHeights(0, 0, heightmap);
terrain = Terrain.CreateTerrainGameObject(tData);
}
// Update is called once per frame
void Update () {
}
}
Dove PERLINNOISE ci piazzi il tuo perlin noise. Ora ti consiglio per vedere subito un risultato di portare in C# il Simplex di Ken che ho postato prima.
Consiglio, con quel perlin in 3D richiama la funzione con uno stile tipo:
noise.getvalue(i/scale, j/scale, 1/scale)
Dove scale è un numero reale e ti permette di fare una sorta di "zoom" del noise. Ora appena ho un po' di tempo lo faccio e ti faccio degli screen
nessuna novità?sono bloccato:cry:
The_ouroboros
18-02-2013, 20:00
si suppone che anche tu faccia qualcosa :D
si suppone che anche tu faccia qualcosa :D
infatti è da ieri sera che ci sono dietro:D se sapessi andare avanti continuerei a chiedere?
Cosa non hai capito di preciso?
Comunque con "mio perlin noise" intendo il perlin noise che hai implementato tu. Io per esempio ho portato in C# il simplex e uso quello con le 3 coordinate.
scusa non avevo letto-_- comunque è questo che non riesco a fare,comunque ci riprovo..
The_ouroboros
18-02-2013, 20:12
infatti è da ieri sera che ci sono dietro:D se sapessi andare avanti continuerei a chiedere?
intendo cosice che hai scritto, cosi si può correggerlo o cmq parlarne :cool:
intendo cosice che hai scritto, cosi si può correggerlo o cmq parlarne :cool:
ah scusa .....solo che è da un po che ci sbatto la testa è inizio a fare dei gra casini....comunque spre...riniziamo da capo..mappa 2D..creo uno script che mi crea a schermo una mappa 2D con un array (es:int[,]array=new int[5,5]),con due cicli for mi creala "mappa"ma è un enorme quadrato...ora per riuscire a fare qualcosa se non ho capito male devo:1-inizializzare l array con dei valori,2-usare un seme a random per creare questo disturbo ma come?:muro:
TheEnigmist
18-02-2013, 20:23
scusa non avevo letto-_- comunque è questo che non riesco a fare,comunque ci riprovo..
Veramente non riesci copiare un codice già pronto da un linguaggio all'altro?
Se questo è un problema sinceramente ti consiglio di evitare di andare avanti, affinare prima le tue conoscenze e poi riprovare con il perlin. Come già detto precedentemente, non è un algoritmo semplice. Il mio è un consiglio eh, poi fai come vuoi ;)
Non ti posto la mia versione per il semplice motivo che devi farlo tu, suvvia, ti basta un copia-incolla e correggere alcune cose. Alla fine java e c# sono abbastanza simili.
Veramente non riesci copiare un codice già pronto da un linguaggio all'altro?
Se questo è un problema sinceramente ti consiglio di evitare di andare avanti, affinare prima le tue conoscenze e poi riprovare con il perlin. Come già detto precedentemente, non è un algoritmo semplice. Il mio è un consiglio eh, poi fai come vuoi ;)
Non ti posto la mia versione per il semplice motivo che devi farlo tu, suvvia, ti basta un copia-incolla e correggere alcune cose. Alla fine java e c# sono abbastanza simili.
Mmmm ora diventa una questione di principio...ci devo riuscire :muro:
http://catchvar.com/terrain-generation-using-perlin-noise-with-ne parli di questo giusto?
TheEnigmist
18-02-2013, 20:30
Mmmm ora diventa una questione di principio...ci devo riuscire :muro:
http://catchvar.com/terrain-generation-using-perlin-noise-with-ne parli di questo giusto?
No, parlo della versione originale fatta da Ken Perlin, veloce e affidabile:
http://mrl.nyu.edu/~perlin/noise/
Portalo in C# e richiami la funzione noise(x,y,z) nei due cicli for ecc ecc
No, parlo della versione originale fatta da Ken Perlin, veloce e affidabile:
http://mrl.nyu.edu/~perlin/noise/
Portalo in C# e richiami la funzione noise(x,y,z) nei due cicli for ecc ecc
mmm mi sembrava troppo bello-_- cmq ok ci provo anche se la vedo dura...
No, parlo della versione originale fatta da Ken Perlin, veloce e affidabile:
http://mrl.nyu.edu/~perlin/noise/
Portalo in C# e richiami la funzione noise(x,y,z) nei due cicli for ecc ecc
using UnityEngine;
using System.Collections;
public class MapGen : MonoBehaviour {
private Object terrain;
private int heightRes= 513;
void Start () {
float[,] heightmap = new float[heightRes,heightRes];
TerrainData tData = new TerrainData();
tData.size = new Vector3(2000, 2000, 2000);
tData.heightmapResolution=heightRes;
tData.SetDetailResolution(1024,8);
for (int i=0; i<heightRes; ++i)
for (int j=0; j<heightRes; ++j)
heightmap[i,j]= (float) MioNoise(x,y);
tData.SetHeights(0, 0, heightmap);
terrain = Terrain.CreateTerrainGameObject(tData);
}
public int MioNoise(int x, int y, int z) {
int X = (int)Math.floor(x) & 255,
Y = (int)Math.floor(y) & 255,
Z = (int)Math.floor(z) & 255;
x -= Math.floor(x);
y -= Math.floor(y);
z -= Math.floor(z);
double u = fade(x),
v = fade(y),
w = fade(z);
int A = p[X ]+Y, AA = p[A]+Z, AB = p[A+1]+Z,
B = p[X+1]+Y, BA = p[B]+Z, BB = p[B+1]+Z;
return lerp(w, lerp(v, lerp(u, grad(p[AA ], x , y , z ),
grad(p[BA ], x-1, y , z )),
lerp(u, grad(p[AB ], x , y-1, z ),
grad(p[BB ], x-1, y-1, z ))),
lerp(v, lerp(u, grad(p[AA+1], x , y , z-1 ),
grad(p[BA+1], x-1, y , z-1 )),
lerp(u, grad(p[AB+1], x , y-1, z-1 ),
grad(p[BB+1], x-1, y-1, z-1 ))));
}
double fade(double t) {
return t * t * t * (t * (t * 6 - 15) + 10);
}
double lerp(double t, double a, double b) {
return a + t * (b - a);
}
double grad(int hash, double x, double y, double z)
{
int h = hash & 15;
double u = h<8 ? x : y,
v = h<4 ? y : h==12||h==14 ? x : z;
return ((h&1) == 0 ? u : -u) + ((h&2) == 0 ? v : -v);
int[] p = new int[512];
int[] permutation = new int [] { 151,160,137,91,90,15,
131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,
190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,
88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166,
77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,
102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196,
135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123,
5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,
223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9,
129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228,
251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107,
49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254,
138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180
};
for(int i=0; i < 256; i++){
p[256+i] = p[i] = permutation[i];
}
}
void Update () {
}
}
cosa sbaglio?
TheEnigmist
18-02-2013, 21:49
public int MioNoise(int x, int y, int z)
Deve essere
public double MioNoise(double x, double y, double z)
O al massimo float, visto che tanto l'heightmap dei terrain di unity sono float[,]
Poi
for (int i=0; i<heightRes; ++i)
for (int j=0; j<heightRes; ++j)
heightmap[i,j]= (float) MioNoise(x,y);
Deve essere
for (int i=0; i<heightRes; ++i)
for (int j=0; j<heightRes; ++j)
heightmap[i,j]= (float) MioNoise(x,y,1);
Inoltre così facendo il risultato è un terreno piatto. Praticamente più è piccolo l'input che dai al noise più è "zoomato" il risultato. Ti faccio un esempio col testing che sto facendo io con una applicazione C# Form:
http://i.imgur.com/8LoL1Dy.jpg
http://i.imgur.com/A52abWK.jpg
http://i.imgur.com/iRgiE24.jpg
Inoltre come lo stai richiamando i valori saranno tra -1 e 1 mi pare, quindi va contro il sistema di heightmap di Unity, per risolvere il problema basta che usi questo codice:
for (int i=0; i<heightRes; ++i)
for (int j=0; j<heightRes; ++j)
heightmap[i,j]= (float)(0.5 * (1.0 + MioNoise(x/scale, y/scale ,1)));
Così facendo ti ritrovi in un range di [0 , 1].
Scale è il valore che ho dato tramite "noise scale" nel mio form.
Consigli sul scale (facendo vari test)
I valori compresi tra (-7, 7) più tempo rispetto a tutto il resto dei numeri reali che puoi immaginare. Almeno sul mio PC è così, praticamente in quell'intervallo vado da un massimo di 48ms al valore limite di 26/27ms
public int MioNoise(int x, int y, int z)
Deve essere
public double MioNoise(double x, double y, double z)
O al massimo float, visto che tanto l'heightmap dei terrain di unity sono float[,]
Poi
for (int i=0; i<heightRes; ++i)
for (int j=0; j<heightRes; ++j)
heightmap[i,j]= (float) MioNoise(x,y);
Deve essere
for (int i=0; i<heightRes; ++i)
for (int j=0; j<heightRes; ++j)
heightmap[i,j]= (float) MioNoise(x,y,1);
Inoltre così facendo il risultato è un terreno piatto. Praticamente più è piccolo l'input che dai al noise più è "zoomato" il risultato. Ti faccio un esempio col testing che sto facendo io con una applicazione C# Form:
solo questo?non va ancora....
che idiota hai ragione è un 3d....
okok aspetto intanto faccio prove
TheEnigmist
18-02-2013, 22:08
Ti riporto la parte che ho aggiunto:
Inoltre così facendo il risultato è un terreno piatto. Praticamente più è piccolo l'input che dai al noise più è "zoomato" il risultato. Ti faccio un esempio col testing che sto facendo io con una applicazione C# Form:
http://i.imgur.com/8LoL1Dy.jpg
http://i.imgur.com/A52abWK.jpg
http://i.imgur.com/iRgiE24.jpg
Inoltre come lo stai richiamando i valori saranno tra -1 e 1 mi pare, quindi va contro il sistema di heightmap di Unity, per risolvere il problema basta che usi questo codice:
for (int i=0; i<heightRes; ++i)
for (int j=0; j<heightRes; ++j)
heightmap[i,j]= (float)(0.5 * (1.0 + MioNoise(x/scale, y/scale ,1)));
Così facendo ti ritrovi in un range di [0 , 1].
Scale è il valore che ho dato tramite "noise scale" nel mio form.
Consigli sul scale (facendo vari test)
I valori compresi tra (-7, 7) più tempo rispetto a tutto il resto dei numeri reali che puoi immaginare. Almeno sul mio PC è così, praticamente in quell'intervallo vado da un massimo di 48ms al valore limite di 26/27ms
È tutto, ora puoi fare tuto ciò che vuoi, per il resto devi spremere le meningi tu ;) Auguri e buona fortuna!
Ti riporto la parte che ho aggiunto:
Inoltre così facendo il risultato è un terreno piatto. Praticamente più è piccolo l'input che dai al noise più è "zoomato" il risultato. Ti faccio un esempio col testing che sto facendo io con una applicazione C# Form:
http://i.imgur.com/8LoL1Dy.jpg
http://i.imgur.com/A52abWK.jpg
http://i.imgur.com/iRgiE24.jpg
Inoltre come lo stai richiamando i valori saranno tra -1 e 1 mi pare, quindi va contro il sistema di heightmap di Unity, per risolvere il problema basta che usi questo codice:
for (int i=0; i<heightRes; ++i)
for (int j=0; j<heightRes; ++j)
heightmap[i,j]= (float)(0.5 * (1.0 + MioNoise(x/scale, y/scale ,1)));
Così facendo ti ritrovi in un range di [0 , 1].
Scale è il valore che ho dato tramite "noise scale" nel mio form.
Consigli sul scale (facendo vari test)
I valori compresi tra (-7, 7) più tempo rispetto a tutto il resto dei numeri reali che puoi immaginare. Almeno sul mio PC è così, praticamente in quell'intervallo vado da un massimo di 48ms al valore limite di 26/27ms
È tutto, ora puoi fare tuto ciò che vuoi, per il resto devi spremere le meningi tu ;) Auguri e buona fortuna!
continua a non andare cmq grazie per tutto...
TheEnigmist
19-02-2013, 15:00
continua a non andare cmq grazie per tutto...
Beh se non va scrivi qui quale pensi sia il problema, quale è il problema che ti dà. Fai dei test, non so. Scrivere "continua a non andare" senza aggiungere altre info non è costruttivo nè per te nè per noi che potremmo aiutarti.
Beh se non va scrivi qui quale pensi sia il problema, quale è il problema che ti dà. Fai dei test, non so. Scrivere "continua a non andare" senza aggiungere altre info non è costruttivo nè per te nè per noi che potremmo aiutarti.
mi da 54 errori:muro: li de elencare elencare?:mbe:
TheEnigmist
19-02-2013, 21:43
mi da 54 errori:muro: li de elencare elencare?:mbe:
Eppure gli errori di unity sono molto facili da capire e se ci clicchi sopra due volte ti porta pure alla riga di codice che genera l'errore. Beh posta un sunto dei migliori errori e vediamo cosa hai combinato
Eppure gli errori di unity sono molto facili da capire e se ci clicchi sopra due volte ti porta pure alla riga di codice che genera l'errore. Beh posta un sunto dei migliori errori e vediamo cosa hai combinato
ma in questo modo mi crea un terrein di unity,c'è un modo per farlo con i cubi?al posto del terrein
Eppure gli errori di unity sono molto facili da capire e se ci clicchi sopra due volte ti porta pure alla riga di codice che genera l'errore. Beh posta un sunto dei migliori errori e vediamo cosa hai combinato
Ho corretto il codice
mi da questo errore error CS0119: Expression denotes a `type', where a `variable', `value' or `method group' was expected
TheEnigmist
22-02-2013, 21:09
Ho corretto il codice
mi da questo errore error CS0119: Expression denotes a `type', where a `variable', `value' or `method group' was expected
Scusa, stavo facendo un'esame. Purtroppo come ti ho detto in precedenza ho giocato poco con l'unity, provato a cercare su internet l'errore e vedere cosa dicono gli altri per poi rapportarlo al tuo di codice?
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.