PDA

View Full Version : [FRAGE] - Bsp 3a


peregrin
24-10-2004, 20:52
Ich werd aus folgendem nicht schlau:
Bei den unterschiedlichen Transformationen (Rotation, Translation, Scale) gibt es diesen Kommentar:
******************
- Implement this method. You are only required to implement one of the transformation modes, however, doing all three will help you experiment with these things and should not be too hard anyway.
******************
...wobei die drei transformation modes bei den Klassenvariablen so kommentiert werden:
******************
public static final byte TRANSFORMATION_LEFT = 0; // multiply transformation matrices from the left
public static final byte TRANSFORMATION_RIGHT = 1; // multiply transformation matrices from the right
public static final byte TRANSFORMATION_LEFTTRANSLATE = 2; // translate object to origin, multiply transformation matrices from the left, translate object back
******************
So wie ich das seh, sind diese drei verschiedenen Modi doch nicht wahlleise gegeneinander austauschbar, oder? Wenn ich jetzt z. B. rotieren will um irgendeine Achse, MUß ich ja vorher die Drehachse in den Origin verschieben, bevor ich da zu drehen beginne, so gesehen würde nur Modus 2 (also der dritte) in Frage kommen? Oder ich hab da ganz was anderes übersehen, bitte klärt mich auf.

fscan
24-10-2004, 23:14
wenn du nicht alle implementierst ist die ui halt nicht voll funktionsfähig ... austauschbar sind sie sicher nicht ..

peregrin
24-10-2004, 23:19
Ja, das war mir eh klar. Aber warum wird bei jeder Transformation dann vorgeschlagen, daß man alle drei Operationen implementieren soll, wenn eh immer nur eine (oder vielleicht zwei) Sinn macht?

tivolo
24-10-2004, 23:37
- Implement this method. You are only required to implement one of the transformation modes, however, doing all three will help you experiment with these things and should not be too hard anyway.
im prinzip brauchst du wirklich nur das machen, was geschrieben steht, d.h. einen der drei modi implementieren. da die zwei anderen modi allerdings nicht wirklich schwierig zu implementieren sind (einmal vertauschen der matrizen-multikplikation, das andere mal zuerst translation), lohnt es sich auf jeden fall, alle 3 modi zu programmieren und sich die verschiedenen ergebnisse anzusehen.

der vollständigkeit halber wäre es natürlich sinnvoll, alle 3 modi zu programmieren, da ja auch im GUI schon 3 buttons dafür vorgesehen sind.

mfg,
tivolo

seHaas
29-10-2004, 19:00
welchen punkt muss ich bei der 3.möglichkeit in den ursprung verschieben?

EDIT: zu früh gepostet, hab die antwort schon gefunden

Joni
29-10-2004, 19:41
ja kannst du die antwort nochmal posten? weil ich hab in einem anderen thread gelesen, man muss um den punkt translaten an dem die translation vorher gestanden ist und das wär der punkt:

toOrigin.x = modelMatrixPoint.m[0][3];
toOrigin.y = modelMatrixPoint.m[1][3];
toOrigin.z = modelMatrixPoint.m[2][3];

aba das kommt mir irgendwie komisch vor. kann das wirklich sein?

funktioniert dann eigentlich bei richtiger und vollständiger implementierung von 3A das scaling, rotation und translating der 2d objekte schon?

ChrisChiu
29-10-2004, 20:45
ja kannst du die antwort nochmal posten? weil ich hab in einem anderen thread gelesen, man muss um den punkt translaten an dem die translation vorher gestanden ist und das wär der punkt:

toOrigin.x = modelMatrixPoint.m[0][3];
toOrigin.y = modelMatrixPoint.m[1][3];
toOrigin.z = modelMatrixPoint.m[2][3];

aba das kommt mir irgendwie komisch vor. kann das wirklich sein?

funktioniert dann eigentlich bei richtiger und vollständiger implementierung von 3A das scaling, rotation und translating der 2d objekte schon?

Nein. Wie an anderer Stelle erwähnt kann man in Beispiel 3A nur die Basisoperationen der Vektor und Matrix-Klassen testen (mittels der test() Methode; außerdem ist auch das keine Garantie für Richtigkeit, sondern bringt nur eine gewisse relativ hohe Richtigkeitswahrscheinlichkeit - diese Art des Testens nennt man übrigens Unit Testing).

Das Beispiel 3A sollte nicht als Einzelbeispiel wie die anderen gesehen werden, sondern nur als die erste Etappe des 3. Beispiels. Die Aufteilung erfolgte rein aus dem Grund, um erstens das Beispiel 3 etwas auszubalancieren (es war ein zu hoher Aufwandssprung verglichen mit Beispiel 1 und 2), sowie hauptsächlich, um die Leute dazu zu bringen, sich bis zu einem gewissen Termin (nämlich dem Abgabetermin des Beispiels 3A) schon mit dem dritten Beispiel beschäftigt zu haben. In früheren Jahren haben die Leute nämlich das dritte Beispiel schwer unterschätzt, und erst eine Woche vor der Abgabe begonnen, sich damit zu beschäftigen - mit der Aufteilung in 3A und 3B beschäftigt man sich zumindest mit dem ersten Teil des dritten Beispiels bis zur Abgabe von 3A.

shebang
29-10-2004, 22:59
irgendwie steh ich bei den transformationsmethoden voll an....

soll man da in ner schleife für alle punkte eines objektes (quasi for(int i=0;i<=numVertex;i++)) diese verschieben, rotieren,.... was auch immer und dann das objekt neu zeichnen?
wahrscheinlich, weil diese methoden ja nix zurück geben.:eek2:

muss man dass alte objekt löschen? wie geht das, und wie kann man es neu zeichnen?

seHaas
29-10-2004, 23:21
ja kannst du die antwort nochmal posten? weil ich hab in einem anderen thread gelesen, man muss um den punkt translaten an dem die translation vorher gestanden ist und das wär der punkt:

toOrigin.x = modelMatrixPoint.m[0][3];
toOrigin.y = modelMatrixPoint.m[1][3];
toOrigin.z = modelMatrixPoint.m[2][3];

aba das kommt mir irgendwie komisch vor. kann das wirklich sein?



ja genau das hab ich gemeint: zuerst minus von diesen werten und nachher wieder mit diesen werten zurück!
sicher bin ich mir nicht aber es scheint mir doch irgendwie logisch, solange ich dei punkte noch nie verschoben habe, wird dann ja eigentlich ja immer nur die andere tranformation ausgeführt.

noch a ganz andere frage: ich wollte jetzt schon mal mim 3b anfangen, aber ich versteh einfach nicht wie das mit der viewing pipeline hinhaun soll... genauer gesagt die sachen mit den viewing- und projection- matrizen! hab ich da was verschlafen oder kommt das erst noch??

ChrisChiu
30-10-2004, 00:07
ja genau das hab ich gemeint: zuerst minus von diesen werten und nachher wieder mit diesen werten zurück!
sicher bin ich mir nicht aber es scheint mir doch irgendwie logisch, solange ich dei punkte noch nie verschoben habe, wird dann ja eigentlich ja immer nur die andere tranformation ausgeführt.

noch a ganz andere frage: ich wollte jetzt schon mal mim 3b anfangen, aber ich versteh einfach nicht wie das mit der viewing pipeline hinhaun soll... genauer gesagt die sachen mit den viewing- und projection- matrizen! hab ich da was verschlafen oder kommt das erst noch??

Das ist ja eigentlich der Kern des ganzen, die Viewing Pipeline.

Hast du schon alle verfügbaren Unterlagen (Buch, Angabe&Tipps auf der Webseite, eventuell Vorlesungs-Folien) durchgelesen?

Ich weiß nicht, ob die affinen Transformationen in der Vorlesung schon vorgekommen sind, wenn nicht, solltest du vielleicht noch darauf warten.

ChrisChiu
30-10-2004, 00:09
irgendwie steh ich bei den transformationsmethoden voll an....

soll man da in ner schleife für alle punkte eines objektes (quasi for(int i=0;i<=numVertex;i++)) diese verschieben, rotieren,.... was auch immer und dann das objekt neu zeichnen?
wahrscheinlich, weil diese methoden ja nix zurück geben.:eek2:

muss man dass alte objekt löschen? wie geht das, und wie kann man es neu zeichnen?

Meinst du die translate, rotateX/Y/Z und scale funktionen im CG1Object? Da sollst du noch nichts konkretes (also keine Punkte) transformieren, sondern eine weitere Operation zur Model-Transformationsmatrix hinzumultiplizieren.