Welches Genauigkeit von PI brauche ich für 3D-Grafik?
-
Hi,
PI wird ja heute bis auf Millionen von Stellen nach dem Komma berechnet, tatsächlich braucht es aber für die meisten Berechnungen nur recht wenige Stellen. Wie viele Stellen sind denn eurer Meinung nach für die Berechnung von 3D Grafik notwendig, also für Rotationen etc.?
-
Es kommt natürlich auch darauf an, welchen Fließkommazahltyp du verwendest und welche Genauigkeit der überhaupt erreichen kann.
Am Besten einfach so genau wie möglich im Typ speichern.
-
Lichtweite schrieb:
Wie viele Stellen sind denn eurer Meinung nach für die Berechnung von 3D Grafik notwendig, also für Rotationen etc.?
Die Unterstützung für doubles in Grafikkarten ist erst vor Kurzem überhaupt üblich geworden, und nutzen wird das quasi niemand. Im 3D Spielebereich werden fast ausschließlich floats genutzt. Kannst dir ja dann mal ausrechnen wie viele Stellen das sind.
-
<> Runde doch einfach auf 3 ab. Dann kannst du einen Integer verwenden und damit schneller rechnen. Hat die Bibel auch gemacht und die alten Chinesen damals auch. </>
-
Schreib doch einfach so viele Stellen hin, wie dein Compiler zulässt. Das executable wird dadurch nicht größer und der source code darf beim späteren Drübergucken auch mal zum Schmunzeln anregen.
-
Ich schreibe eine kleine 3D-Engine mit einem Software Rasterizer, also alles CPU-Only ohne jegliche Nutzung der 3D-Hardware, wo ich jeden Pixel selbst setze. Die Frage hat mich nur beschäftigt, da ich gerade die Konstanten für PI etc festlege und mich gefragt habe wie viele Stellen eigentlich notwendig sind.
-
Lichtweite schrieb:
Ich schreibe eine kleine 3D-Engine mit einem Software Rasterizer, also alles CPU-Only ohne jegliche Nutzung der 3D-Hardware, wo ich jeden Pixel selbst setze. Die Frage hat mich nur beschäftigt, da ich gerade die Konstanten für PI etc festlege und mich gefragt habe wie viele Stellen eigentlich notwendig sind.
Einfach soviel wie der Typ hergibt.
-
Ok danke für die Antworten, dann gibt es anscheinend darauf keine klare Antwort.
-
Lichtweite schrieb:
Ok danke für die Antworten, dann gibt es anscheinend darauf keine klare Antwort.
Wie kann die Antwort noch klarer sein als "so viel wie der Typ hergibt" + im 3D Bereich verwendet man üblicherweise float?
-
Ausreichend wäre sicherlich auch weniger, als ein float hergibt. Aber wozu willst du dich beschränken? Die Ziffern schreibst du genau ein einziges Mal in dein Programm (sogar bloß per C&P, sonst vertippst du dich bloß). Danach kostet es weder Mühen noch Laufzeit, sondern ist einfach bloß da.
Anders gefragt: Wieso willst du Pi runden?
-
SeppJ schrieb:
Pi runden?
das liegt in der Natur der Sache
-
Das hat nicht wirklich einen praktischen Nutzen für mich, sondern hat mich nur mal so interessiert. Wer z.B mit FixedPoint arbeitet muss sich ja auch zwangsläufig auf ein paar Stellen beschränken und mich interessiert halt ab welcher Stelle die Schwelle ist an der es zu Problemen kommen kann, also Ruckler zum Beispiel.
Wenn die Schwelle hier allerdings noch niemand probiert hat, kann auch niemand darauf konkret antworten. Meine Engine ist leider noch nicht so weit, als dass ich es schon selbst testen könnte und mit anderen will ich jetzt nicht rum spielen dafür.
-
Lichtweite schrieb:
Ok danke für die Antworten, dann gibt es anscheinend darauf keine klare Antwort.
Was ausreichend ist hängt stark davon ab welche Berechnungen du anstellst. Es gibt immer viele Möglichkeiten ein Problem anzugehen, man kann es doof machen oder schlau.
Wenn du es schlau machst ist für 3D Sachen float normalerweise ausreichend.
Wenn du es doof machst ist double zu wenig.
Dass in den Berechnungen Pi vorkommen oder nicht spielt dabei nicht wirklich eine Rolle.Und natürlich wirst du Pi mit der maximalen Genauigkeit des verwendeten Typs definieren - etwas anderes würde ja kaum Sinn machen.
-
Wieso fragst du nach Pi? Pi ist auch nur irgendeine Zahl wie jede andere auch.
Anstatt zu fragen "Welche Genauigkeit von PI brauche ich für 3D-Grafik?", kannst du fragen "Welche Genauigkeit von <Zahl> brauche ich für 3D-Grafik?".
Was eine Frage nach dem zu verwenden Datentypen ist: "Welche Genauigkeit brauche ich für 3D-Grafik?".Und das wurde schon mehrfach gesagt!
-
Pi ist mir nur eingefallen da man es und ein paar Terme damit als Konstanten definiert. Die Frage ging aber, wie du richtig erkannt hast, in die Richtung, wie viele Stellen nach dem Komma ich minimal brauche um noch vernünftig 3D Transformationen etc. machen zu können?
Ich bin mir mittlerweile schon gar nicht mehr sicher ob meine Frage überhaupt einen Sinn ergibt, wenn alle hier mit den Schultern zucken^^ Praktisch nutze ich jetzt Konstanten mit sechs Stellen hinter dem Komma.
-
Kannste abschätzen: guck die Kondition deiner Transformationsmatrizen an und mach ne Fehlerabschätzung.
-
const double PI = 4.0 * atan(1);
-
Th69 schrieb:
const double PI = 4.0 * atan(1);
Das ist jetzt hoffentlich nicht dein Ernst.
-
Lichtweite schrieb:
Praktisch nutze ich jetzt Konstanten mit sechs Stellen hinter dem Komma.
Warum nutzt du überhaupt Festkommazahlen?
-
Ich nutze FP für Fälle wo auf der Zielplattform keine FPU vorhanden ist únd ansonsten floats, wo ich aber auch PI und die üblichen Formen davon, wie PI Halbe, 1/PI etc gleich als Konstanten für Lookup-Tables oder schnelle Sinus-Annäherungen etc. verwende.
@ScottZhang: Interessant, inverse Matrix kenne ich, aber eine Normalform einer Matrix habe ich noch nie gebildet, geschweige denn aus deren Produkt dann die Kondition ausgerechnet.