PDA

View Full Version : [FRAGE] - Bsp 3A: Translate VS transformationMode


burny
28-10-2004, 19:32
bei einer translation ist der transformationMode doch vollkommen egal!
oder hab ich da was nicht ganz geschnallt?

thx, burny

Matthias
28-10-2004, 20:14
nein, nur left und leftranslate sind bei der translation gleich. right muss auch hier gesondert behandelt werden.

burny
28-10-2004, 20:19
hmmm... warum genau?

ChrisChiu
28-10-2004, 20:57
Weil bei Right eben von rechts multipliziert wird. Bei Left und Left-Translate aber jeweils von links, und da man ja nicht in den Ursprung verschieben muß, ist daher Left und Left-Translate ident.

Lizzy
29-10-2004, 10:40
Wie wird das translate hier überhaupt realisiert?

Dass man die Matrix auf Translate setzen kann is klar.

Muss ich dann jeden Punkt mit der Matrix muliplizieren?

Ich hätte einfach bei jedem Punkt die Translatekoordinaten dazugezählt...

wie ist das hier gemeint?

ChrisChiu
29-10-2004, 13:18
Wie wird das translate hier überhaupt realisiert?

Dass man die Matrix auf Translate setzen kann is klar.

Muss ich dann jeden Punkt mit der Matrix muliplizieren?

Ich hätte einfach bei jedem Punkt die Translatekoordinaten dazugezählt...

wie ist das hier gemeint?

Jeder Punkt wird mit der Transformationsmatrix multipliziert.

Die Transformationsmatrix setzt sich aus den Matrizen der Viewing Pipeline zusammen (die per Multiplikation zusammenmultipliziert werden).

Das ist bei diesen sogenannten affinen Transformationen möglich, das heißt, hat man eine Matrix m1, die eine bestimmte Transformation durchführt, und eine Matrix m2, die eine andere durchführt, so führt die Matrix (m1 * m2) die zusammengefasste Transformation durch.

Aber das sind wirklich totale Basics, die auch in der Vorlesung behandelt werden - ich schlage vor das Buch (ev. auch das OpenGL Red Book, das auf der Angabe zum Beispiel 3 verlinkt ist) und die Vorlesungsfolien bezüglich der Viewing Pipeline und der Transformationen durchzulesen.

Lizzy
29-10-2004, 19:47
Jeder Punkt wird mit der Transformationsmatrix multipliziert.

Die Transformationsmatrix setzt sich aus den Matrizen der Viewing Pipeline zusammen (die per Multiplikation zusammenmultipliziert werden).

...

Aber das sind wirklich totale Basics, die auch in der Vorlesung behandelt werden - ich schlage vor das Buch (ev. auch das OpenGL Red Book, das auf der Angabe zum Beispiel 3 verlinkt ist) und die Vorlesungsfolien bezüglich der Viewing Pipeline und der Transformationen durchzulesen.


Hallo, ja das war schon klar, schließlich war ich auch in der Vorlesung ;-)

Ich war mir aber nicht sicher, ob wir das beispiel so lösen müssen, oder den trivialen 'algorithmus' mit den Koordinatenadditionen verwenden dürfen.
Aber gut das das jetzt geklärt ist, damit es beim Abgabegespräch keine bösen Überraschungen gibt ;-)

lg, Lisi

Joni
29-10-2004, 19:51
heitß das, wir müssen in den transformationsmethoden (translate, rotatx,...) jeden punkt mit der matrix multiplizieren? oder wird das wo anders erledigt?

Lizzy
29-10-2004, 19:52
So wie ich das verstanden hab schon.
Anders wirds wohl nicht gehen.

Ich denke, wir müssen einfach das Punktearray durchgehen und jeden Punkt multiplizieren (was eh für alle Objekte die gleiche prozedur is)...

Joni
29-10-2004, 19:57
ok danke jetzt hab ichs geschnallt. dafür is die methode CG1Matrix4x4.transformPoints(...) :thumb:

Lizzy
29-10-2004, 20:03
also ich verwende die auch..

nur mein problem is jetzt, wie ich den TranformationMode unterscheide. Ich hab ja nur eine Matrix und den Punkt kann ich auch nicht richtungsabhängig multiplizieren.
Das gleiche gilt halt auch für das rotate... Wie genau muss ich den transformationMode behandeln? Das ganze is ja auch keine zusammengesetzte Operation wo man die bisherigen matrixen mit einer neuen matrix multipliziert... oder?

ah ich denke ich habs gesehen... alle gewünschten transformationen werden in der modellingmatrix zusammengesetzt und je nach transform mode wird die bisherige matrix von links oder von rechts mit der neuen multipliziert..

wer sieht das genauso?

Joni
29-10-2004, 20:10
genau du hast recht, wobei ich noch herumrätsle wie man das objekt in den ursprung verschiebt. ich hab da ein paar variablen gesehen die die boundary-box des objekts angeben, vielleicht den mittelpunkt der boundary-box verwenden?

Lizzy
29-10-2004, 20:14
genau du hast recht, wobei ich noch herumrätsle wie man das objekt in den ursprung verschiebt. ich hab da ein paar variablen gesehen die die boundary-box des objekts angeben, vielleicht den mittelpunkt der boundary-box verwenden?

stimmt, da hast du recht... das is nicht so leicht... aber die tranformation auf alle punkte bereits in der funktion anzuwenden macht auch wenig sinn, weil wozu brauch ich dann eine zusammengesetzte matrix für alle transformationen, wenn ich erst wieder alle operationen extra mache... mhm... knifflige frage...

Joni
29-10-2004, 20:18
klar machts sinn, sonst werden die punkte garnicht transformiert und das objekt ändert seine position nicht. probiers mal aus :thumb:

Lizzy
29-10-2004, 20:36
ich habs so verstandne, dass man mit den funktionen translate, rotate, scale usw. die matrix setzt und mit transform (...) diese transformation dann wirklich ausführt...

wie is das wirklich gedacht?

Joni
29-10-2004, 20:49
ja ich kanns mir nicht anders vorstellen. weil die transformationsmatrix schrittweise berechnen und dann garnicht auf die punkte anwenden bringt nid viel.

ChrisChiu
29-10-2004, 20:50
Die Matrizen "sammeln" die Transformationen.

Die eigentliche Transformation der Punkte selbst geschieht in transform() in Beispiel 3B.

An anderer Stelle hab ich erwähnt, dass man - auch wenn organisatorisch Beispiel 3A und 3B jeweils eigene Beispiele sind - trotzdem nach Möglichkeit 3A und 3B als "ein Beispiel" sehen. Daher schadet es sicher nicht, nach den Tasks aus 3A gleich 3B weiterzumachen.

Was letztendlich wohl auch befriedigender (naja :p - zumindest wenn man's richtig hat und nicht an einem unauffindbaren Fehler zu beißen hat) zu testen ist als 3A: denn nach 3B kann man die 3D-Objekte schön drehen und wenden, das schaut schon recht gut aus.

burny
31-10-2004, 12:21
genau du hast recht, wobei ich noch herumrätsle wie man das objekt in den ursprung verschiebt. ich hab da ein paar variablen gesehen die die boundary-box des objekts angeben, vielleicht den mittelpunkt der boundary-box verwenden?
ich bin bei meiner lösung mal davon ausgegangen, dass ein neu erstelltes objekt im ursprung liegt. d.h. weiters, dass es verschoben werden muss um eine andere posittion zu erhalten, was wiederum heißt, dass entsprechende translate-elemente (tx, ty, tz) in modelMatrixPoint vorhanden sind (oder diese 0 sind, falls keine translation durchgeführt wurde).
deshalb ist bei mir eine translation in den ursprung um -tx, -ty, -tz.

<Nachtrag>
anders gehts ja auch gar nicht, da ich ja gar nicht weiß, wo sich mein objekt im moment befindet (dazu müsste ich den mittelpunkt des objekts kennen)
</Nachtrag>

ChrisChiu
31-10-2004, 15:30
ich bin bei meiner lösung mal davon ausgegangen, dass ein neu erstelltes objekt im ursprung liegt. d.h. weiters, dass es verschoben werden muss um eine andere posittion zu erhalten, was wiederum heißt, dass entsprechende translate-elemente (tx, ty, tz) in modelMatrixPoint vorhanden sind (oder diese 0 sind, falls keine translation durchgeführt wurde).
deshalb ist bei mir eine translation in den ursprung um -tx, -ty, -tz.

<Nachtrag>
anders gehts ja auch gar nicht, da ich ja gar nicht weiß, wo sich mein objekt im moment befindet (dazu müsste ich den mittelpunkt des objekts kennen)
</Nachtrag>

Das ist genau richtig, man verwendet die Translations-Elemente aus modelMatrixPoint. Genau die geben ja an, wie weit es vom Ursprung weg ist.