Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 09, 2025 19:48

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Mapeditor
BeitragVerfasst: Sa Dez 30, 2006 12:10 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Guten Tag,
ich habe ein Problem. Mein Mapeditor sollte folgendermaßen funktionern. Die Map besteht aus ganz vielen kleinen Teilen, je 10x10 Höhenpunkten, die ich verändern kann (sie sind im Quelltext in der Map gespeichert). Jetzt will ich für jedes Mapteil mit 10x10 Höhenpunkten eine Textur nach dem Heightmapprinzip erstellen. Je nach höhe des Punktes werden halt texturen, die verschiedenen höhen zugeördnet sind beigemischt.

Problem 1.
10x10 Höhepunkte reichen nicht für eine Textur ( ZU PIXELIG ) .. Bei LoadHP hab ich versucht die zu vermehren ^^ Aber ich bekomm nicht das gewünschte ergebniss .. findet einer den Fehler ? .. oder hat einer ne andere Idee wie ich von 10x10 Höhepunkten eine -schöne höhentextur bekomm ?

Code:
  1.  
  2. das war schrott <!-- s;) --><img src=\"{SMILIES_PATH}/icon_wink.gif\" alt=\";)\" title=\"Wink\" /><!-- s;) -->
  3. end;


Zuletzt geändert von simon1988 am So Dez 31, 2006 12:00, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 31, 2006 12:00 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
OK. Mein Quelltext ist völliger Müll merk ich grad ;)

Hat denn einer eine Idee, wie ich aus 10x10 Höhenpunkten ne schöne HeightMap (also die Textur) hinbekomm ?
Das Problem is nicht aus den 10x10 Höhenpunkten ne Textur zu erstellen. Das problem ist, dass ne Textur mit 10x10 Höhenpunkten zu Pixelig ist. Hat einer ne Idee ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 31, 2006 13:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Meine erste Idee wäre gewesen, mittels Interpolation bzw. Polynominterpolation zunächst eine Pixelreihe zu betrachten. Aus dem fertigen Polynom holst du dir dann in beliebiger Auflösung Funktionswerte und erhälst so ein feineres Raster für die jeweilige Reihe.
Danach hast du sagen wir 10 feine Pixelreihen, die sich (gedanklich) noch in dem großen, groben Abstand befinden. Dann wiederholst du die Interpolation für jede Spalte mit Polynomen aus den jeweiligen neuen Pixel der verfeinerten Reihe und erhälst somit eine komplette HeightMap.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 31, 2006 13:58 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Das hört sich kompliziert an *grummel* ^^

Wie geht das nun ?
Ich mein das einzeige was ich hab isn array
HP : array[1..10] of array[1..10] of Single

gut.
Am besten gefällt mir die Kubische Spline-Interpolation , was auch immer das sein mag ^^ :D
Am einfachsten sieht aber die lineare Interpolation aus.

Das mit dem Phi hab ich schonmal garnich gerafft :D

Aber würde es so gehen ? Erstelle mit für jeden zwischenraum zweier Punkte eine Lineare Funktion zusammen ?
P(X,Y)
P1(1,4) P2(2,8 )

Steigung is ja dann m = (8-4)/(2-1)
jetzt fehlt für die Funktion nur noch b
y = mx + b

b = y - m * x kann man ja hier dann ausrechnen

b ist in unserem Fall 0

also haben wir für den zwischenraum dieser zwei Punkte folgende Funktion
f(x) = 4x
das könnte ich jetzt für jeden zwischenraum machen. ?!
meinst du sowas ?
Geht das jetzt auch in 3d raum ?



aber ich seh auch grad das is totaler quatsch ^^ *g*
wird da nicht eine Funktion erstellt 10ten grades ? oder lieg ich da falsch ?
vielleicht haste maln beispiel oder so


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 31, 2006 14:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
simon1988 hat geschrieben:
Das hört sich kompliziert an *grummel* ^^

Ich schätze das kann man nicht verneinen. ;)

Zitat:
Aber würde es so gehen ? Erstelle mit für jeden zwischenraum zweier Punkte eine Lineare Funktion zusammen ?

also haben wir für den zwischenraum dieser zwei Punkte folgende Funktion
f(x) = 4x
das könnte ich jetzt für jeden zwischenraum machen. ?!
meinst du sowas ?

Im Grunde ja, das wäre wohl die theoretisch simpelste Methode, das zu realisieren. Allerdings ist es halt linear und eigentlich stellst du das mit (flachen) Dreiecken ja bereits dar. ;)
Edit: Beim genaueren Drübernachdenken fällt mir auf, es müsste doch bereits Verbesserungen schaffen können, weil die Quads bei der Triangulation ja an einer Linie "gebrochen" werden.

Zitat:
Geht das jetzt auch in 3d raum ?

Wie gesagt, wenn du zunächst alle Zeilen interpolierst und anschließend alle neuentstanden Spalten müsste das imo schon gehen.

Zitat:
aber ich seh auch grad das is totaler quatsch ^^ *g*
wird da nicht eine Funktion erstellt 10ten grades ? oder lieg ich da falsch ?
vielleicht haste maln beispiel oder so

Eine Funktion 10. Grades zu benutzen wäre nicht so geschickt, weil die stark oszilliert (nach oben und unten ausschwingt) und das is ja eigentlich nicht gewünscht. Stattdessen sollte man lieber stückchenweise interpolieren, also zB. Funktion zwischen Punkt 1 und 2, dann zwischen P2 und 3 usw. Genau das nennt sich dann Spline. Wenn du dann mit kubischen Polynomen (ax³+bx²+cx+d) arbeitest ist das eine kubische Spline-Interpolation. ;)
Ein vielleicht etwas nicht ganz so kompliziert aussehender Link wäre das hier:
http://www.arndt-bruenner.de/mathe/scri ... spline.htm

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 01, 2007 11:16 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Es kommt wieder .. jetzt weiß ich weieder wies geht :)

also folgendermaßen
ich hab 10 Punkte
P1(1/4) P2(2/3) usw.
jetzt hab ich ja ne Funktion folgendermaßen

f(x) = ax^9 + bx^8 + ... + jx + k
so . die Aufgabe ist es nun die buchstaben a-k rauszufinden.
Aber das is doch mit der Matrix zu schaffen.
Meine ersten 10 Bedingungen bekomm ich über die 10 geebenen Punkte.
Weitere 10 Bedinungen bekomm ich dadürch , dass die Ableitungen an den Punkten P1 - P10 0 sein muss. Dort ist ja immer ein Wende oder Extrempunkt (sehe ich das richtig ? )
reichen die bedingungen jetzt ? .. wenn ich doch die bedingung über Abeitung setzte, dass an den Punkten die Steigung 0 ist, bekomm ich doch meine Funktion oder ?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 01, 2007 15:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
simon1988 hat geschrieben:
f(x) = ax^9 + bx^8 + ... + jx + k
so . die Aufgabe ist es nun die buchstaben a-k rauszufinden.
Aber das is doch mit der Matrix zu schaffen.
Meine ersten 10 Bedingungen bekomm ich über die 10 geebenen Punkte.
Weitere 10 Bedinungen bekomm ich dadürch , dass die Ableitungen an den Punkten P1 - P10 0 sein muss. Dort ist ja immer ein Wende oder Extrempunkt (sehe ich das richtig ? )

Leider nein, die Punkte liegen nicht notwendigerweise auf den Extrempunkten der Funktion. Aber mit Ableitungen liegst du gar nicht so falsch, wenn es um Splines geht.

Zitat:
reichen die bedingungen jetzt ? .. wenn ich doch die bedingung über Abeitung setzte, dass an den Punkten die Steigung 0 ist, bekomm ich doch meine Funktion oder ?!

Wie gesagt, ein 10-gradiges Polynom würde sehr stark zwischen den Funktionswerten schwingen. Wenn dir der Link mit kubischen Splines zu schwer ist, tut's wahrscheinlich auch eine Newton-Interpolation über jeweils 3 Punkte zusammengefasst (also f1 für P1-3, f2 für P3-P5, etc.). Dafür gibts auch schon einen Codeansatz in WP, der nicht so arg aufs mathematische rausläuft.
Nur wenn du zwischen P9 und P10 dann keine lineare Interpolation willst, solltest du diese Funktion mit P8 bis P10 berechnen, aber nur zwischen P9 und P10 die x-Werte abfragen.

Edit: Hab mal schnell ein Testprogg gecodet und zur Veranschaulichung die Ausgabe angehängt. Blau ist linear, Rot ist eine Newtoninterpolation über alle 10 Stützpunkte, Hellgrün ist die Interpolation mit immer 3 Punkten zusammengefasst.
Man müsste deutlich sehen können, wie Newton mit allen Punkten viel zu stark schwankt und Extremstellen hat, wo keine Punkte mehr sind. Die stückchenweise Interpolation erzeugt zwar einige Haken, ist dafür wesentlich präziser und erzeugt an den anderen Stellen schon weiche Übergänge.

MfG


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 01, 2007 18:13 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
gut,. Also du schlägst vor die Polynominterpolation auf Newtonbasis zu nehmen. Aber nicht über 10 Punkte wegen den zu starken schwankungen, sondern nur über 3.
d.h. 1 funktion über P1 - P3 die 2. funkteion von P3 - P6 , dann eine von P6-P9 und von P9 - P10 dann eben linear ?!


Gutgut. werd mit mal den Code reinziehen. Danke nochmal :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 01, 2007 21:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
simon1988 hat geschrieben:
gut,. Also du schlägst vor die Polynominterpolation auf Newtonbasis zu nehmen. Aber nicht über 10 Punkte wegen den zu starken schwankungen, sondern nur über 3.

Wenn dich diese Hakenbilden dabei nicht stört, ansonsten wäre kubische Splineinterpolation wohl nötig. Ich weiß nicht, wie die Haken aussehen, wenn man das Verfahren wie besprochen für HeightMaps nutzt, richtig schön glatt wirds dabei halt nicht. Aber zumindest so finde ich geben sie ein realistisches Gefühl "hier ist ein Punkt". ;)

Zitat:
d.h. 1 funktion über P1 - P3 die 2. funkteion von P3 - P6 , dann eine von P6-P9 und von P9 - P10 dann eben linear ?!

Nicht ganz.
f1 über P1, 2, 3
f2 über P3, 4, 5
f3 über P5, 6, 7
f4 über P7, 8, 9
f5 über P8, 9, 10
aber f5 nur zwischen 9 und 10 benutzen.

Zitat:
Gutgut. werd mit mal den Code reinziehen. Danke nochmal :)

Wenn du eine Anregung brauchst, kann ich dir auch noch mein kleines Testprogramm für das Bild geben. ;)

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 01, 2007 22:48 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Du meinst mit Hackenbidern diese Ausschweifen der Kurve ?
Ne ich find des doch eigentlich gut. Linear wäre doch etwas eckig .. so erhält die Landschaft etwas mehr realismus ?
oder nicht ?

Hast du dazu ein Bsp. Programm ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 02, 2007 01:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Mit Haken meine ich den Verlauf der grünen Kurve bei Punkt 3, 5, 7 und 9. Da entsteht eine Art Spitze.
Ich hab mal das Beispielprogg, das das Bild oben erzeugt hat, in Anhang getan; vielleicht hilft es, wenn du dir das mal anschaust.

MfG


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.017s | 18 Queries | GZIP : On ]