V
Verwirrter
Gast
Hallo Leute
Ich versuche mich gerade an Jogl. Und zwar möchte ich ein Objekt nach hinten bzw. nach vor bewegen. Dazu verschiebe ich es einfach entlang der z-Achse. Das funktioniert auch aber nun stehe ich vor einem Problem: Wenn ich die gesamte Szene drehe schaut meine z-Achse nicht mehr gerade nach hinten sondern eben irgendwie schräg oder nach oben oder wie auch immer die Szene gedreht wurde. Mit "nach hinten" meine ich in den Bildschirm rein. Ich hoffe das ist verständlich ;-)
Ich dachte mir nun ich nehme einfach einen Vektor der immer nach hinten zeigt und verschiebe das Objekt dann immer entlang dieses Vektors. Zu Beginn ist der Vektor (0|0|-1). Wenn ich nun die gesamte Szene z.B. um die x-Achse rotiere rotiere ich auch diesen Vektor um die x-Achse, aber eben in die entgegengesetzte Richtung. Der Vektor müsste dann ja immer noch "in den Bildschirm rein" zeigen.
Im Code sieht das so aus:
Die Methode rotateVector multipliziert die Rotationsmatrix mit dem Vektor:
Leider funzt das aber nicht so wie gedacht. Mein Objekt wird in alle möglichen Richtungen verschoben, aber eben nicht in die in die es soll. Jemand eine Idee?
Ich versuche mich gerade an Jogl. Und zwar möchte ich ein Objekt nach hinten bzw. nach vor bewegen. Dazu verschiebe ich es einfach entlang der z-Achse. Das funktioniert auch aber nun stehe ich vor einem Problem: Wenn ich die gesamte Szene drehe schaut meine z-Achse nicht mehr gerade nach hinten sondern eben irgendwie schräg oder nach oben oder wie auch immer die Szene gedreht wurde. Mit "nach hinten" meine ich in den Bildschirm rein. Ich hoffe das ist verständlich ;-)
Ich dachte mir nun ich nehme einfach einen Vektor der immer nach hinten zeigt und verschiebe das Objekt dann immer entlang dieses Vektors. Zu Beginn ist der Vektor (0|0|-1). Wenn ich nun die gesamte Szene z.B. um die x-Achse rotiere rotiere ich auch diesen Vektor um die x-Achse, aber eben in die entgegengesetzte Richtung. Der Vektor müsste dann ja immer noch "in den Bildschirm rein" zeigen.
Im Code sieht das so aus:
Code:
Matrix m = new Matrix();
m.setRotateX(-xRot);
Vector v=m.rotateVector(vBack);
v.normalize();
pe.setXPos(pe.getXPos()+(float)(v.x*0.1));
pe.setYPos(pe.getYPos()+(float)(v.y*0.1));
pe.setZPos(pe.getZPos()+(float)(v.z*0.1));
Die Methode rotateVector multipliziert die Rotationsmatrix mit dem Vektor:
Code:
back.x = m[0][0] * x + m[0][1] * y + m[0][2] * z ;
back.y = m[1][0] * x + m[1][1] * y + m[1][2] * z ;
back.z = m[2][0] * x + m[2][1] * y + m[2][2] * z ;