![]() |
DelphiGL VectorTransform stimmt nicht mit Mathe überein
Hallo,
Ich bin etwas verwirrt wie DelphiGL Vektoren transformiert. Normalerweise tut man dies indem man eine Transformationsmatrix M mit einem Vektor v multipliziert, also so: M*v = v' Allerdings hat DelphiGL eine Funktion VectorTransform die es umgekehrt macht, also v*M=v'. Da v*M != M*v ist bin ich etwas verwirrt. Dass dies so gewollt ist zeigt sich an TGLBaseSceneObject.LocalToAbsolute, welches VectorTransform verwendet, das effektiv v*M berechnet. Was ist die Logik dahinter? |
AW: DelphiGL VectorTransform stimmt nicht mit Mathe überein
Hallo,
die Reihenfolge hängt davon ab, ob mit "Row Major" oder "Column Major" gearbeitet wird. Viele Grüße, karlkoch |
AW: DelphiGL VectorTransform stimmt nicht mit Mathe überein
Danke.
Im folgenden Link wird nochmal bestätigt dass OpenGL tatsächlich column major verwendet, und damit die übliche Multiplikation von M*v sich zu v*M umdreht. Üblicherweise wird für eine Transformation angenommen, dass M in row major ist, und dann wäre auch M*v korrekt. Da OpenGL (und damit DelphiGL, wohl überall aus Konsistenzgründen dies auch tut) column major annimmt, ist hier für die Transformation v*M korrekt. Man könnte auch sagen: M*v = v*M^T (wobei M^T die Transponierte von M ist) ![]() Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz