![]() |
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: ![]() Aber ich verstehe die höheren Generatoren nicht richtig. Besonders diese beiden Absätze beim Particle Generator sind mir zu hoch *gg* Zitat:
Vielen Dank schon mal, MfG |
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 |
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: |
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 |
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: |
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 |
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:
(ich weiss dafür die befehle nit, hab also befehle genommen, die klar machen sollten, was gemeint ist)
farbe:=random(255);
pixel[x,y].color:=rbgtocolor(farbe, farbe, farbe) 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:
der durchschnitt der umliegenden felder?
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; so in etwa
Delphi-Quellcode:
jetzt mehr symolisch, muss man mit jedem dert drei rbg werte machen....
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
|
Re: Heightmaps generieren?
Ja das wäre ja schon viel zu einfach. Da sind so große Sprünge, das kann man kaum verwenden.
|
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! |
Re: Heightmaps generieren?
Doch bei dieser einen Variante schon. Kurz erklärt:
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 ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz