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

1

09.10.2011, 16:01

Probleme mit Translationsmatrix

Hallo Leute.
Ich habe ein Problem, und zwar mit meiner selbst geschriebenen Matrix zur Translation meiner Modelview-Matrix.
So sieht sie aus:

C-/C++-Quelltext

1
2
3
4
mat4x4 ReturnMatrix =  {1,0,0,x,
                        0,1,0,y,
                        0,0,1,z,
                        0,0,0,1};


Wenn ich sie nun mit meiner Modelview-Matrix multipliziere, kommt da Müll raus, obwohl ich mir sicher bin, dass sowohl da Multiplizieren richtig verläuft, als auch die Matrix richtig ist.
Output in X-Richtung:

(Link)


Output in Y-Richtung:

(Link)


Und hier der Beweis, dass die Multiplikation trichtig funktioniert (funktioniert bei allen Scale-/Rotate-Operationen):

(Link)

An der Projection- oder View-Matrix kann es auch nicht liegen, die sind auf default.

Hat noch irgendjemand eine Idee? :S

Danke im Voraus,
Klangwelle

2

09.10.2011, 16:32

Sollte die nicht so heißen:

Quellcode

1
2
3
4
matrixtyp bla = {1, 0, 0, 0,
                 0, 1, 0, 0,
                 0, 0, 1, 0,
                 x, y, z, 1};


?(

Übrigens: Wo ist 'der Beweis' ein Beweis? Ich sehe nur, dass die Rotationsmatrix richtig erscheint, jedoch nicht die Funktion, wenn du denn eine nutzt, die die Matrix auf der x-/y-/z-Achse drehen "will".
Wenn ich da falsch liege korrigiert mich bitte, aber Translation (=Verschiebung) und Rotation(=Drehung), ich sehe in beiden Bildern aber keine wirkliche Translation des gesamten Dreieckes. :pinch:

MfG
Check

3

09.10.2011, 16:35

Bei OpenGL nicht, habe vergessen das dazuzusagen.
Übrigends: Wenn ich jeweils die View- oder Projection-Matrix bewege, statt der Modelview-Matrix, dann bekomme ich exakt das gleiche Bild!!!

EDIT: o.O Es klappt tatsächlich!!! Danke, Checkmateing, dann ist tatsächlich die OpenGL-Dokumentation falsch!?
http://www.opengl.org/sdk/docs/man/xhtml/glTranslate.xml

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

09.10.2011, 16:55

Das liegt einfach nur daran, in welcher Reihenfolge die Matrix-Elemente im Speicher abgelegt sind.
Entweder zeilenweise oder spaltenweise. Es ist also nicht "falsch", sondern wird einfach nur anders interpretiert als du es dir gedacht hast.

Google: Row-major order vs. column-major order

5

09.10.2011, 17:01

Weiß ich, aber da es sich hier um OpenGL handelt, habe ich gedacht, das stimmt so, zumal es bei Rotation etc. auch stimmte.
EDIT: Hopplea, also, ähhhm,... :whistling: Ja, es lag tatsächlich daran, dass ich row-major und column-major nicht beachtet habe. Dass die Scale und Rotation stimmt kommt daher: Rotation habe ich gleich richtig (oder falsch) implementiert und bei Scale ist es egal, die Ordnung bleibt die gleiche.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »#Sound~Wave#« (09.10.2011, 17:48)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

09.10.2011, 17:51

Einfache Rotationsmatritzen sind fast symmetrisch (rotieren dann nur in die falsche Richtung). Daher wird es dort wohl den Anschein gehabt haben dass es "stimmt". Wie die Daten im Speicher liegen, hängt davon ab was dieses mat4x4 ist. Die OpenGL Dokumentation ist jedenfalls korrekt ;)

7

09.10.2011, 18:36

Das ist das, was ich in meinem EDIT schrieb ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

09.10.2011, 23:09

Nicht gesehn ;)

Werbeanzeige