![]() |
"weiche übergänge" in arrays
hi
ich hab ein 2d-array aus bytes da sollen zunächst mal zufällige werte rein nun soll aber eine 0 nicht neben einer 200 liegen, es soll sozusagen "weiche übergänge" geben wie kann ich das realisieren? PS: einige werden schon verstanden haben: Ja, es geht um heightmaps :-D |
Re: "weiche übergänge" in arrays
Du gehst jetzt vermutlich mit 'ner Schleife jedes Element durch und weist ihm den Random-Wert zu.
Jetzt merkst du dir den Wert aus dem letzten Element und sorgst dafür, daß die Differenz nicht größer als 5 ist. Ist z.B. der vorherige Wert 200 erzeugst du einen Random-Wert zwischen 0 und 10 und addierst anschließend 195 drauf, schon hast du einen Wert der maximal um 5 vom benachbarten abweicht. Um alle 8 Nachbarn eines Elementes zu berücksichtigen würde ich zunächst alle Elemente auf -1 initialisieren *) und anschließend den Mittelwert aus allen Nachbarn nehmen, den ich dann als Basis für den aktuellen nehme. Pseudocode:
Code:
const
Differenz = 5; for i := 0 to Length(arr) do for j := 0 to Length(arr[i]) do begin arr[i,j] := Random(2*Differenz + 1) + (GetAverageFromNeighbours(i,j) - Differenz); end; *) Edit: Auf -1 initialisieren, damit GerAverageFromNeighbours weiß, welche Nachbarn es berücksichtigen soll, sonst ziehen die ganzen Nullen aus den noch nicht bearbeiteten Werte den ganzen Durchschnitt runter. |
Re: "weiche übergänge" in arrays
jaja, das problem ist dieses, es soll ja nicht so aussehen:
1 5 10 15 20 25 30 32 40 45 50 55 60 65 70 75 80 85 es geht mir jetzt nicht ums ansteigen, sondern darum, das der array in beiden "richtungen" "weich" ist.... |
Re: "weiche übergänge" in arrays
naja dann nimmst Du einen doppelt so großen Bereich und ziehst vom ergebnis die hälfte ab...
|
Re: "weiche übergänge" in arrays
nein, ich will das der array sowohl in der wagerechten als auch in der senkrechten weiche übergänge hat
stellt es euch mal als bild vor :wink: denn das will ich ja letztendlich damit machen ... :-D |
Re: "weiche übergänge" in arrays
machs doch so..
generier dir erstmal ein grobes array das dir die berge und täler definiert dann machst du daraus ein hochauflösenderes array wo die zwischenwerte berechnet... das könntest du wiederum auch mit mehreren immer höher auflösenden arrays immer feiner machen und bei jeder stufe *vielleicht* nochmal bisschen random werte generierst ( zur "berechneten zwischenhöhe" zwischen den grobauflösenden array punkten ) also immer weiter aufdröseln.. so müsste das dann denk ich mal in X und Y Richtung weich erscheinen ( vielleicht müsste man sich da einen Algorithmus ausdenken der in der Mitte von 4 Punkten(sozusagen die Pfeiler) den Mittelwert berechnet ( Höhe zwischen den "Pfeilern" ) ) also das das dann wie ein spinnennetz aussieht das runterhängt wo keine "Pfeiler" (grobe array Punkte) sind .. ich weis ich hab das jetzt voll beschissen erklärt *g* falls du das nich gepeilt hast mach ich ne zeichnung |
Re: "weiche übergänge" in arrays
ohh, schwierig
ich weiss nit mal gucken.. kannste dir event mal ein kelines beispeil-code ausdenken? weiss nämlich nicht 100 pro ob ichs verstanden hab :-D |
Re: "weiche übergänge" in arrays
Liste der Anhänge anzeigen (Anzahl: 1)
hab mal drüber nachgedacht nochmal..
hab Skizze angehängt ( PNG := Internetexplorer ) |
Re: "weiche übergänge" in arrays
ok, hier das prinzip beschrieben:
groben array machen in grösseren array übertragen dabei so strecken, das zwischen allen punkten je 1 punkt absttand ist den zwischenpunkt zum glätten nutzen das ganze paar mal wirderholen |
Re: "weiche übergänge" in arrays
Das Verfahren nennt sich "lieneare Interpolation". Selbiges wird zum "schönen" Vergrößern von Bitmaps verwendet. Du wirst, wenn du mit einem z.B. 8x8-Array beginnst, und es so auf 256x256 hoch-interpolierst etwas unschöne Effekte haben. Das ganze wird relativ "blockig". Du könntest mal im Netz nach anderen Interpolationsmethoden suchen, etwa bi-/trilinear, quadratisch usw.
Auch eine Möglichkeit wäre es, einfach "wirkich" mit einem kleinen Bitmap anzufangen, und dieses mittels der Graphics32-Lib ( ![]() Und das ganze soll ja scheinbar eine Höhen-Map werden, gell!? Wenn du naturnahe Landschaften erzeugen willst, dann wäre ein anderer Ansatz geeigneter. Dafür verwendet man meist "Perlin-Noise". Auch hierzu wid man im Netz ordentlich fündig ;) Ist aber mit deutlich mehr Aufwand verbunden. Hab ich mich auch noch nicht dran getraut, werd's aber in absehbarer Zeit tun :) gruss, dizzy |
Re: "weiche übergänge" in arrays
Liste der Anhänge anzeigen (Anzahl: 1)
jo *denke* mal so in der art könnte man das machen.. und wie gesagt bei den mittelwert berechnungen könnte man ja wieder +- *random* addieren :)
achja hab noch was zusätzlich gemalt wie man immer die mitte zwischen 4 punkten berechnet ( das müsste dann echt weich werden ?! ) also immer feiner und immer den mittelpunkt berechnen (zwischen 4 punkten) ( keine seiten-mittelpunkte (zwischen 2 punkten)) und dann halt jedes mal 45° verdrehen das viereck wovon man die mitte berechnet ( siehe zeichnung ) so müsste man immer den mittelpunkt bekommen und benachbarte punkte mit beachten ( das es keine scharfen kanten gibt ) |
Re: "weiche übergänge" in arrays
also im prinzip ne funktion der du 4 höhen übergibst ( die 4 eckpunkte ) und der dir dann den mittelwert berechnet +- random
und dann halt irgendwie festhalten ob man grad 45° verdreht ausliest oder nicht.. an den rändern wo es dann keine mittelpunkte zwischen 4 ecken sondern nur noch zwischen 2 ecken gibt da muss man sich halt eine 3 punkt funktion machen ( kanten der highmap ) oder halt verzweifeln *grübel* harte sache.. wenn das funzt will ich den source sehen :D |
Re: "weiche übergänge" in arrays
thx, aber da es tatsächlich maps fürn egoshpotter werden sollen :-)
werd ich dizzys trip mal nachgehen... dizzy, brauchst du noch einen, der dir helfen, und nacheher alles abschreiben kann? *lol* |
Re: "weiche übergänge" in arrays
es gibt auch n proggi wo dir highmaps machen kann ( sogar gleich die gerenderte textur dazu )
![]() damit mach ich schon paar jahre echt super aussehende fotorealistische landschaftsbilder.. da gibts auch das besagte "perlin-noise" und so.. auch canionize ( canion artige wucherungen generieren ) |
Re: "weiche übergänge" in arrays
Liste der Anhänge anzeigen (Anzahl: 1)
kostprobe(mal schnell erstellt):
|
Re: "weiche übergänge" in arrays
reaktion 1: geil!
reaktion 2: haben! :-) ist das freeware? |
Re: "weiche übergänge" in arrays
so ziemlich.. kannst halt keine riesen auflösungen generieren bzw super krasse effekte nich nutzen ( 95% gehen aber )
echt hart was man damit hinbekommt ( gallerien angucken lohnt 200% ) |
Re: "weiche übergänge" in arrays
wo gibts das denn?
|
Re: "weiche übergänge" in arrays
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab für die Uni mal so ein Programm geschrieben...
Zumindest denke ich das Du dir sowas vorstellst... Ist aber ziemlich buggy noch und auf Erdkunde ausgelegt... P.S.: Hat nix mit den Landschaften zu tun... Einfach Datei -> neues Diagramm -> Random und dann erstellen! |
Re: "weiche übergänge" in arrays
geil, kann man dvon die sources haben?
|
Re: "weiche übergänge" in arrays
Ist ja lustig... Da wollte ich gerade auch noch Terragen als obergeiles Lanschafts-Tool empfehlen, den Link raussuchen - und was sehe ich: Ist planetside :lol:
Mein Lieblings-Map-Generator :!: Aber was sehe ich... Nicht mehr komplett frei! Das war mal anders... Ich bin wirklich enttäuscht :cry: Ich sehe in letzter Zeit immer häufiger, dass sehr interessante Freeware-Projekte nachher in ein (halb-)kommerzielles Produkt gewandelt werden. Sehr bedauerlich! :evil: |
Re: "weiche übergänge" in arrays
Liste der Anhänge anzeigen (Anzahl: 1)
Shit hab gedacht das waren die Sourcen gepackt... :oops:
Jetzt aber :angle: |
Re: "weiche übergänge" in arrays
thx :thuimb:
ich denk n bisserl umgebaut (darf ich doch, solang ichs für mich behalte, oder? :gruebel: ) wird mir das einige probleme ersparen :-D |
Re: "weiche übergänge" in arrays
Meinetwegen kannst Du's sogar verkaufen... :lol:
Aber mich würde dein Endprog interessieren. :-D |
Re: "weiche übergänge" in arrays
naja, das endprog wird nur wenig anders aussehen
ich werd aber sehr viel rausreissen, da ich ja nur die random funktion brauche dann kann ich ja das ganze zeug mit den messstationen und so, sowie die beschriftungen raustun ausserdem will ich ja nur grautöne ausgeben |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 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