F
@patrickm123 sagte in Koordinatensysteme und Linien:
was waeren denn die naechsten schritte fuer eine graphics library, ein paar "einfache" sachen aus dem bereich geometric algorithms: https://en.wikipedia.org/wiki/Category:Geometric_algorithms ?
Ah, da geht die Reise hin. Gut zu wissen. Da würde es tatsächlich Sinn machen, sich erstmal darum zu kümmern, möglichst bequem ein wenig simple Lineare Algebra machen zu können. Matrix- und Vektorklassen für 2, 3 und 4 Dimensionen und ensprechende grundlegende Operationen (Addition, Multiplikation, Transponieren, Skalar- Kreuzprodukt, Matrix invertieren und sowas). Alternativ auch über eine Bibliothek reinholen (vielleicht glm oder sowas).
Als nächtses wäre es empfehlenswert, eine Datenstruktur zu bauen, mit der du ohne allzu grosse Verrenkungen auf die für solche Algorithmen interessanten Teile deiner Modelle/Graphen/Dreiecksnetze (Knoten, Kanten, Flächen) zugreifen und diese manipulieren kannst. Da bietet sich vielleicht eine Half-Edge-Datenstruktur an. Die ist sehr flexibel einsetzbar, allerdings machen für verschiedene Algorithmen auch verschiedene Datenstrukturen Sinn - das wird in der späteren Entwicklung möglicherweise nicht die einzige Datenstruktur bleiben. Für effizientes Rendering will man auch wohl eher simple Vertex- und Triangle-Lists haben, mit der man direkt die Grafikkarte füttern kann. Eine Idee wäre einmal Half-Edge zur Manipulation und einmal eine Vertex/Triangle-Repräsentation zum Rendern inklusive einer Konvertierung, mit der du beide Repräsentationen ineinander überführen kannst.
Bequemer geht das alles natürlich mit einer fertigen Library. CGAL kommt mir da z.B. in den Sinn. Die ist genau für solche Sachen gemacht und beinhaltet wohl auch schon die meisten Algorithmen, die du da vermutlich umsetzten willst. Auch wenn du es selbst machen willst, lohnt es sich die trotzdem mal anzusehen um eine Idee davon zu bekommen, wie so eine Bibliothek aussehen kann, wenn sie ausgewachsen ist und was man dafür alles braucht. Oder CGAL für Lineare Algebra und Datenstrukturen verwenden und die Algorithmen trotzdem damit selbst umsetzen.