Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

21

24.02.2011, 22:19

Das Terrain ist natürlich im Grunde ein 3D Array. Aber die Generierung eines 3D Arrays ist doch auch mit einer Heightmap möglich. Man füllt den 3D Array anhand der Heighmap und macht dann für Erz usw. mit anderen Algorithmen weiter. Man macht einfach sowas:

Quellcode

1
2
3
4
5
6
7
for(int x=0;x<w;x++){
 for(int y=0;y<h;y++){
  for(int z=0;z<heightmap[x,y];z++){
      blocks[x,y,z]=SOLID;
   }
 }
}

22

24.02.2011, 22:26

Ich habe nicht vor Minecraft nachzubauen - Ich will in der zufällig generierten Welt Tiere und Pflanzen mit einem genetischen Algorithmus aussetzen welche sich im Laufe der Zeit an die Umgebung anpassen.

Wiegesagt plane ich eine Simulation und kein Spiel ^^.


Die Links zeigen recht eindrucksvoll das man mit Perlin Noise auch 3D Landschaften erstellen kann.


Wenn ich das Prinzip richtig verstanden habe:

Die Perlin Noise Funktion füllt ein Array mit zufälligen Werten abhängig von den Koordinaten. Anschließend glättet man dieses Array.

Man wiederholt das ganze, allerdings glättet man dieses mal die Werte nicht so stark.

Man erhält also zwei oder mehr Arrays (Je nachdem wie oft man das ganze wiederholt) welche Unterschiedlich stark geglättet wurden. Die Werte rechnet man in einem endgültigen Array zusammen.

Das erste stark geglättete Array sorgt für Gebirge und Täler, die darauf folgenden detailierteren Arrays lassen die Landschaft leicht uneben und somit detailierter erscheinen.



Das ist ein ziemlich cooles Prinzip ^^. Jetzt muss ich nur noch die Perlin Noise Funktion selbst verstehen und kann allmählich anfangen Welten zu generieren :P.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

23

24.02.2011, 22:36

Aber die Generierung eines 3D Arrays ist doch auch mit einer Heightmap möglich.

Ok, natürlich, mir ging es drum dass eine Heightmap allein hier nicht brauchbar ist, schon gar nicht als Repräsentation für den ganzen Level. Natürlich kann man die Grundform auf Basis einer Heightmap machen, das ist wohl auch sinnvoll so, da hast du schon recht.

Wenn ich das Prinzip richtig verstanden habe:

Die Perlin Noise Funktion füllt ein Array mit zufälligen Werten abhängig von den Koordinaten. Anschließend glättet man dieses Array.

Man wiederholt das ganze, allerdings glättet man dieses mal die Werte nicht so stark.

Glätten geht vielleicht ein wenig in die falsche Richtung (auch wenn es prinzipiell wohl das gleiche Ergebnis liefern würde das es sich dabei ja um ein Tiefpassfilter handel). Im Prinzip summiert man Perlin Noise verschiedener Frequenzen (sog. Oktaven) auf.

Jetzt muss ich nur noch die Perlin Noise Funktion selbst verstehen und kann allmählich anfangen Welten zu generieren .

Perlin Noise ist eigentlich sehr einfach, eine imo gute Erklärung gibts hier und google liefert da sonst auch so genug Material (z.B. das). Im Prinzip ist es einfach nur eine Funktion die jedem Punkt im Raum einen Wert zuordnet.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

24

25.02.2011, 17:33

Zu meinem Rogue-Vorschlag könntest du einfach mal bei google in Roguelike-Wikis gucken. Wobei das auch nur bedingt geeignet wäre. Habe mir Perlin-Noise zwar noch nicht angesehen aber hört sich ja ganz vielversprechend an. Vorallem weil die meisten Sachen die man zu Roguemaps findet eher Richtung Dungeon generierung gehen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige