Hallo,
ich hoffe ich poste meine Frage im richtigem Forum. Ich bin gerade dabei meine Datenstruktur für meine erste kleine reine Software 3D-Engine zu planen und mir stellt sich die Frage, ob ich die Koordinaten meiner Modelle normiert auf 1 speichern und laden soll, und sie später skaliere oder ob ich gleich mit der richtigen Skalierung arbeiten soll?
Vielleicht könnte mir einer die Vor- und Nachteile der Methoden aus der Praxis erläutern? Ich will die Engine auch FixedPoint freundlich halten, falls dies für die Entscheidung eine Rolle spielt.
Modelkoordinaten normiert speichern oder nicht?
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
-
- Beiträge: 16
- Registriert: 24.11.2012, 06:41
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Modelkoordinaten normiert speichern oder nicht?
Rein Software? Hm.
Ich arbeite zwar selber im Augenblick an Festkommaphysik, aber ich weiß nicht, wie es um die momentane Leistung von Integer-SSE steht; darum möchte ich die Leistung mal außen vor lassen.
Wenn man die Verfügbarkeit passender Bibliotheken ebenfalls ignoriert (tan() in Festkomma? Eeeeew!), ist Festkomma definitiv die „richtige“ Wahl. Richtig in dem Sinne, dass es das minimale und einfachste Datenformat ist, das deine Koordinaten halten kann:
Dafür ist die Skalierung definitiv der richtige Weg, weil du sonst
Bedenk, dass du bei Gleitkommazahlen keinen Vorteil aus der Normierung ziehst; wegen der zusätzlichen Rechenoperationen wahrscheinlich sogar eher einen winzigwinzigkleinen Nachteil.
tl;dr: Ja!
Ich arbeite zwar selber im Augenblick an Festkommaphysik, aber ich weiß nicht, wie es um die momentane Leistung von Integer-SSE steht; darum möchte ich die Leistung mal außen vor lassen.
Wenn man die Verfügbarkeit passender Bibliotheken ebenfalls ignoriert (tan() in Festkomma? Eeeeew!), ist Festkomma definitiv die „richtige“ Wahl. Richtig in dem Sinne, dass es das minimale und einfachste Datenformat ist, das deine Koordinaten halten kann:
- Du brauchst den hohen Dynamikumfang von Gleitkommazahlen nicht, weil deine Koordinaten eine relative geringe Reichweite haben.
- Du brauchst die exponentielle Verteilung von Gleitkommazahlen nicht, weil deine Koordinaten relativ gleichverteilt sind.
- Durch diese Entschlackung kommst du möglicherweise mit 16- oder 8-Bit-Zahlen für deine Koordinaten aus, halbierst oder viertelst also den Speicherbedarf und kannst den Cache-Durchsatz entsprechend erhöhen.
Dafür ist die Skalierung definitiv der richtige Weg, weil du sonst
- entweder ein Festkommaformat bräuchtest, das die Reichweite aller Koordinaten aller Modelle abdeckt (und damit entweder verschwendet oder Verlust verursacht); oder
- jedem Modell ein eigenes Festkommaformat zuweisen müsstest, was im Grunde dasselbe wie ein Skalierfaktor ist, nur komplizierter und darum nicht erstrebenswert.
Bedenk, dass du bei Gleitkommazahlen keinen Vorteil aus der Normierung ziehst; wegen der zusätzlichen Rechenoperationen wahrscheinlich sogar eher einen winzigwinzigkleinen Nachteil.
tl;dr: Ja!
-
- Beiträge: 16
- Registriert: 24.11.2012, 06:41
Re: Modelkoordinaten normiert speichern oder nicht?
Danke für deine äußerst ausführliche Antwort , du hast mit sehr geholfen. Ich werde deine Vorschlag annehmen und normiert arbeiten. OpenGL oder DirectX sind derzeit noch kein Thema. Ich möchte gerne selbst 3D programmieren und erst danach mich den schon in Hardware fertig implementierten Sachen widmen. Es ist ja auch mehr nur ein Lernprojekt um die 3D-Programmierung von der Pike auf mal selbst gemacht zu haben.