2013-03-28 2 views
0

У меня есть объект, который обрабатывается, и я пытаюсь повернуть объект с помощью мыши. Объект будет вращаться тонко на 180 градусов, но после этого объект инвертирует (если он обращен к камере, переключается в сторону от камеры), как и ожидаемое движение мыши, то есть, если перетаскивание мыши вправо поворачивает объект по часовой стрелке, тогда теперь он будет вращаться против часовой стрелки. Как только он достигнет следующих 180 градусов, он снова вернется и нормальность восстановится. Я уверен, что должно быть что-то простое, что я просто не вижу?OpenGl - объект инвертируется после 180 градусов вращения

Вот мой код:

// Detect mouse state 
void 
mouse(int button, int state, int x, int y) 
{ 
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) 
    { 
     moving = 1; 
     beginX = x; 
     beginY = y; 
    } 
    if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) 
    { 
     moving = 0; 
    } 
} 

// Detect mouse movement 
void motion(int x, int y) 
{ 
    if (moving) 
    { 
     angleX = (angleX + (x - beginX)); 
     angleY = (angleY + (y - beginY)); 
     beginX = x; 
     beginY = y; 
     newModel = 1; 
     glutPostRedisplay(); 
    } 
} 

// Rotate object 
void recalcModelView(void) 
{ 
    // Get object's centre 
    int hh = head->GetHeight()/2; 
    int hw = head->GetWidth()/2; 
    int hd = head->GetDepth()/2; 
    glPopMatrix(); 
    glPushMatrix(); 
    // Rotate object based on mouse movement 
    glTranslatef(hw, hd, hh); 
    float temp1 = angleX/5; 
    float temp2 = angleY/5; 
    printf("TEMP1: %g\n", temp1); 
    printf("TEMP2: %g\n", temp2); 
    glRotatef(temp1, 0.0, 1.0, 0.0); 
    glRotatef(-temp2, 1.0, 0.0, 0.0); 
    glTranslatef(-hw, -hd, -hh); 
    newModel = 0; 
} 
+0

Можете ли вы точно объяснить, что вы подразумеваете под «инвертирует, как и ожидаемое движение»? Думаю, ваш код выглядит хорошо. – Xymostech

+0

Я не эксперт OpenGL, но вы используете 'glPopMatrix(); glPushMatrix(); последовательность является подозрительной. – joce

+0

@ Xymostech Извинения. Это была опечатка. При этом движение мыши также инвертируется, т. Е. При перетаскивании мыши вправо, обычно объект вращается по часовой стрелке, а затем перетаскивая мышь вправо, теперь объект вращается против часовой стрелки –

ответ

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