2011-01-11 10 views
7

Zuerst starten wir mit meinem Mathe-Hintergrund. Ich habe die Infinitesimalrechnung I - IV und Differentialgleichungen genommen. Ich habe ein Computergrafikkurs im ersten Semester absolviert, in dem wir so ziemlich unsere eigene Grafikpipeline inklusive Shading mit Phong ohne Grafik-API implementiert haben.Computer Graphics: Mathe zu Code

Ich nehme in diesem Semester einen Fortgeschrittenenkurs für Computergraphik und wenn ich die Mathe lese, verliert er mich. Diese Klasse ist im Grunde eine Bildsynthetisierungsklasse. Wir werden in unserem ersten Projekt einen Ray-Tracer bauen und von da an darauf aufbauen.

Beim Lesen von fortgeschrittenen Computergrafiken bekomme ich normalerweise eine Menge Mathe. Ich verstehe Computergrafik ist Mathe schwer, aber ich habe Probleme, wenn ich genau herausfinden möchte, wie ich die Mathematik in Code implementieren soll. Ich werde wirklich den Dreh rausholen müssen, um CG zu übertreffen.

Zum Beispiel dieser Artikel von GPU Gems: http://http.developer.nvidia.com/GPUGems/gpugems_ch01.html Es gibt eine Reihe von Mathe, aber ich habe keine Ahnung, wo die Umsetzung der Mathematik zu starten, wenn ich will.

Also, gibt es etwas, das ich vermisse? Soll ich mir die Mathematik ansehen und den Code ableiten können? Gibt es Tutorials/Bücher, die mir helfen könnten zu verstehen, was ich tun muss?

+3

Wie viel lineare Algebra hast du genommen? Die meisten Computergrafiken sind lineare Algebra. –

+0

Ich habe auch lineare Algebra genommen.Ich habe vergessen, das zu erwähnen. Ich habe nie Probleme mit der linearen Algebra, es sind die komplexen Integrale und wie man sie in Code umsetzt. – Oscar

+1

Ich sehe keine komplexen Integrale in diesem Artikel. Mit welchem ​​Teil hast du Probleme? –

Antwort

0

Dieser Artikel verwendet FFTs oder tatsächlich inverse FFTs, um ein bewegliches Höhenfeld zu generieren. Lesen Sie mehr über FFTs. Um eine 2d zu machen, machen Sie zuerst 1d FFT für die Zeilen, dann die Spalten. Sobald Sie das Höhenfeld haben, werden die partiellen Ableitungen wahrscheinlich erhalten, indem die Differenz benachbarter Höhen entlang der x- oder y-Achse genommen wird, je nachdem, um welchen Teil es sich handelt. Auf einen Blick sehe ich keine Integrale, aber sie erscheinen in einigen Grafiken und es gibt Methoden, sie zu bewerten.

Ich kann auch über in etwa auf dem OmpF Forum suchen empfehlen: „studieren mehr Mathematik und Praxis“ jenseits geben kann http://ompf.org/forum/

+0

Nachdem ich es nochmal angeschaut habe, hat es keine Integrale. Ich habe immer noch Probleme mit dem Versuch, in Code zu übersetzen. Ich werde die Website überprüfen. – Oscar

0

Ein Tipp, den ich nur, dass einige mathematische Konstrukte im Code ein analoges Konstrukt im Allgemeinen haben sie nur möglicherweise nicht offensichtlich.

Integrale (und Summierungen) werden oft als Schleifen im Code oder als Summen zwischen Frames realisiert (in Grafiken ist dies oft der Fall). Derivate und Partialtypen sind Änderungen zwischen Werten, die sich typischerweise als Deltas über Rahmen oder zwischen einzelnen Elementen wie Pixeln manifestieren.

Diese Regeln halten nicht 100%, aber wenn Sie beginnen können, die gröberen mathematischen Elemente in Bezug darauf zu sehen, welchen Code sie erzeugen, wird es leichter zu absorbieren. Es ist wichtig, von einer soliden Grundlage zu arbeiten, also stellen Sie sicher, dass Sie die Grundlagen haben und der Rest kommt mit Erfahrung und Übung.

1

Programmieren für die Art von Mathe, die Sie in den GPU-Gems Artikel sehen, würde in der Regel unter numerische Analyse fallen. Die mehr angewandte Seite der numerischen Analyse würde in einem Kurs oder Buch über numerische Methoden oder wissenschaftliche Programmierung behandelt werden. Ich würde vorschlagen, beginnend mit dem wikipedia-Artikel auf numerical analysis und einige der spezifischen verbundenen Artikel zu betrachten. Sobald Sie die Namen einiger relevanter Methoden kennen, ist der Beispielcode leicht zu finden.

Ein Tipp: Ein großer Teil der Implementierung von Derivaten und Integralen ist wirklich nur lernen, wie Sie mit den Grenzen (im mathematischen Sinne) in Ihren Programmen umgehen. Oft wird das nicht explizit gesagt.