AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Fraktal-Raytracer, mein Lebenswerk :)
Thema durchsuchen
Ansicht
Themen-Optionen

Fraktal-Raytracer, mein Lebenswerk :)

Ein Thema von dizzy · begonnen am 1. Jul 2005 · letzter Beitrag vom 8. Aug 2007
Antwort Antwort
Seite 11 von 11   « Erste     91011   
Benutzerbild von dizzy
dizzy
Registriert seit: 26. Nov 2003
Hallo miteinander!

Heute Nacht ist es so weit. Ich stelle hier jetzt zum ersten Mal das Programm zur Verfügung, von dem ich seit ich programmiere träume. Es ist sicherlich noch nicht perfekt und auch nicht 100% fertig (welches Programm ist das schon ), aber es beinhaltet im Großen und Ganzen Freizeitarbeit die immer wieder mal sporadisch gemacht wurde, von nunmehr fast 4 Jahren. Vieles davon ging natürlich nicht direkt ein, da vieles Spielerein und Tests waren die mir beim Verständnis mancher Dinge weiter geholfen haben. Ich habe mit und an diesem Projekt so viel gelernt wie an keinem Programm zuvor.

Was tut dieses Dingsbums?
Es ist ein waschechter Raytracer der es (bisher ausschließlich) vermag sogenannge Quaternion-Fraktale zu rendern. Diese sind auf Basis von Quaternionen berechnet, die ihrerseits die Fortführung der komplexen Zahlen in die 4. Dimension sind. 3 davon nehme ich her, und stelle sie dar .

Das hier ist übrigends der (eigentlich einzige) Grund für meinen CQParser den ich hier vor einiger Zeit schonmal vorgestellt habe .

Ein paar Kleinigkeiten sein gesagt:
Ich bin mir darüber im Klaren, dass es zunächst nicht an allen Stellen gleich offensichtlich ist, welche Einstellung was bewirkt. Zu einer Doku muss ich mich noch durchringen (die auf Grund einiger Hintergrundinfos die ich gerne mitgeben würde recht umfangreich ausfallen müsste...). Durch Ausprobieren sollte sich aber vieles erschließen - SO kompliziert wie es oben klingt ist es nicht.
Ein Feature ist noch drin, dass durch eine Nachlässigkeit von ganz am Anfang übrig ist: Verstellt alles, aber NICHT die Kameraposition auf der x- und y-Achse! Auf z ist's okay, aber bei den anderen beiden wird schlicht falsch gepixelt . Das auszubügeln erfordert leider noch einen Rewrite einiger Kernteile.


Ich freue mich auf Meinungen, Bugreports und Feature-Vorschläge von meiner Lieblingscommunity (die nicht wenig daran beteiligt ist, dass ich überhaupt so weit kommen konnte )

\\Edit: Eine kleine Hilfe habe ich in diesem Beitrag hinzugefügt.
Miniaturansicht angehängter Grafiken
screenie_154.png  
Angehängte Dateien
Dateityp: zip fract-pics_106.zip (1,85 MB, 493x aufgerufen)
Dateityp: zip qed_783.zip (297,7 KB, 588x aufgerufen)
INSERT INTO HandVonFreundin SELECT * FROM Himmel
 
Nicodius

 
Delphi 2006 Architect
 
#101
  Alt 2. Apr 2006, 15:21
nett wer noch bei den render gschichtl eine checkbox zu machen dass die größe imemr proportional bleibt (640, 460 wird zu 320/230 zB)


super progamm
Nico Müller
  Mit Zitat antworten Zitat
bastischo

 
Delphi 7 Personal
 
#102
  Alt 2. Apr 2006, 23:42
Ich hab auch mal was gemacht:

http://i18.photobucket.com/albums/b1...scho/morph.gif

oder soll ich es in den Anhang packen??

wenn ich jetzt noch wüsste, wie das zustande kam...
ich glaube, ich hab y kleiner werden lassen und das ganze dann noch gedreht.
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23
 
#103
  Alt 29. Apr 2006, 15:54
Hi Leite

ich bin ein großer Fan von Raytracern, ich find die Bilder auch echt Klasse (obwohl wenig sinnvoll) Fetten Respekt an dizzy!!!

Nur dizzy, wenn du schon solche mathematischen Kunststücke wie 3D-Fraktale aufführst find ich das mit den "Z-Samples" ziemlich primitiv. Kann man da nicht irgendwie mathematich den Schnittpunkt finden??? Ich bin bisher immer davon ausgegangen, dass man das so macht. Naja, wenn das bei den Fraktalen nicht wirklich geht solls mir auch Recht sein .

Greetz Snuffi
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#104
  Alt 29. Apr 2006, 19:16
Zitat von SnuffMaster23:
Kann man da nicht irgendwie mathematich den Schnittpunkt finden??? Ich bin bisher immer davon ausgegangen, dass man das so macht. Naja, wenn das bei den Fraktalen nicht wirklich geht solls mir auch Recht sein .
Vielen Dank für dein Lob

Für gewöhnlich macht man es tatsächlich so, dass man einen Schnittpunkt des Strahls mit der Oberfläche direkt errechnet. Das setzt allerdings voraus, dass überhaupt eine Oberfläche existiert! Streng genommen haben Fraktale eine solche nämlich garnicht. Das ist zunächst mal etwas verwirrend, da ja eine Fläche sichtbat ist, aber ein voll ausdefiniertes Fraktal (mit diskreter Mathematik überhaupt nicht möglich) verhält sich da schon sehr anders.
Am ehesten kann man ein Fraktal noch als skalares Feld erklären, bei denen eine explizite Flächenbestimmung auch nicht so ohne Weiteres möglch ist (-> Blobs/Metaballs sind ähnlich beim Raytracen). Bei Polygonobjekten gestaltet sich das erheblich einfacher: Du hast einfach Punkte, die schon fertige Flächen definieren. Damit zu schneiden ist einfach. Ebenfalls sind parametrische Figuren (Kugeln z.B. die nur als Formel angegeben werden) sehr einfach, da die Formeln die Oberfläche explizit, und in jedem Punkt vollständig beschreiben.
Bei einem Fraktal kannst du im Grunde nur so vorgehen: Ich nehme mal Punkt (x, y, z) und teste ob er zum Fraktal gehört*. Was nicht geht ist: Ich nehme Gerade G und schaue an welchem Punkt diese das Fraktal schneidet (abgesehen davon ist ein Fraktal volumetrisch - d.h. es ist "gefüllt" und nicht wie eine Kugel nur eine unendlich dünne Hülle. Man würde, wäre es möglich, also ohnehin oftmals unendlich viele Schnittpunkte erhalten).

*Selbst dieser Test ist nicht vollständig möglich, da dies über ein unendlich andauerndes iteratives Verfahren gemacht wird (was überhaupt erst das Wesen der Fraktale ausmacht). Man muss also bei einer beliebigen Genauigkeit abbrechen, und dann entscheiden ob der Punkt dazu gehört, oder nicht. (Diese Genauigkeit wird über die Eigenschaft "Iterationen" geregelt.)


Ich muss mal wieder Zeit und Muße finden in diese Richtung weiter zu machen

Schönen Gruß,
Fabian
Fabian K.
  Mit Zitat antworten Zitat
Dax
 
#105
  Alt 29. Apr 2006, 19:19
Hey, dich gibts ja noch Lange nichts mehr von dir gehört..

@Snuffmaster: schade das ichs erst so spät bemerkt hab das du was geschrieben hast, sonst hättest du dizzys Antwort in kurz bekommen^^ Ich habs auch schon versucht das mal in diese Richtung fortzutreiben, ist jedes mal gescheitert. Rat mal warum
  Mit Zitat antworten Zitat
EDatabaseError

 
Delphi 2007 Professional
 
#106
  Alt 29. Apr 2006, 21:50
echt super Programm!
Tobias
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23
 
#107
  Alt 30. Apr 2006, 10:03
@Dax: Höhere Mathematik?

Genau das hab ich gemeint mit
Zitat von SnuffMaster23:
Naja, wenn das bei den Fraktalen nicht wirklich geht solls mir auch Recht sein .
Aber kann man bei dem Fraktal nicht irgendwie Oberfläche und "Füllung" auseinanderhalten? So nach der Art "Auf der einen Seite is was, auf der anderen nix => Oberfläche". Ich weiß, nicht die eleganteste Lösung. Bei "normalen" Primitiven wie z.B: ner Kugel wär es außerdem auch schön, wenn die volumetrisch wären, wenn man sie durchsichtig machen will. Glas ist sonst sehr schwer darzustellen wenn der Strahl vorne in die Kugel reingeht, drinnen "in der Luft hängt" und ungedämpft weitermarschiert und hinten wieder raus kommt. OK, bei ner Kugel gehts grad noch, aber versuch mal ein Weinglas darzustellen...

Snuffi
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

 
Delphi 7 Enterprise
 
#108
  Alt 30. Apr 2006, 21:05
Zitat von SnuffMaster23:
Aber kann man bei dem Fraktal nicht irgendwie Oberfläche und "Füllung" auseinanderhalten? So nach der Art "Auf der einen Seite is was, auf der anderen nix => Oberfläche".
Nicht direkt. Das Problem ist nun, dass du ja über kein explizites Verfahren auf einen Punkt der "Oberfläche" kommst (die ja eigentlich nicht existiert...). Mein Raytracer macht es daher so:
  1. Einen Strahl schrittweise nach vorne abtasten
  2. Sobald ein Punkt auf einmal zu dem Fraktal gehört:
    Einen halben Schritt zurück, und schauen obs da noch immer so ist.
    - Wenn ja: Schritt nochmals halbieren, zurück, und testen
    - Wenn nein: Schritt nochmals halbieren, vorwärts, und testen
  3. Bei einer beliebigen Genauigkeit aufhören, und so tun als sei der letzte getestete Punkt ein Punkt der Oberfläche.

Das Verfahren nennt sich Bisektion, und schließt sich an die sampleweise Tiefensuche zur Verfeinerung an. Dadurch lässt sich die Samplemenge erheblich reduzieren. Eine weitere Reduktion mache ich darüber, dass man nachdem man ein Punkt getestet hat, abschätzen kann, wie nahe dieser dem Fraktal nun war. Je näher ich komme, desto enger mache ich die Samples. Somit werden Bereiche in denen der Strahl nichts trifft sehr schnell abgehandelt, und nur dort wo es nötig ist wird mit großer Genauigkeit gearbeitet.
Während all meiner Nachforschungen (die sich wie im Eingangsposting erwähnt in rund 4 Jahren abspielten) bin ich auf kein effizienteres Verfahren gestoßen, ohne dass man den genauen Typ des Fraktals im Vorfeld kennt (bzw. auch dann wären nur minimale Optimierungen möglich), und nicht erhebliche Teile des Fraktals "verpasst". (Das "Punkt-Ist-Nah-Dran"-Verfahren schreib ich mir hierbei sogar selbst auf die Fahne, die Bisektion macht POVRay genau so (aus deren Sourcen abgeschaut )).
Explizite Oberflächenberechnung ist, Volumen hin oder her, leider nicht möglich. (Dann wäre das ganze Thema imho auch ne ganze Ecke langweiliger ^^.)
Wenn du dich mal in das Thema Fraktale einliest, wirst du imho schnell merken wo da der Hund begraben liegt


@Dax: Joa, ich bin nach wie vor zur Zeit mit delphi-loser Uni und Arbeit so weit ausgefüllt, dass die Freizeitprogrammierung leider sehr wenig Raum hat . Folglich müssen die wirklich interessanten Themen, die ich bevorzugt mit Delphi angehe, warten


Gruss,
Fabian
Fabian K.
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23
 
#109
  Alt 1. Mai 2006, 12:08
Naja, Fraktale sind jetzt nicht so mein Spezialgebiet, ich glaub dir das jetzt einfach
Ich weiß ungefähr so viel über Fraktale, dass sie selbstähnlich sind und dass man natürliche Strukturen wie z.B. einen Baum oder eine Felsoberfläche als einigermaßen fraktal ansehen kann.
  Mit Zitat antworten Zitat
Benutzerbild von Merlin2001
Merlin2001

 
Delphi 7 Personal
 
#110
  Alt 8. Aug 2007, 23:18
Hey, bin grad zufällig auf meinem unaufgeräumten Desktop wieder über QED gestolpert!

Nach etwas Rumspielerei wollte ich mal fragen, ob es denn inzwischen eine neue Version gibt?
(In der man die Einstellungen speichern kann und die evtl. eine kleine Hilfe beinhaltet )
Würde gern über Neuigkeiten erfahren!

Mit von QED begeisterten Grüßen
Marcus
Marcus Mangelsdorf
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 11 von 11   « Erste     91011   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.
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