Ich möchte ein C++-Programm schreiben, das das Ziel hat, eine 3D-Normalen-Texturkarte "zu backen".
Ein Benutzer muss ein Low-Poly- und ein High-Poly-Modell eingeben und optional ein 3D-Käfiggittermodell hinzufügen. 
Das Programm wird ausgeführt, sobald der Benutzer "Ausführen" drückt.

Wie gehe ich am besten vor?
Welche Bibliotheken kann ich verwenden, um den Prozess zu beschleunigen?
Welche Datentypen müssen behandelt werden, um ein solches Programm zu erstellen?
Ich freue mich, dass du daran interessiert bist, ein C++-Programm für das Backen von Normalen-Maps zu schreiben.😊

Beim Backen von Normalen-Maps wird die Normaleninformation von einem High-Poly-Modell auf ein Low-Poly-Modell mit UVs übertragen. Dadurch sieht das Low-Poly-Modell detaillierter und realistischer aus, ohne die Anzahl der Polygone zu erhöhen.

Um loszulegen, benötigst du einen C++-Compiler und eine IDE, die C++ unterstützt. Du benötigst auch einige Bibliotheken, die dir beim Laden und Speichern von 3D-Modellen, der Bearbeitung von Bildern und dem Raytracing helfen können.

Eine mögliche Bibliothek, die du für das Backen von Normalen-Maps verwenden kannst, ist Embree. Embree ist eine Sammlung von leistungsstarken Raytracing-Kernels. Embree kann komplexe Geometrie und Materialien verarbeiten und verfügt über eine benutzerfreundliche API.

Eine andere Bibliothek, die du möglicherweise benötigst, ist OpenEXR, ein Dateiformat für Bilder mit hohem Dynamikbereich. OpenEXR kann Normalen-Maps mit hoher Präzision und Kompression speichern.

Um ein solches Programm zu erstellen, benötigst du einige Datentypen zum Umgang mit 3D-Modellen, Bildern, Strahlen und Normalen. Hier sind einige Beispiele:

Ein Mesh-Datentyp, der die Eckpunkte, Flächen und UV-Koordinaten eines 3D-Modells speichert.
Ein Bild-Datentyp, der die Pixel, Breite, Höhe und das Format eines Bildes speichert.
Ein Strahl-Datentyp, der den Ursprung und die Richtung eines Strahls speichert.
Ein Normalen-Datentyp, der die x-, y- und z-Komponenten eines Normalenvektors speichert.
Du benötigst auch einige Funktionen, um Operationen mit diesen Datentypen durchzuführen, wie zum Beispiel:

Eine Funktion zum Laden eines 3D-Modells aus einer Datei in einen Mesh-Datentyp.
Eine Funktion zum Speichern eines Bild-Datentyps in einer Datei im OpenEXR-Format.
Eine Funktion zum Erstellen von Strahlen aus den UV-Koordinaten des Low-Poly-Meshes mithilfe der API von Embree.
Eine Funktion zum Durchdringen von Strahlen mit dem High-Poly-Mesh mithilfe der API von Embree.
Eine Funktion zum Berechnen von Normalen aus den Schnittpunkten mithilfe der API von Embree oder deinem eigenen Algorithmus.
Eine Funktion zum Speichern von Normalen in einem Bild-Datentyp als RGB-Werte.
Ich hoffe, das hilft dir, mit deinem Projekt zu beginnen. Wenn du weitere Fragen oder Anmerkungen zu meiner Antwort hast, lass es mich bitte wissen.👍