OpenGL - камера от първо лице

Страхувам се, че изпитвам Gimbal lock, когато се опитвам да внедря камера от първо лице в OpenGl.

rotateFPS_OY(float angle){
    forward = forward * cos(angle) + right * sin(angle);
    right = forward.CrossProduct(up);

}
rotateFPS_OX(float angle){
    up = up * cos(angle) + forward * sin(angle); 
    forward = up.CrossProduct(right);
}

По-късно се обаждам на gluLookAt:

    Vector3D center = position + forward;
    gluLookAt(position.x, position.y, position.z, 
              center.x, center.y, center.z,
              up.x, up.y, up.z);

Когато тествате това, изглежда, че след няколко движения камерата се търкаля (променя десния вектор). Изчисленията изглеждат правилни, просто не мога да кажа какво не е наред.


person Mihai Neacsu    schedule 01.12.2012    source източник


Отговори (2)


нормализиране на вектори след изчисление

person kazatca    schedule 01.12.2012
comment
защо up = up * cos(ъгъл) + forward * sin(angle);forward = up.CrossProduct(right)?; може да бъде forward=forwadcos+upsin;up=forwardXright; но не е решен. - person kazatca; 01.12.2012
comment
Не работи и по този начин, всъщност обръща изображението назад и все още има ефекта на преобръщане. - person Mihai Neacsu; 01.12.2012
comment
о Не се въртете нагоре. завъртане около (0,0,1). - person kazatca; 01.12.2012
comment
Бихте ли ми обяснили как мога да направя това? - person Mihai Neacsu; 01.12.2012
comment
f1.x=f.xcos-f.ysin;f1.y=f.xsin+f.ycos;f1.z=f.z; f=f1; f е напред; същото за дясно; нагоре=надясноXнапред; промяна само на rotateFPS_OY - person kazatca; 01.12.2012

Успях успешно да внедря камерата, като запазих forward.y и right.y на 0 и изчислих вектор lookAt независимо от векторите напред/надясно/нагоре.

person Mihai Neacsu    schedule 18.12.2012