我正在嘗試創建一個小型應用程序,它可以隨着鼠標移動在一個立方體周圍旋轉相機。它可以完美地繞Y軸旋轉,但是我在繞X軸旋轉時遇到了問題。當我不斷向上移動鼠標時,立方體開始在正X方向旋轉。經過一段時間後,它反轉它的旋轉方向並開始在負X方向上旋轉,然後一段時間後再次沿正X方向旋轉。只要我向上移動鼠標,我想使它圍繞正X旋轉。這裏有什麼問題?相機旋轉方向逆轉一段時間後
立方體位於座標系的中心。投影角度:
編輯:這是涉及到的問題視頻:https://youtu.be/997ZdUM8fcQ
vec4 eye;
vec4 at;
vec4 up;
GLfloat mouseX = -1;
GLfloat mouseY = -1;
// Bound to glutPassiveMotionFunc
void mouse(int x, int y) {
// This rotation works perfect, cube rotates on same direction continuously as far as I move the mouse left or right
GLfloat acceleration_x = mouseX - x;
eye = RotateY(acceleration_x/10.f) * eye;
mouseX = x;
// This rotation doesn't work properly, after some time, cube's rotation direction inverses
GLfloat acceleration_y = mouseY - y;
eye = RotateX(acceleration_y/10.f) * eye;
mouseY = y;
// This part teleports pointer to opposite side of window after reaching window bounds
if (x >= 1364) {
glutWarpPointer(1, y);
mouseX = 1;
}
else if (x <= 0) {
glutWarpPointer(1363, y);
mouseX = 1363;
}
if (y >= 751) {
glutWarpPointer(x, 3);
mouseY = 3;
}
else if (y <= 2) {
glutWarpPointer(x, 750);
mouseY = 750;
}
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
vec4 up(0.0, 1.0, 0.0, 0.0);
mat4 model_view = LookAt(eye, at, up);
glUniformMatrix4fv(ModelView, 1, GL_TRUE, model_view);
glDrawArrays(GL_TRIANGLES, 0, NumVertices);
glutSwapBuffers();
}
// Bound to glutTimerFunc
void timer(int id)
{
glutPostRedisplay();
glutTimerFunc(1000.f/60.f, timer, 0);
}
int main(int argc, char **argv)
{
......
......
eye = vec4(0, 0, 2, 0);
at = vec4(0, 0, 0, 0);
up = vec4(0.0, 1.0, 0.0, 0.0);
.....
.....
}