Hi,
Seit einigen Tagen beschäftige ich mich mit der 3D-Programmierung mit lwjgl. Jetzt wollte ich eine Kamera aus der Ego-Perspektive programmieren. Als Anleitung dazu habe ich DAS verwendet. Die Klasse "FPCameraController" habe ich von dort nahezu 1:1 übernommen, allerdings musste ich die Methode "lookThrough" verändern, da die Kamera sich sonst nach Aufruf einer der Bewegungsmethoden die ganze Zeit rotierte. (ich musste nur die Positionen und Rotationen wieder auf 0 setzten)
Original:
Verändert:
Die Bewegung funktioniert jetzt (nahezu) einwandfrei, mein Problem ist allerdings die, durch die Maus gesteuerte Rotation der Kamera. Dabei treten zwei Probleme auf:
(1. die Rotation ruckelt ziemlich stark) <-- siehe Edit
2. wenn man nur die Rotation um eine Achse betrachtet und die Maus nur in eine Richtung bewegt rotiert die Kamera erst in diese Richtung, zwischendurch wechselt die Rotationsrichtung dann plötzlich und die Kamera rotiert in die entgegengesetzte Richtung.
Die Kamera-Klasse verwende ich (für die Rotation) folgendermaßen:
Hab ich das so richtig gemacht? Und wie kann ich die Probleme lösen?
mfg, tdc
edit: ich habe die Abfrage if(Mouse.isInsideWindow) herausgenommen und jetzt scheint es nicht mehr zu ruckeln...
Problem 2 besteht noch.
Seit einigen Tagen beschäftige ich mich mit der 3D-Programmierung mit lwjgl. Jetzt wollte ich eine Kamera aus der Ego-Perspektive programmieren. Als Anleitung dazu habe ich DAS verwendet. Die Klasse "FPCameraController" habe ich von dort nahezu 1:1 übernommen, allerdings musste ich die Methode "lookThrough" verändern, da die Kamera sich sonst nach Aufruf einer der Bewegungsmethoden die ganze Zeit rotierte. (ich musste nur die Positionen und Rotationen wieder auf 0 setzten)
Original:
Java:
public void lookThrough()
{
//roatate the pitch around the X axis
GL11.glRotatef(pitch, 1.0f, 0.0f, 0.0f);
//roatate the yaw around the Y axis
GL11.glRotatef(yaw, 0.0f, 1.0f, 0.0f);
//translate to the position vector's location
GL11.glTranslatef(position.x, position.y, position.z);
}
Verändert:
Java:
public void lookThrough()
{
GL11.glTranslatef(position.x, position.y, position.z);
GL11.glRotatef(pitch, 1.0f, 0.0f, 0.0f);
GL11.glRotatef(yaw, 0.0f, 1.0f, 0.0f);
position.x = 0;
position.y = 0;
position.z = 0;
pitch = 0;
yaw = 0;
}
Die Bewegung funktioniert jetzt (nahezu) einwandfrei, mein Problem ist allerdings die, durch die Maus gesteuerte Rotation der Kamera. Dabei treten zwei Probleme auf:
(1. die Rotation ruckelt ziemlich stark) <-- siehe Edit
2. wenn man nur die Rotation um eine Achse betrachtet und die Maus nur in eine Richtung bewegt rotiert die Kamera erst in diese Richtung, zwischendurch wechselt die Rotationsrichtung dann plötzlich und die Kamera rotiert in die entgegengesetzte Richtung.
Die Kamera-Klasse verwende ich (für die Rotation) folgendermaßen:
Java:
while (!Display.isCloseRequested())
{
int delta = getDelta();
update(delta);
camera.lookThrough();
...
Java:
public void update(int delta)
{
float mousedx = Mouse.getDX();
float mousedy = Mouse.getDY();
if(mousedx != 0)
{
camera.yaw(mousedy);
}
if(mousedy != 0)
{
camera.pitch(mousedx);
}
...
mfg, tdc
edit: ich habe die Abfrage if(Mouse.isInsideWindow) herausgenommen und jetzt scheint es nicht mehr zu ruckeln...
Problem 2 besteht noch.
Zuletzt bearbeitet: