Hallo alle zusammen,
ich habe ein Problem an dem ich zurzeit sitze und zwar möchte ich meine Kamera an das Objekt koppeln wie in einer Third Person Kamera.
Jedoch bekomme ich das nicht richtig hin.
Die Methode soll bewirken, dass die Kamera sich um das Objekt dreht, das funktioniert auch.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
void CameraManager::setThirdPersonCamera(float mouseX, float mouseY, float *differenceOffsetX)
{
//= 43.9;
// = 114.73;
float offsetX = mouseX - oldMousePositionX;
float offsetY = oldMousePositionY - mouseY;
oldMousePositionX = mouseX;
oldMousePositionY = mouseY;
float sensitivity = 0.005;
offsetX *= sensitivity;
offsetY *= sensitivity;
pitch -= offsetY;
yaw += offsetX;
if (pitch > 89.0f)
pitch = 89.0f;
if (pitch < -89.0f)
pitch = -89.0f;
*differenceOffsetX = yaw;
cameraPositionX = 10 * cos(pitch) * cos(yaw);
cameraPositionY = 10 * sin(pitch);
cameraPositionZ = 10 * cos(pitch) * sin(yaw);
}
|
Diese Methode positioniert meine Kamera in der Welt
|
C-/C++-Quelltext
|
1
2
3
4
|
void CameraManager::repositionCamera()
{
gluLookAt(this->cameraPositionX, this->cameraPositionY, this->cameraPositionZ, this->viewAtPositionX, this->viewAtPositionY,this->viewAtPositionZ, 0., 1., 0.); // // Ansicht Schräg oben
}
|
Die Funktion zeichnet einfach das Bild in den Viewport
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
void RenderScene() //Zeichenfunktion
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity (); // Aktuelle Model-/View-Transformations-Matrix zuruecksetzen
cameraManager.repositionCamera(); // positioniert meine Kamera immer um das Objekt, wenn ich die Maus bewege wie in CAD Programmen
glPushMatrix();
//glRotatef(tesst += 0.2, 0, 1, 0);
glRotatef(tesst, 0, 1, 0); // Die Variable tesst ist zurzeit einfach eine Variable, worüber ich den Winkel erhöhe zum rotieren
oldPitch = xRotation - oldPitch;
glEnable(GL_TEXTURE_2D);
polgen.createShip(3);
glDisable(GL_TEXTURE_2D);
glPopMatrix();
glutSwapBuffers();
glFlush();
}
|
Die Funktion ruft einfach meine Funktion auf um die kamera zu bewegen (x und y sind die Mauskoordinaten)
|
C-/C++-Quelltext
|
1
2
3
4
5
|
void mouseMove(int x, int y)
{
cameraManager.setThirdPersonCamera(x, y, &xRotation);
tesst += xRotation ;
}
|
Ich bin echt am verzweifeln, ich habe bereits im Internet geschaut, jedoch finde ich nur Ressourcen, welche einen zeigen wie man die Kamera um das Objekt rotiert, aber nicht das Objekt
an die Kamera koppelt.
Durch die Funktion glRotatef(tesst += xRotation, 0, 1, 0); will ich das Objekt immer um den Pitch Winkel drehen. So das sozusagen die Nase meines Schiffes (mein Objekt) immer in einer Linie mit meiner Kamera ist. Jedoch erreiche ich dadurch nur, dass sich das Objekt wie wild dreht.
Vielen Dank für eure Hilfe schon im voraus
Gruß Dennis