PDA

View Full Version : [Frage] Matrix von links multiplizieren


aceman
13-03-2004, 22:38
Hi.
Laut OpenGL FAQ, Eintrag 9.070 (http://users.frii.com/martz/oglfaq/transformations.htm#tran0070) ist es nicht möglich, eine Matrix von links zur aktuellen Transformationsmatrix dazuzumultiplizieren.

Ich hab mich zwar damit abgefunden, dass ich, um mich im Raum zu bewegen, eine weitere Matrix mitschleppen und die aktuelle Matrix immer wieder löschen und neu setzen muss (anstatt einfach immer die aktuelle zu verändern), mich würde aber interessieren, welchen Grund das hat, dass das "von links dazumultiplizieren" mit OpenGL nicht möglich ist. Die dazu nötige Logik ins Silizium zu lasern wird den Hardwareherstellern bestimmt nicht zu viel Aufwand sein, wenn man bedenkt, wie nützlich das Feature wäre. =)

Möglich wäre auch, dass ich irgendwas übersehn hab und es doch geht. In diesem Fall: nur her mit den Tipps. =)

cya,
Christian M.

Uebungsleitung
17-03-2004, 21:56
Ich verstehe das Problem nicht ganz. Man fängt (zumindest normalerweise) ja jedes Frame mit einer Identitätsmatrix wieder von neuem an, dann kann man sich die Reihenfolge der Multiplikationen ja aussuchen. Anders geht es ja auch nicht, da die allererste Matrix ja die Kamera-Transformation sein muß.


Das ist aber eigentlich bei allen 3D-APIs so üblich...

Michael Wimmer

aceman
18-03-2004, 00:33
Problem ist es eigentlich eh keines. Ich hab mir gedacht, es wäre praktisch, wenn man nicht jedes Frame wieder mit der Einheitsmatrix starten würde, sondern mit der Matrix, die die gesamte bisherige Kameratransformation enthält.

D.h. das Zeichnen eines Frames würde dann so ablaufen:
.) aktuelle Matrix enthält die gesamte Kameratransformation
.) von links neue Kameratransformation dazumultiplizieren.
z.B. eine Rotationsmatrix, wenn sich die Ansicht des Spielers drehn soll
.) Matrix auf den Stack legen
.) Objekttransformation von rechts dazumultiplizieren.
.) Objekte rendern, Frame anzeigen
.) die "reine" Kameratransformationsmatrix wieder vom Stack nehmen (d.h. als aktuelle Matrix verwenden) und die Berechnung des nächsten Frames starten.

Man würde sich den Aufbau der Kameratransformation ersparen und bräuchte nur die Änderung der Kamera reinmultiplizieren.

Naja wie gesagt...ist kein Problem, es gibt ja mehrere Arten, das zu programmieren.

ChrisChiu
19-03-2004, 03:45
Die Vorgehensweise wäre zwar sonst auch ok, aber mir fällt schon was ein wo es glaub ich auf diese Weise Probleme geben würde, nämlich etwa wenn du die Kameraposition, bzw die Orientierung (etwa mit Quaternionen) zwischen zwei Positionen/Orientierungen interpolieren willst zwischen zwei Zeitpunkten (also z.b. "Kamera dreht sich mittels irgendeiner Interpolationsvariente von Orientierung A in Orientierung B innerhalb von 15 sekunden"), dann bräuchte man die Information "Orientierung A" sowie die Information "Orientierung B" um die Orientierung im aktuellen Zwischenzeitpunkt zu berechnen... die aktuelle Kameramatrix würde da (abhängig von der Interpolationsvariante) nicht viel bringen denk ich. D.h. da würde man unter Umständen sowieso die gesamte Viewmatrix berechnen, und nicht nur die Veränderung seit dem letzten Frame.