Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Heightmaps generieren? (https://www.delphipraxis.net/21212-heightmaps-generieren.html)

Jörn 29. Apr 2004 13:09


Heightmaps generieren?
 
Kennt jemand eine deutsche Seite, auf der verschiedene Ansätze zum generieren von Heightmaps beschrieben werden? Hab zwar ein paar Seiten gefunden, aber die Ansätze waren meist unvollständig beschrieben oder es war nur ein kurzer Kommentar wie Programm xy das eben handhabt. Vielleicht kennt sich ja auch jemand hier damit aus?
Die einzige Seite die sehr gut aussieht ist folgende: LEDA with OpenGL

Aber ich verstehe die höheren Generatoren nicht richtig. Besonders diese beiden Absätze beim Particle Generator sind mir zu hoch *gg*

Zitat:

Damit die Landschaft tatsächlich eine vulkanische Optik hat, wird die Spitze der entstehenden Erhöhungen gesucht. Alle Punkte, die nicht zu weit von dieser Spitzenposition abweichen, werden dann ander sog. Kraterlinie gespiegelt, eine Linie, die ein Stück unterhalb der Spitze mehr oder weniger parallel zum Boden verläuft.
Über den Modify Generator ? Button ist es dem User sowohl möglich, den Postprocessing Filter sowie die Filter Konstante anzupassen, als auch die Anzahl der Positionen zu bestimmten, von denen der Algorithmus Partikel fallen lässt (Number Of Placements). Ebenso kann die minimale und die maximale Höhe für einen Kegel eingestellt werden. Desweiteren kann für jeden Positionswechsel eine bestimmte Erhöhung der Positon (y-Wert) eingegeben werden.
Und beim Fault Formation-Prinzip kenne ich dieses "dreidimensionale Kreuzprodukt" nicht. Weiss jemand was das sein soll?

Vielen Dank schon mal, MfG

glkgereon 30. Apr 2004 23:52

Re: Heightmaps generieren?
 
äh, wie bitte? :gruebel:

soweit ich weiss sind heighmaps (weiss die schreibweise nit genau) das:

bilder in graustufen von einem prog eingelesen werden
je nach farbe wird dann 3d eine karte gemacht wobei schwarz=unten und weiss=oben gilt
dieses verfahren wird (ich glaub nur) für 3d-progs benutzt

soweit mein kentnissstand

glkgereon 30. Apr 2004 23:54

Re: Heightmaps generieren?
 
achso, ich glaub beim abschicken hab ich verstanden, worüber dein zitat handelt...
dort geht es glaub ich darum, wie genau das prog das bild in eine graphik umwandelt...
also das prog muss die map dann ja mir kegeln und boxen usw usw usw nachbauen
das beschreibt der text wahrscheinlich
ka was das einem bringt :gruebel:

Dani 1. Mai 2004 01:18

Re: Heightmaps generieren?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Zum Kreuzprodukt:
hab keine Ahnung ob das jetzt hilft. Das letzte Mal, als wir mit dem Kreuzprodukt rechneten, haben wir damit den Normalenvektor (also die Senkrechte) zu einer Ebene mit den Spannvektoren a-> und b-> im Raum gebildet...
http://www.delphipraxis.net/download.php?id=5100

Gruß,
Dani

dizzy 1. Mai 2004 01:38

Re: Heightmaps generieren?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im beiliegenden Bildchen sieht man auch, warum es Kreuzprodukt heist ;)

Ergebnis eines Kreuzproduktes ist übrigends der Vektor, der senkrecht auf den beiden Ausgangsvektoren steht.
Sind die Ausgangsvektoren linear abhängig (zeigen beide in die selbe Richtung/sind Vielfache voneinander), so ergibt das Kreuzprodukt den Nullvektor (0 0 0).
Die Länge des Ergebnisvektors gibt den Flächeninhalt des Parallelogramms an, das von den beiden Ausgangsvektoren gebildet wird. Also kann man mit dieser Operation z.B. die Fläche eines beliebigen Dreiecks ausrechnen, von dem man nur 2 Seiten, und keinen Winkel kennen muss! ( 1/2 * abs(v1 x v2) )
Geometrie ist geil! :zwinker:

\\1001 edits: Ich bekomm das noch irgendwie hin mit dem Anhang... :freak:

Jörn 1. Mai 2004 10:49

Re: Heightmaps generieren?
 
glkbkk: Nein, ich versuche Programme zu schreiben, mit denen ich zufällig Heightmaps generieren kann. Das umwandeln einer Heightmap in eine 3D-Landschaft ist einfach, aber wie gesagt verstehe ich die höheren Generatoren nur teilweise.

Kreuzprodukt: Gut wie ich diesen Vektor nun ausrechne ist nun klar, ist ja dann auch schnell in eine Funktion verpackt. Da dieser Vektor dann senkrecht auf den anderen steht, weiss ich auch wie das nun gemeint ist. Ich habe aber keinen blassen Schimmer, wie ich jetzt auf die beiden Ursprungsvektoren kommen soll, ich hab ja nur ein 2dimensionales Bild und auch nur eine Linie, die das Bild per Zufall teilt. Werde den Tag mal ein wenig drüber grübeln müssen und vielleicht ein wenig testen.

MfG

glkgereon 2. Mai 2004 14:54

Re: Heightmaps generieren?
 
ähm, weisst du was ich da machen würde?

in delphi ein bitmap oder so machen
dann pixel für pixel durchgehen

Delphi-Quellcode:
farbe:=random(255);
pixel[x,y].color:=rbgtocolor(farbe, farbe, farbe)
(ich weiss dafür die befehle nit, hab also befehle genommen, die klar machen sollten, was gemeint ist)

ich bearbeitre ein pexel nachm anderen
mit farbe generiere ich einen wert
damit es grau wird, ist farbe rot, grün und blau zugleich
das die sprünge nicht zugross sind, dürfte ungefähr so gehen:
(jetzt komplett)

Delphi-Quellcode:
for x:=1 to hoehederkarte do
   begin
   for y:=1 to breitederkarte do
      begin
        farbe:=random(10)-5;//zufälliger unterschied
        image1.pixels[x,y].color:=rbgtocolor(durchschnitt der umliegenden pixel+farbe)
      end;
   end;
der durchschnitt der umliegenden felder?
so in etwa

Delphi-Quellcode:
durchschnitt:= (pixels[x-1,y].color + pixels[x-1,y-1].color + pixels[x,y-1].color + pixels[x+1,y-1].color) div 4
jetzt mehr symolisch, muss man mit jedem dert drei rbg werte machen....

Jörn 2. Mai 2004 16:14

Re: Heightmaps generieren?
 
Ja das wäre ja schon viel zu einfach. Da sind so große Sprünge, das kann man kaum verwenden.

dizzy 2. Mai 2004 16:17

Re: Heightmaps generieren?
 
Heightmaps für Langschaften sind einfach nur 2D Schwarzweiss-Bilder. Um eine möglichst realistische Struktur hinzubekommen verwendet man üblicherweise "Rauschen", sehr gute Ergebnisse erzielt man mit dem "Perlin"-Algo. Musst mal nach googeln - da dürfte man so einiges drüber finden. Auch so nettigkeiten wie Plateubildung, Meeresspiegel usw. lassen sich algorithmisch lösen. Sehr schönes Anschuungsobjekt wäre das Programm Terragen. Das arbeitet genau mit diesen Mitteln und ist zu dem auch noch Freeware - und die Bilder die das Teil zaubert sind reichlich geil :) Ist zwar sehr umfangreich, aber die Heightmaps an sich arbeiten genau nach diesem Prinzip.
Mit Vektoren hat man bei der Erzeugung der reinen Heightmap rein garnichts zu tun!

Jörn 2. Mai 2004 17:29

Re: Heightmaps generieren?
 
Doch bei dieser einen Variante schon. Kurz erklärt:
  • Zwei zufällige Punkte ermitteln
  • Durch diese eine imaginäre Linie ziehen
  • Auf einer der beiden Seiten alle Punkte um x erhöhen
  • x wird zB halbiert
Und das so oft wiederholen wie man eben möchte. Und um unterscheiden zu können, auf welcher Seite der Linie ein Punkt liegt, braucht man angeblich dieses Kreuzprodukt. Aber ich bin am überlegen, ob ich das einfach mit Gleichungen nach y=mx+n mache und die Senkrechte nach m1*m2=-1 berechne, weil das mit dem Kreuzprodukt übertrieben scheint. Doch irgendwas werden sich diese Studenten auch dabei gedacht haben.

EDIT: Nachdem ich mir heute noch so einige Gedanken gemacht hab, bin ich zu dem Schluss gekommen, das die Lösung mit den Vektoren doch einfacher wäre. Nur verstehe ich immer noch nicht wie ich das im 2dimensionalen anwende, trotz Studium des Artikels auf Wikipedia *grml*


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz