Seite 1 von 1

Paper: Mathematische Grundlagen der 3D-Grafik

Verfasst: 01.03.2009, 23:07
von klickverbot
Na dann wollen wir uns einmal bemühen, dem neuen Forum Leben einzuhauchen :)
Gibt es schon Pläne, wann es das alte ersetzen wird?

Wie dem auch sei, ich habe in den letzten Monaten als Teil meiner immer näher kommenden
Matura eine Fachbereichsarbeit im Gegenstand Mathematik verfasst, und zwar zum Thema
»Mathematische Grundlagen der 3D-Grafik«.

Für jeden, der sich schon ein bisschen näher mit den mathematischen Zusammenhängen hinter
der 3D-Grafik beschäftigt hat, wird wohl kaum Neues dabei sein, zumal der Fokus der Arbeit
ausdrücklich auf den mathematischen Grundlagen liegt. All die interessanten Algorithmen, die
über die bloße Transformation eines Modells in das Bildschirmkoordinatensystem hinausgehen,
kommen also gar nicht zur Sprache.

Vielleicht kann aber trotzdem der ein oder andere etwas damit anfangen, zum Beispiel ist es
mir meinem Empfinden nach gelungen, die Formeln zur Quaternionenrotation recht anschaulich
zu erläutern und zu beweisen.

Die Arbeit ist hier als PDF abrufbar, über Hinweise auf Fehler, Ungenauigkeiten und
Verbesserungsvorschläge würde ich mich freuen.

Beim Erstellen des Beispielprogramms (ein trivialer Software Rasterizer) habe ich übrigens
mehr Zeit mit dem Umgehen von Compiler-Bugs verbracht als mit dem eigentlichen Schreiben
von Code. Hoch lebe die Toolchain von D! :roll:

Ein Auszug aus dem Inhaltsverzeichnis:
Vorwort
  1. Einleitung
  2. Mathematische Grundlagen
    1. Vektoren
    2. Matrizen
      1. Addition
      2. Multiplikation
      3. Transformation von Vektoren
      4. Transposition
      5. Determinante
      6. Inverse Matrix
    3. Quaternionen
  3. Grundlagen der 3D-Grafik
    1. Modellierung
      1. Geometrie
      2. Oberflächeneigenschaften
      3. Texturen
    2. Rendering
      1. Koordinatentransformationen
      2. Rasterung
    3. Umsetzung in Hardware
  4. Objekt-Transformationen
    1. Skalierung
    2. Translation
    3. Rotation
      1. Rotation um die Koordinatenachsen
      2. Eulersche Winkel
      3. Rotationsmatrix aus transformierten Basisvektoren
      4. Darstellung als Quaternion
  5. Betrachtungstransformationen
    1. View Matrix
    2. Projection Matrix
  6. Ausblick
  1. Beispielprogramm

Re: Arbeit: Mathematische Grundlagen der 3D-Grafik

Verfasst: 02.03.2009, 16:01
von Aramis
Hallo klickverbot, willkommen im neuen Forum und vielen Dank dass du uns an deiner Arbeit teilhaben lässt :-)

Gerade Einsteiger suchen immer wieder nach einer vernünftigen und Zusammenfassung der 3D-Mathematik, ich denke hier werden sie fündig. Was mir persönlich besonders gefällt ist dass Du neben der Theorie auch den Praxisbezug nicht vernachlässigst und grade solche häufigen Stolpersteine wie die korrekte Transformation von Normalenvektoren ansprichst. Achja, und die Auswahl der von Dir verwendeten externen Bibliotheken hat auch was :-)

Wie ich sehe hast Du einen vollständigen Port von Assimp-C nach D ... hättest Du eventuell Lust diesen in Kern-Assimp einzugliedern und auch in Zukunft bei eventuellen API-Änderungen zu pflegen? Ich kann nicht abschätzen wie groß das Interesse an D ist oder in Zukunft sein wird, aber nachdem Du Dir schonmal die Arbeit gemacht hast fände ich es schade wenn andere davon nicht profitieren können. Natürlich nur wenn Du willst :-)

Alex, der mal den Namen eines heldenhaften Musketiers trug


PS:
Ich hab durch Zufall einen kleinen Rechtschreibfehler gefunden ... jedenfalls denke ich dass es auch in Österreich einer ist (Seite 46)
mehr oder weniger verbreitete Modell und Texturformate unterstüzt

Re: Arbeit: Mathematische Grundlagen der 3D-Grafik

Verfasst: 02.03.2009, 22:38
von klickverbot
Hallo Alex,

den »Port« von Assimp nach D würde ich nicht als solchen bezeichnen, ich habe für die Arbeit einfach die C-Header, die ich gebraucht habe, in D-Module umgewandelt. Nicht einmal die Kommentare sind angepasst…
Aber vielleicht habe ich demnächst einmal Zeit, sobald sich der momentane Stress ein bisschen gelegt hat.

Rechtschreib-/Tippfehler sind leider eher die Regel als die Ausnahme, aber ich hatte nicht mehr genug Zeit und ich habe irgendwie keine LaTeX-verträgliche Rechtschreibprüfung zum Laufen bekommen. Wenn ich irgendwann Zeit haben sollte, die Arbeit gründlich zu korrigieren, lade ich eine neue Version hoch...


PS.: Über die Sache mit dem Namen habe ich eine ganze Zeit lang nachdenken müssen :)

Re: Paper: Mathematische Grundlagen der 3D-Grafik

Verfasst: 31.03.2009, 19:35
von klickverbot
Ich habe mir endlich mal die Zeit genommen, um alle bekannten Fehler auszubessern.
--> Wenn ihr noch Tippfehler finden solltet, bitte ich um eine kurze Nachricht (es ist zwar jetzt nicht mehr wichtig, aber Perfektionismus muss sein^^).

Re: Paper: Mathematische Grundlagen der 3D-Grafik

Verfasst: 01.04.2009, 16:22
von eXile
Man ein kleines Feedback mit Anmerkungen, was so ein wenig zu kurz kam oder sonst auffällig war:
  • Wann besitzt ein Quaternion ein Inverses?
  • Wie sind das 0- und 1-Element des Quaternionen-Schiefkörpers definiert?
  • In 4.3 kommt durch spukhafte Fernwirkung plötzlich ein "M" und "M^-1" in die Formel hinein. Aber M muss nicht unbedingt invertierbar sein.
  • Der Übergang 4.7 nach 4.8 ist nicht wirklich eine "leichte Vereinfachung". Dabei muss man nämlich annehmen, dass Gleichung 4.7 für alle Vektoren v' gilt, also die beiden Matrizen auf beiden Seiten lineare Abbildungen darstellen, welche punktweise übereinstimmen. Damit müssen auch die darstellenden Matrizen der Abbildungen gleich sein, und somit gilt 4.8.
  • Im Absatz unter 4.14: "Die Translation ist offensichtlich keine lineare Transformation!". Vielleicht würde das doch durch ein Gegenbeispiel für die Eigenschaften linearer Abbildungen klarer werden.
  • In 4.27 gibts einen störenden Multiplikations-Punkt in der ersten Zeile der Matrix ;)
  • Eigentlich ist die Überschrift von Abschnitt 4.3.3 unpassend, weil es im Kern ja nicht um Rotationsmatrizen geht.
  • In 4.43 kann man die Klammer des Skalarteils weglassen (wird in 4.46 auch so gemacht).
  • Im Absatz unter 4.55: Wo ist q_{n-1}?
  • Formeln 4.60 bis 4.62: Irgendwie ist mir in keinster Weise klar, was da eingesetzt wurde, und wieso dort das rauskommt. Ah OK, du setzt n = (x,y,z)^T und x = (1,0,0)^T. Vielleicht dazuschreiben ;)
  • Generell hab ich fast überall Bauchschmerzen, wo du "distributiv" benutzt. Das mach eigentlich nur bei zwei zweistelligen Verknüpfungen Sinn, meist ist das aber an den Stellen nicht gegeben.
So weit, so gut ;)

Re: Paper: Mathematische Grundlagen der 3D-Grafik

Verfasst: 27.05.2009, 21:31
von klickverbot
Aus irgendeinem Grund hat die E-Mail-Benachrichtigung wohl nicht funktioniert, weswegen ich deine Antwort erst jetzt bemerkt habe.

Danke eXile jedenfalls für dein ausführliches Feedback – du hast übrigens mehr Fehler und Ungereimtheiten gefunden, als jeder, der sich die Arbeit bis jetzt »offiziell« durchgelesen hat. Ich werde die Fehler ausbessern und eine neue, hoffentlich weitgehend fehlerfreie Version online stellen ;)

Edith fragt sich, wie eine »mathematisch einwandfreie« Formulierung für den Übergang von Gleichung 4.7 zu 4.8 ausschauen würde. »Punktweise Übereinstimmung« sagt mir nämlich (peinlicherweise?) nichts…

Re: Paper: Mathematische Grundlagen der 3D-Grafik

Verfasst: 28.10.2009, 08:26
von Brainsmith
eXile hat geschrieben: Wann besitzt ein Quaternion ein Inverses?
Da der Quaternionenkörper (eigentlich ein Schiefkörper) die Körpereigenschaften erfüllt, außer dass die Verknüpfungen nicht kommutativ sind, hat jedes Element ungleich 0 ein Inverses.
eXile hat geschrieben:Wie sind das 0- und 1-Element des Quaternionen-Schiefkörpers definiert?
Man definiert hier eigentlich nur Einheiten. Einheiten sind Elemente aus der Menge, die ein Inverses haben. Zufälligerweise sind Körper Mengen, wo jedes Element, mit Ausnahme der 0 Einheiten sind. Aber das Neutralelement bzgl Multiplikation ist die 1, wenn du das wissen willst.
Kurz zu den Quaternionen:
Der ein oder andere kennt die Komplexen Zahlen. Das war der Versuch, eine Körperstruktur auf den reellen Zahlen zu bilden, wenn man Dimension 2 hat. sprich im R^2 hat man einfach ein paar Rechenregeln gefunden, die gepasst haben. so wurde die 1 der zweiten Komponente zur Wurzel von -1 definiert und tadaaa.. da waren die komplexen Zahlen. Das ganze hat man hier auch versucht, nur diesmal mit den komplexen Zahlen. sprich in C^2 wollte man verknüpfungen definieren, die auch wieder einen echten Körper bilden. Ging nur leider daneben.. geblieben ist dieser schiefkörper der Quaternionen. Schiefkörper halt deshalb, weil eigentlich jeder Körper kommutativ sein muss. Dieser Schiefkörper ists leider nicht.


der Übergang von 4.7 zu 4.8:
Man hat die Gleichheit gegeben und hat an beiden Seiten stehen, dass irgendwas mal v' = irgendwas anderes mal v' ist.
Das impliziert, dass die beiden Dinger vor v' gleich sein müssen ( unter der Voraussetzung, dass die Gleichung für alle v' gilt) und schaut sich nurnoch die an.
Dann transponiert man den ganzen Kram und dann steht das ergebnis auch schon da. Mit der Ausnahme, dass es besser passen würde, dass n' besser auf der rechten seite stehen würde und (M^-1)^T *n auf der linken. Dann wird evtl besser klar, wie das von statten geht.


Edit: ach ja... Lineare Funktionen werden in der Schule häufig als gleichung mit f(x)=ax+b Erklärt.. das ist aber nicht richtig. Solche Abbildungen sind Affin linear.. Der graph einer linearen Abbildung geht immer durch den Ursprung... Einfach gesprochen.. wer eine genaue definition haben will, sollte einfach laut danach rufen.. dann gebe ich ihm die antwort mit beispiel.. ^^

Re: Paper: Mathematische Grundlagen der 3D-Grafik

Verfasst: 28.10.2009, 09:03
von VizOne
Ich habe die Arbeit nicht im Detail gelesen, finde sie aber schon rein thematisch wirklich nützlich. Gute Sache also.

Allerdings ist mir aufgefallen, dass du Wikipediaartikel unter den Referenzen hast. Da dort jeder irgendetwas schreiben kann, ist Wikipedia als Quelle für Artikel mit wissenschaftlichem Anspruch ungeeignet (und richtiggehend verpönt), außer höchstens(!) als Zusatzmaterial zu anderen, qualifizierteren Quellen. Bessere Quellen zu den Themen, für die du Wikipedia verwendest, findest du sicherlich z.B. unter http://scholar.google.com

Re: Paper: Mathematische Grundlagen der 3D-Grafik

Verfasst: 29.10.2009, 20:19
von klickverbot
Brainsmith hat geschrieben:[…]Mit der Ausnahme, dass es besser passen würde, dass n' besser auf der rechten seite stehen würde und (M^-1)^T *n auf der linken. Dann wird evtl besser klar, wie das von statten geht.
Danke Fabian für die Anregung, ich habe gerade eine neue Version hochgeladen, in der ich auch einige Rechtschreibfehler ausgebessert habe.

@VizOne: Über die (Nicht-)Tauglichkeit von Wikipedia als Quelle für wissenschaftliche Arbeiten bin ich mir natürlich im Klaren. Da ich aber die Arbeit mehr oder weniger aus dem Gedächtnis heruntergeschrieben habe – dies war schließlich nicht meine erste Beschäftigung mit dem Thema – stand ich vor der skurrilen Situation, im Nachhinein noch »Quellen« suchen zu müssen. Zusätzlich kam noch dazu, dass es mein betreuender Lehrer nach seiner wörtlichen Aussage auch gutgeheißen hätte, wenn ich nichts als Wikipedia-Referenzen angegeben hätte. Da die drei Quellenangaben nicht unbedingt essentiell für die Arbeit sind, war mir die Literatursuche letztlich den Aufwand nicht wert. Wie dem auch sei: Zumindest hier in Österreich sind die meisten Gymnasiallehrer schon froh, wenn Quellen in einer Fachbereichsarbeit überhaupt korrekt (und vor allem: mit durchgängigem Stil) angegeben bzw. zitiert werden, meine Arbeit dürfte hier wohl zu den Konsequenteren zählen.

Übrigens: Durch diese Arbeit bin ich in den einmaligen Genuss gekommen, mir auf der Jahrestagung der Österreichischen Mathematischen Gesellschaft einige Vorträge über Zahlentheorie anzuhören (ich habe für die Fachbereichsarbeit den Schülerpreis der ÖMG erhalten) – Resümee: das ist eine ganz eigene Welt, und was für eine. Wenn ich überhaupt eine Chance habe, dass eine Analogie zum Compilerbau verstanden wird, dann wohl hier in diesem Forum: Ich habe den Vortrag zwar parsen können, aber die semantische Analyse hat schon in den Grundzügen völlig versagt… ;)