Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

11

06.01.2013, 00:33

Zitat

Wer Genauigkeit will, sollte sich im Bereich von -1.0 bis +1.0 bewegen. Die Dichte an darstellbaren Zahlen ist dort so ziemlich am höchsten, wenn ich mich recht entsinne.

Das ist so nicht richtig.
Der Sinn von Gleitkommazahlen ist gerade, dass man nicht an einen bestimmten engen Zahlenbereich gebunden ist.
Der Vorteil gegenüber Festkommazahlen ist, dass sich die Größenordung der Zahl "automatisch anpasst".
Und da heute kaum jemand auf die Idee kommen wird, aus Ints und Longs in der Grafikengine Verticies zu Speichern ist die Größenordung der Modelle einfach irrelevant.
BlueCobold hat das bereits sehr schön ausgeführt.

Ich persönlich würde mich wahrscheinlich auf 1 Meter ≙ 1 Einheit festlegen, weil es die einfachst mögliche Definition ist.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

12

06.01.2013, 01:31

Viel wichtiger ist es, dass man so nah wie möglich an der 0 bleibt.
Das bedeutet z.B., dass man seine Welt nicht bei (40000, 27000, 5000) zentriert, sondern bei (0, 0, 0).
Wer schonmal mit einer Physik-Engine gearbeitet hat, der weiß vielleicht, dass es schnell zu Ungenauigkeiten und seltsamem Verhalten der Objekte kommen kann, wenn man zu weit von (0, 0, 0) weggeht.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

06.01.2013, 07:37

Wer Genauigkeit will, sollte sich im Bereich von -1.0 bis +1.0 bewegen. Die Dichte an darstellbaren Zahlen ist dort so ziemlich am höchsten, wenn ich mich recht entsinne. Ansonsten lassen sich einige Integer verlustfrei in Floats/Doubles packen - ein Trick, den Lua nutzt. In ein Float passen verlustfrei Integer von -65535 bis +65535, wenn ich mich nicht irre.
Quatsch. Es passen zwar die Zahlen +-65535 da rein, aber auch noch mehr. Vielleicht liest Du auch mal, was ich vorher schon geschrieben habe. Ein Float kann 7 dezimale Stellen verlustfrei darstellen. Total egal, ob wo man sich dabei bewegt und 7 Stellen sind auch deutlich mehr als die Zahlen von +64k bis -64k. Das liegt daran, dass +-64k mit nur 17 Bits darstellbar ist und ein Float eine Mantisse mit 23 Bit besitzt PLUS das Vorzeichenbit, also 24 Bit vs. 17 Bit. Das ergibt für Float einen Integer-Bereich von -8388608 bis +8388608, der verlustfrei darstellbar ist.

Viel wichtiger ist es, dass man so nah wie möglich an der 0 bleibt.
Das bedeutet z.B., dass man seine Welt nicht bei (40000, 27000, 5000) zentriert, sondern bei (0, 0, 0).
Wer schonmal mit einer Physik-Engine gearbeitet hat, der weiß vielleicht, dass es schnell zu Ungenauigkeiten und seltsamem Verhalten der Objekte kommen kann, wenn man zu weit von (0, 0, 0) weggeht.

Während ich Dir bei der Zentrierung Recht gebe, ist das merkwürdige Verhalten vieler Physik-Engines bei großen Zahlen aber eher daher geschuldet, dass sie ebenfalls auch mit sehr kleinen Zahlen rechnen. Diese Kombination führt dann zu den Problemen. Bewegt man sich generell aber in einem im Verhältnis guten Rahmen, sind auch große Zahlen keine Magie. Man muss sich dann nur bewusst sein, dass eine Bewegung um +-0.002 Einheiten in einer Welt mit einer Range von +-40.000 eben nicht mehr korrekt darstellbar ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (06.01.2013, 07:42)


Werbeanzeige