2010-11-21 6 views
1

Ich habe den ganzen Abend gesucht, aber kann die Informationen nicht finden, die ich suche, oder auch wenn es möglich ist, was ziemlich peinlich ist;)Java3D: rotierendes Objekt in Weltkoordinaten?

Ich benutze Java3D und kann nicht herausfinden, wie um die Kamera im Weltall zu drehen.

Meine Links/Rechts- und Hoch/Runter-Drehung geschieht auf dem lokalen Platz. Das bedeutet, wenn ich nach links und rechts gehe, sieht alles gut aus. Aber wenn ich 90 Grad nach unten schaue, dann schaue 90 Grad nach rechts, alles scheint auf der Seite zu sein.

Momentan mache ich folgendes. Diese in den obigen Effekten führen:

TransformGroup cam = universe.getViewingPlatform().getViewPlatformTransform(); 
Transform3D trfcam = new Transform3D(); 
cam.getTransform(trfcam); 

trfcam.mul(Camera.GetT3D()); //Gets a Transform3D containing how far to rotate left/right and how far to move left/right/forward/back 

trfcam.mul(Camera.GetRot()); //Gets a t3d containing how far to rotate up/down 

cam.setTransform(trfcam); 

Alternativ ich eine Sache versucht, die Wurzel rotiert, aber das dreht sich um 0, also wenn ich jemals die Kamera bewegen, weg von 0 ist, geht es schlecht. Gibt es etwas im Internet, das mich darüber aufklärt, wie man so etwas erreichen kann? Ich habe viele verschiedene Dinge ausprobiert, aber ich kann mich überhaupt nicht damit abfinden. Ich bin vertraut mit dem Konzept, wie ich es in Ogre3D erreicht habe, nur nicht vertraut mit dem Gesetz des Landes in J3D.

Vielen Dank im Voraus für die Antworten :)

Antwort

1

Shop die ammound Sie um jede Achse gedreht haben (x und y), und wenn Sie versuchen, um die x-Achse zum Beispiel zu drehen, in umgekehrter Reihenfolge die Rotation um y, Drehe die Rotation um x und wiederhole die Rotation um y.

Ich bin mir nicht sicher, ob ich Ihre zweite Frage richtig verstehe. Da Viewer- und Modelltransformationen dual sind, können Sie Kamerafahrten simulieren, indem Sie die Welt selbst transformieren. Wenn Sie die rotierte X- und Y-Achse nicht umwandeln möchten, fügen Sie einfach eine TransformGroup zu der von Ihnen verwendeten Haupt-Transformationsgruppe hinzu und führen Sie die Transformationen in der neuen aus.

Edit: Die erste Lösung ist recht langsam, so dass Sie einen Transform3D aus den 3-Transformation machen können was Sie tun müssen:

Sagen Sie rund um die x-Achse (Translate3D xrot) gedreht haben, und was Sie jetzt brauchen

Translate3D yrot = new Translate3D(); 
yrot.rotY(angle); 

Translate3D temp = xot; 
xrot.mul(yrot); // Dont forget the reverse order. xrot is the previous translate 
xrot.mul(yrot); // xrot = xrot * yrot * xrot^-1 
temp.transpose(); // Get the reverse transform of the old transform 
xrot.mul(temp); 

yrot = xrot; // Store it for future rotation around x axis 
cam.setTransform(yrot); 

Es funktioniert ähnlich für viele Transformationen Sie machen: um y zu drehen kehren die vorherigen getan, tun die Transformation, die alte wiederholen. Ich hoffe, es hilft.

Verwandte Themen