Jestem w trakcie pisanie programu w OpenGL, który obsługuję kamerę za pomocą klawiatury i myszki tak jak w grach FPS. Jak dotąd udało mi się zaimplementować poruszanie się kamery w cztery strony za pomocą klawiatury(WSAD) oraz obracanie się obrazu przy użyciu myszki. Korzystałem przy tym z funkcji gluLookAt. Problem pojawia się, gdy np. obrócę kamerę za pomocą myszy o 180 stopni. Wtedy naciśnięcie klawisza W sprawia, że poruszamy się do tyłu. Chciałbym aby poruszanie się przed siebie było skierowane w stronę, w którą aktualnie patrzymy. Dowiedziałem się, że w rozwiązaniu tego problemu może pomóc glRotatef i glTraslatef. Nie wiem jednak dokładnie jak ich użyć. Jak wyliczyć kąt obrotu. Zamieszczam kawałek kodu, aby lepiej zobrazować problem. Proszę o pomoc.
float radians(float angle) {
angle = angle*3.14 / 180;
return angle;
}
void camera() {
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gluLookAt(tx, 0, tz,
tx + cos(radians(xGlob)) * cos(radians(yGlob)), 0, tz + sin(radians(xGlob)) * cos(radians(yGlob)),
0.0, 1.0, 0.0);
glutPostRedisplay();
}
void pozycjaMyszy(int x, int y)
{
stalaX = x - stareX;
stareX = x;
stalaY = stareY - y;
stareY = y;
float czulosc = 0.5;
stalaX *= czulosc;
stalaY *= czulosc;
xGlob += stalaX; //yaw
yGlob += stalaY; //pitch
camera();
}