Ray-Tracing, Source Code

  • Hallo alle miteinander,


    Kennt jemand ein einfaches optisches Ray-Tracing Programm dass als Source Code verfügbar ist? Vorzugsweise Pascal, C oder Basic.


    Oder kennt jemand weitere Bücher wo die Algorithmen beschrieben werden? Ich habe bisher zwei gefunden, "Telescope Optics" von Rutten/Venrooij und "Modern Optical Engineering" von Warren J. Smith.


    Gruss
    Michael


    Nachtrag: In "Principles of Optics" von Born/Wolf steht auch was zu dem Thema, aber nicht viel. Die detaillierteste Beschreibung ist bislang die von Rutten/Venrooij, nur ist mir bei vielen Formeln noch nicht klar wie man darauf kommt. Da stehen nur die fertigen Formeln, aber leider nicht die Herleitung. Und leider gibt's die Software nicht als Source.

  • Hallo Michael,


    nehme die Formeln von H. Rutten und schreib Dir Dein Progrämmchen. So habe ich es vor vielen vielen Jahren auch gemacht. Damals in Pascal was heute leider nichtmehr unterstützt wird.


    Gruß
    Peter

  • Hallo Peter,


    > nehme die Formeln von H. Rutten und schreib Dir Dein Progrämmchen. So habe ich es vor vielen vielen Jahren auch gemacht. Damals in Pascal was heute leider nichtmehr unterstützt wird.


    Dann nimmt man eben Delphi, solange keine Grafik gebraucht wird sollte das kein Problem sein. Wenn doch Grafik, nun ja... dann muss man erst mal ein halbes Jahr objektorientierte Programmierung studieren :( ... welch ein Scheiss.


    Hast du dein Progrämmchen noch? Würde mir vielleicht einiges an Tipparbeit ersparen.


    Ist dir die Definition des "direction cosine" klar? Mir scheint als ob es da zwei widersprüchliche Definitionen gibt:
    Rutten/Venrooij: "Cosinus des Winkels zwischen Strahl und Achse"
    Warren J. Smith: "Projektion eines Einheitsvektors auf die Achse"


    Die zweite Definition scheint mir sinnvoller, aber H. Rutten wird einen Grund gehabt haben warum er es anders definiert hat.


    Gruss
    Michael

  • Hallo Leute,



    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote">Wenn doch Grafik, nun ja... dann muss man erst mal ein halbes Jahr
    objektorientierte Programmierung studieren :( ... welch ein Scheiss.<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
    Ganz so schlimm ist es nicht, mit entsprechenden Libraries ist das alles
    relativ einfach.
    Eine gute Quelle befindet sich auf http://www.gamedev.net
    hier wird unter Resources-&gt;Resources&Articles alles mögliche zur grafischen Programmierung beschrieben, zum Teil mit Source!


    mfg Wolfgang

  • Hallo Wolfgang,


    &gt; Ganz so schlimm ist es nicht, mit entsprechenden Libraries ist das alles relativ einfach.
    Eine gute Quelle befindet sich auf http://www.gamedev.net
    hier wird unter Resources-&gt;Resources&Articles alles mögliche zur grafischen Programmierung beschrieben, zum Teil mit Source!


    Interessanter Link, aber da steht ziemlich viel und ich habe keine Lust das alles durchzulesen. Ein konkretes Beispiel wäre schon ganz hilfreich. Nehmen wir mal an ich möchte unter Delphi ein Fenster öffnen, und in dieses Fenster möchte ich beispielsweise ein Pixel in einer bestimmten Farbe setzen, oder eine Linie zeichnen, oder einen Text an eine bestimmte Stelle schreiben.
    Bei meinen ersten Versuchen mit Delphi (liegt schon ein paar Jahre zurück) habe ich bei dieser scheinbar einfachen Aufgabe nach 2 Wochen frustriert aufgegeben. Mit dem guten alten Turbo Pascal lässt sich diese komplizierte Sache problemlos in einer Minute programmieren.


    Gruss
    Michael

  • Hallo Wolfgang,


    &gt; Bin leider kein Experte in Delphi,


    ich auch nicht.


    &gt; arbeite hauptsächlich mit Eclipse/C++ (übrigens sehr empfehlenswert). Bei Interesse kann ich da mal C++ Source hochladen!


    Ich habe aber zur Zeit leider keinen C++ Compiler. Programmierung in "C" ist kein Problem, nur mit dem "++" habe ich Probleme.


    Gruss
    Michael

  • Hallo Wolfgang,


    &gt; Hier hab ich noch was für Delphi gefunden: http://www.dsdt.info/tipps/


    danke für den Tip, das scheint mir ganz nützlich zu sein.


    &gt; und das mit dem "++" ist auch nicht so schlimm da die Übergänge von C fließend sind!


    na ja, ich habe eher den Eindruck dass es zwei völlig verschiedene Sprachen sind. Jedenfalls verstehe ich bei "C" eigentlich alles und bei "C++" gar nichts.


    Gruss
    Michael

  • Hallo Michael,


    leider hat es kaum einen Sinn Dir das Programm zu geben, da ich es vor vielen Jahren mit einem zusätzlichen Graphik Tool für eine Graphikkarte geschrieben habe und nun bei den heutigen Betriebssystemen das nichtmehr läuft.
    So verrückt wie es ist, habe ich nur wegen diesem alten aber für mich wichtigen Optikprogramm einen alten PC unter DOS 6.22 / WIN-98SE noch in Betrieb.
    Ob ich mal die Zeit finde und es auch unter WIN-XP lauffähig zu machen .... ?


    Gruß
    Peter

  • Hallo Peter,


    &gt; leider hat es kaum einen Sinn Dir das Programm zu geben, da ich es vor vielen Jahren mit einem zusätzlichen Graphik Tool für eine Graphikkarte geschrieben habe und nun bei den heutigen Betriebssystemen das nichtmehr läuft.


    Ich wäre trotzdem daran interessiert. Für das was ich berechnen möchte brauche ich keine grafische Ausgabe. Der Turbo Pascal Compiler ist vorhanden, und eine Umsetzung auf Delphi wäre auch kein Problem solange man keine Grafik braucht.
    Was für eine Grafikkarte ist es denn? Für ET4000 hätte ich auch so ein Tool.


    &gt; So verrückt wie es ist, habe ich nur wegen diesem alten aber für mich wichtigen Optikprogramm einen alten PC unter DOS 6.22 / WIN-98SE noch in Betrieb.


    Das kann ich gut nachvollziehen. Bei mir läuft auch noch einiges auf einem alten DOS Rechner, aus dem einfachen Grund weil sich viele Probleme mit Turbo Pascal VIEL schneller lösen lassen als mit irgendwelchen "modernen" Programmiersprachen unter Windows.


    Nochmal zurück zu den Formeln in Kapitel 20.8 bei Rutten/Venrooij:


    Ich habe inzwischen rausgefunden wie Fig. 20.8 zu interpretieren ist. Die X0 Y0 Z0 Koordinaten sind in einem lokalen Koordinatensystem gegeben, und das ist nicht das gleiche Koordinatensystem dass für die XS YS ZS Koordinaten verwendet wird. Die beiden Koordinatensysteme sind entlang der Z Achse um die Strecke d verschoben. Es ist verwirrend wenn in einer Zeichnung zwei verschiedene Koordinatensysteme verwendet werden, und diese Tatsache nicht explizit erwähnt wird.
    Die Definition des "direction cosine" ist mir nach wie vor unklar.

    Gruss
    Michael

  • Hallo Jens,


    &gt; du suchste einen Raytrayer von dem auch der Source Code verfügbar ist? Da fällt mir nur POV-Ray (Persistence of Vision Raytracer) ein


    Das Wort "Raytracer" wird für zwei verschiedene Arten von Programmen verwendet:
    Da gibt es zum einen die Programme, die einen Strahl durch ein optisches System durchrechnen. Das Ergebnis kann in vielfältiger Form dargestellt werden, z.B. als Spot-Diagramm, als Wellenfront-Fehler, und es gibt noch viele andere Möglichkeiten.
    Die zweite Art von Programmen dient nur dazu ein möglichst realistisches Bild zu berechnen, indem ausgehend von einem "virtuellen Auge" die Lichtstrahlen rückwärts verfolgt werden und festgestellt wird von welchen Objekten diese Strahlen kommen, und den Objekten werden gewisse Eigenschaften wie Farbe, Reflektionsgrad, Streuung zugeordnet.


    Was ich suche ist ein Raytracer der ersten Art. Dein Link führt zu einem Programm der zweiten Art.


    Gruss
    Michael

  • <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote"><i>Original erstellt von: mkoch</i>
    <br />Hallo Jens,


    &gt; du suchste einen Raytrayer von dem auch der Source Code verfügbar ist? Da fällt mir nur POV-Ray (Persistence of Vision Raytracer) ein


    Das Wort "Raytracer" wird für zwei verschiedene Arten von Programmen verwendet:
    Da gibt es zum einen die Programme, die einen Strahl durch ein optisches System durchrechnen. Das Ergebnis kann in vielfältiger Form dargestellt werden, z.B. als Spot-Diagramm, als Wellenfront-Fehler, und es gibt noch viele andere Möglichkeiten.
    Die zweite Art von Programmen dient nur dazu ein möglichst realistisches Bild zu berechnen, indem ausgehend von einem "virtuellen Auge" die Lichtstrahlen rückwärts verfolgt werden und festgestellt wird von welchen Objekten diese Strahlen kommen, und den Objekten werden gewisse Eigenschaften wie Farbe, Reflektionsgrad, Streuung zugeordnet.


    Was ich suche ist ein Raytracer der ersten Art. Dein Link führt zu einem Programm der zweiten Art.


    Gruss
    Michael


    <hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">


    Hi Michael!


    das was du da schreibst ist nur zum teil richtig: richtig ist das raytracer immer einen lichtstrahl vom einer lichtquelle ausenden die dann von einer virtuellen kamera aufgefangen werden.


    Das zwiete was du da beschrieben hast sin sogn. scanline renderer und haben rein gar nix mit raytracern zu tun - die funktionieren komplett anders und können daher auch zum beispiel keine refraktions/reflektionsberechnungen durchführen (die zur berechnung eines teleskops z.b. genau genug wären) --&gt; diese renderer sind leider nicht zur simulation von lichtstrahlen geeignet


    Edit: ich war leider mit dem lesen wieder mal zu ungenau und hab überlesen dass dir der unterschied eh bewust ist: du hast recht, dass du "leider" für deinen verwendungszweck die rechenaufwendigere methoden - den raytracer - brauchst.


    clear skies
    günther

  • Hallo Michael,


    es gibt ein Sammlung von Tools (LightPipes), die unter der GPL stehen. Leider
    funktioniert die Homepage momantan nicht. Evtl hilft dir diese sehr kurze
    Beschreibung ja weiter: http://www.ceu.fi.udc.es/SAL/Z/4/LIGHTPIPES.html
    (Mir persönlich war das übrigens bei Weitem zu komplex und ich habe das
    Verfolgen einzelner Strahlen in einer Spiegeloptik für myNewton dann einfach
    selbst neu programmiert. Für ein echtes Raytracing Programm währe meine
    Methode aber viel zu langsam und sie kennt keine refraktiven Elemente)


    Soweit ich mich erinnere ist doch in der Formelsammlung auf deiner Seite so
    ziemlich alles vorhanden, was man braucht. Ich würde es einfach mal versuchen.


    &gt; Wenn doch Grafik, nun ja... dann muss man erst mal ein halbes Jahr objektorientierte
    &gt; Programmierung studieren


    Eigentlich ist das unter Windows wirklich sehr einfach
    1. Erstmal die ganzen tollen GDI-Features aus dem Kopf streichen
    2. DeviceContext holen (z.B. mit GetDC(...) )
    3 Zeichnen (z.B. MoveTo(x1, y1); LineTo(x2,y2) malt eine Linie von x1/y1 nach x2/y2
    Ähnlich einfach ist es auch unter KDE oder Gnome.


    &gt; Jedenfalls verstehe ich bei "C" eigentlich alles und bei "C++" gar nichts.


    Die grundlegenden Konzepte sind zwar sehr verschieden, die Syntax ist aber
    weitgehend gleich. So ziemlich jeder C Sourcecode kann auch als C++ compiliert
    werden.


    Ciao, Heiner


    Nachtrag:
    OpenRayTrace: http://sourceforge.net/projects/openraytrace
    Die Weiterentwicklung scheint etwas tot zu sein, aber die Bilder
    auf der Homepage (http://openraytrace.sourceforge.net/) sehen ja
    ganz nett aus.

  • Hallo Heiner,


    &gt; es gibt ein Sammlung von Tools (LightPipes), die unter der GPL stehen. Leider funktioniert die Homepage momantan nicht....


    da muss ich Gleb Vdovin mal eine e-mail schicken.



    &gt; Soweit ich mich erinnere ist doch in der Formelsammlung auf deiner Seite so ziemlich alles vorhanden, was man braucht.


    Na ja, da fehlt noch einiges. Konkret möchte ich die Reflektion an einer verkippten Asphäre durchrechnen. Die Formeln in Rutten/Venrooij sehen schon ganz brauchbar aus, ich wünschte nur er hätte die Herleitung der Formeln und die Randbedingungen etwas detaillierter beschrieben.


    &gt; Eigentlich ist das unter Windows wirklich sehr einfach
    1. Erstmal die ganzen tollen GDI-Features aus dem Kopf streichen
    2. DeviceContext holen (z.B. mit GetDC(...) )
    3 Zeichnen (z.B. MoveTo(x1, y1); LineTo(x2,y2) malt eine Linie von x1/y1 nach x2/y2


    ist notiert, werde ich bei Gelegenheit mal ausprobieren.


    &gt; Die grundlegenden Konzepte sind zwar sehr verschieden, die Syntax ist aber weitgehend gleich.


    Stimmt. Aber was nützt mir die Syntax wenn ich das Konzept nicht verstehe.


    Gruss
    Michael

  • Hi Michael


    &gt; Stimmt. Aber was nützt mir die Syntax wenn ich das Konzept nicht verstehe.


    Einfach nicht mehr an Algorithmen denken sondern an Objekte ;)


    Sicherheitshalber noch mal mein Nachtrag von oben:
    OpenRayTrace: http://sourceforge.net/projects/openraytrace
    Die Weiterentwicklung scheint etwas tot zu sein, aber die Bilder
    auf der Homepage (http://openraytrace.sourceforge.net/) sehen ja
    ganz nett aus.


    Ciao, Heiner

  • Hallo Michael,


    sieh mal im Repository (CVS) nach. Leider alles in Pyton,
    deshalb hab ich mir noch nicht richtig angesehen.
    ray_trace.py schein das Richtige/Wichtige zu sein.


    Ciao, Heiner

  • Hallo Heiner,


    &gt; sieh mal im Repository (CVS) nach. Leider alles in Pyton,
    deshalb hab ich mir noch nicht richtig angesehen.
    ray_trace.py schein das Richtige/Wichtige zu sein.


    ich stell mich jetzt vielleicht etwas doof an, aber gib mir mal einen Tip wo ich das finde.


    Gruss
    Michael

  • Hallo Leute,


    Für diejenigen unter euch die noch DOS-Programme am laufen haben, gibts
    einen Emulator für Windows und andere Betriebssysteme hier.
    Einfach mal ausprobieren, klappt allerdings nicht mit jedem Programm!


    mfg Wolfgang

  • Hallo alle miteinander,


    Nachtrag: Jetzt ist mir die Definition des "direction cosine" klar geworden. Ich hatte vorher einen Denkfehler gemacht.
    Die beiden verschiedenen Definitionen sind völlig gleichwertig. Es gibt keinen Widerspruch.
    Rutten/Venrooij: "Cosinus des Winkels zwischen Strahl und Achse"
    Warren J. Smith: "Projektion eines Einheitsvektors auf die Achse"
    Beam 3 Raytracer: "Projektion eines Einheitsvektors auf die Achse"


    Gruss
    Michael

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!