2015-12-22 10 views
2

Привет, у меня странная проблема с движением мыши в openGL. Вот мой код для перемещения камеры с моей мышиКлюч для мыши Opengl (gluLookAt)

void camera(int x, int y) 
{ 
    GLfloat xoff = x- lastX; 
    GLfloat yoff = lastY - y; // Reversed since y-coordinates range from bottom to top 
    lastX = x; 
    lastY = y; 

    GLfloat sensitivity = 0.5f; 
    xoff *= sensitivity; 
    yoff *= sensitivity; 

    yaw += xoff;    // yaw is x 
    pitch += yoff;    // pitch is y 

    // Limit up and down camera movement to 90 degrees 
    if (pitch > 89.0) 
     pitch = 89.0; 
    if (pitch < -89.0) 
     pitch = -89.0; 

    // Update camera position and viewing angle 
    Front.x = cos(convertToRads(yaw) * cos(convertToRads(pitch))); 
    Front.y = sin(convertToRads(pitch)); 
    Front.z = sin(convertToRads(yaw)) * cos(convertToRads(pitch)); 
} 

convertToRads() является малой функцией я создал, чтобы преобразовать координаты мыши в рады.

С помощью этого кода я могу перемещать камеру, как бы то ни было, но если я попытаюсь пройти весь путь, когда я достигаю около 45 градусов, он вращается 1-2 раза вокруг оси х и затем продолжает увеличивать ось Y , Я не могу понять, если я сделал что-то не так, поэтому, если кто-то мог помочь, я был бы признателен.

+2

Я думаю, умножив результат соз() с convertToRads для х значение не является правильным. (используйте простой случай, yaw = 45 и pitch = 45 градусов и посмотрите, какой результат. –

+0

Вы, возможно, хотели сказать мне, что я потерял паратерхию, я думаю: P спасибо за помощь – Fotis

+0

да :-) ... не было достаточно для ответа :-)) –

ответ

3

Кажется, вы потеряли в paranthesis:

Front.x = cos(convertToRads(yaw) * cos(convertToRads(pitch))); 

вместо:

Front.x = cos(convertToRads(yaw)) * cos(convertToRads(pitch)); 
+0

О, боже ... ты не знаешь, как я благодарен ... я искал проблему в течение двух дней! Большое спасибо!! – Fotis

 Смежные вопросы

  • Нет связанных вопросов^_^