клавиатурное событие в OpenGL с переизбытком - PullRequest
0 голосов
/ 30 июля 2011

Я программирую на OpenGL, используя библиотеку перенасыщения, и у меня проблема с управлением положением объекта с помощью клавиатуры.

У меня есть следующая функция обратного вызова для glutKeyboardFunc

void handleKeypress (unsigned char key, int x, int y)
{
 switch (key)
{
case 27:
  exit (0); break;
case 'w':
  position_y += 0.2f; break;
case 's':
  position_y -= 0.2f; break;
case 'a':
  position_x -= 0.2f; break;
case 'd':
  position_x += 0.2f; break;
case 'q':
  depth += 0.2f; break;
case 'e':
  depth -= 0.2f; break;
case 'z': 
  angle += 0.2f; break;
case 'c':
  angle -= 0.2f; break;
}
}`

Тем не менее, я знаю, что этого недостаточно. Я должен добавить glutPostRedisplay (), если я хочу, чтобы изменения произошли, но где? Нужно ли ставить его перед каждым «разрывом» в вышеприведенных кодах? Я попытался добавить его к обратному вызову glutTimerFunc и обратному вызову glutIdleFunc, но объекты продолжают двигаться после нажатия клавиши.

1 Ответ

1 голос
/ 30 июля 2011

Да, вы можете добавлять его после каждого перерыва. Но вы также можете просто добавить его в самый конец функции.

Если вы добавите его в свой обратный вызов glutIdleFunc, экран будет перерисован, даже если нет изменений. Это не должно вызывать никаких проблем.

Я не понимаю, почему ваш объект продолжает двигаться. Возможно, вы забыли сбросить матрицу вида модели с помощью glLoadIdentity (); в обратном вызове glutDisplayFunc.

...