![]() |
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 ![]() |
Re: Heightmaps generieren?
Sorry das ich pushe, aber echt niemand nen Plan von so was? Bräuchte ja nur ne Erklärung zu dem Wikipedia-Artikel (s. letzter Post).
MfG |
Re: Heightmaps generieren?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Jörn,
ich hab mal ein Programm geschrieben um 3D-Modelle darzustellen, da brauchte ich eine Funktion die testet, ob ein bestimmter (2D-)Punkt in einem (2D-)Dreieck liegt. Um das herauszufinden muss man ja auch wissen, ob ein Punkt ober- oder unterhalb einer bestimmten Linie liegt (beispielsweise Seite c). Da das mit den mathematischen Funktionen jeder Seite doch recht aufwändig ist, hab ich nach was anderem gesucht und hab eine Möglichkeit mit dem Kreuzprodukt gefunden, die tatsächlich sehr einfach ist. Ich stell mal die HTML-Seite in den Anhang, die Adresse hab ich leider nicht mehr (e-mail des Autors steht aber noch drin). Es wird da hauptsächlich drauf eingegangen wie man mit dem Kreuzprodukt rausfindet wo ein Punkt relativ zu einer Linie liegt. Keine Angst ist recht überschaubar das ganze ;) Hoffe du kannst damit was anfangen, hab mir die Seite auf die du verwiesen hast nicht angeguckt... Viele Grüße, Sebastian PS: Vektoren in 2D haben einfach 0 als X3 Komponente... //EDIT: nur Rechtschreibfehler verbessert |
Re: Heightmaps generieren?
Jo das sieht sehr gut aus. Vielen Dank! Damit werde ich wohl zu Rande kommen.
EDIT: ![]() Das ist die URL |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 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