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

Sc4v

Alter Hase

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

11

30.12.2013, 15:33

Habe ich den Tipp etwa falsch verstanden?

Nein schon alles richtig verstanden. Ich fragte mich nur gerade ob der Tipp sinnvoll ist oder nicht. Unity z.B. macht das ja anders, da wirkt sich die Reihenfolge der Transformationen durchaus auf die Matrix aus, demnach dürften die nicht Rotation, Translation und Skalierung separat speichern. Hat jemand eine Idee wie die das lösen? Ich mag Davids Äußerung über die Ungenauigkeit des Matrizenakkumulierens nicht anzweifeln, aber ich glaube nicht, dass sich das so fatal auswirken kann (Bitte um Korrektur falls ich wirklich falsch liege). Ob ich jetzt rechne

§M_{modell} = T_1 * T_2 * ... * T_n * R_1 * R_2 * ... * R_n * S_1 * S_2 * ... * S_n §

direkt beim Funktionsaufruf akkumuliere oder ob ich das getrennt akkumuliere

§T_{modell} = T_1 * T_2 * ... * T_n §
§R_{modell} = R_1 * R_2 * ... * R_n (oder Quaternionen) §
§S_{modell} = S_1 * S_2 * ... * S_n§

und dann am für das Rendern

§M_{modell} = T_{modell} * R_{modell} * S_{modell}§

berechne, dürfte von der Genauigkeit doch keinen Unterschied machen (und wenn nur geringfügig)

Edit: Unter der Bedingung das die Modellmatrix in jedem Frame aus der Identity neu berechnet wird

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

12

30.12.2013, 16:31

Ich glaube du hast mich falsch verstanden, Sc4v.
Ich habe gesagt, dass folgendes "tödlich" ist in jedem Update durchzuführen:

M = M * Delta

Da ist es ganz klar, dass die Matrix nach einiger Zeit völlig kaputt geht.
Es wird ja z.B. nirgendwo sicher gestellt, dass die Achsen die Länge 1 behalten und senkrecht aufeinander stehen. Eine Matrix ist für Rotationen halt sehr redundant und geht irgendwann kaputt, wenn man nicht aufpasst.

Quaternionen hingegen sind viel stabiler, darum lieber diese benutzen und nur wenn es nötig ist daraus eine Matrix bauen.

Sc4v

Alter Hase

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

13

30.12.2013, 16:53

achso jetzt verstehe ich deinen Punkt. Meines Wissens tritt dieses Problem doch nur bei der Interpolation von Rotationsmatrizen auf? Die reine Akkumulation dieser sollte überhaupt kein Problem darstellen

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

14

30.12.2013, 17:31

Ich denke mal das Problem, welches David formuliert, liegt in der Genauigkeit von Gleitkommazahlen.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

30.12.2013, 19:22

Die reine Akkumulation dieser sollte überhaupt kein Problem darstellen

Da liegst du falsch.
Rein mathematisch betrachtet stimmt das natürlich, wenn man mit reellen Zahlen rechnet.
Wir haben aber im Computer keine reellen Zahlen.
Ich werde gleich mal ein Beispiel posten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

16

30.12.2013, 20:03

Naja, der Effekt ist wohl doch nicht so schlimm wie ich gedacht habe.
Ich habe mal eine Stunde Spielzeit bei 60 Frames pro Sekunde simuliert und eine Matrix immer wieder mit zufälligen Rotationsmatrizen multipliziert. Am Ende war die Matrix schon leicht "kaputt", aber so gering, dass man es wahrscheinlich nicht merken würde.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

17

30.12.2013, 21:31

Ist das nicht auch davon abhängig, welche float-Werte in der Matrix stehen? Bei sehr kleinen Zahlen ist ja noch alles recht genau, wenn du aber sehr große nimmst, sollte es doch schneller sichtbar werden?!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

18

30.12.2013, 22:06

Naja, in der linken oberen 3x3-Teilmatrix sind normalerweise nur Werte zwischen -1 und 1 drin.
Es sei denn, man hat noch Skalierungen.

Sc4v

Alter Hase

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

19

01.01.2014, 17:11

Gut zu wissen, danke für deinen Test David.

PS: Frohes neues

Werbeanzeige