在Glut中,键盘按键分两种:普通按键与特殊按键。
其中:
① 普通按键为:字母+数字,以及其他可以用ASCII表示的字母。注意ESC(对应ASCII码27)属于普通按键
② 特殊按键为:↑↓←→,PageUp,PageDown,Home,End等
普通按键所使用的按键响应函数为:
void glutKeyboardFunc(void(*func)(unsigned char key, int x, int y));
特殊按键所使用的按键响应函数为:
void glutSpecialFunc(void(*func)(int key, int x, int y));
1. 普通按键响应
//首先定义消息响应函数:
void processNormalKeys(unsigned char key, int x, int y)
{
switch (key)
{
case 27:
Exit(0);
break;
case 'w':
m_xRotate += 5.0f;
break;
default:
break;
}
// 刷新
glutPostRedisplay();
}
//然后调用:
glutKeyboardFunc(processNormalKeys);
由上面示例代码可知,可以直接使用ASCII对应的数字来代替相应的按键。
若使用'w'这样的格式,注意里面的字母区分大小写。若使用小写,那么CapsLock未按下时按w键有效,CapsLock已按下时按w键无效;使用大写同理。
2. 特殊按键响应
//首先定义消息响应函数:
void processSpecialKeys(unsigned char key, int x, int y)
{
switch (key)
{
case GLUT_KEY_UP:
m_xRotate -= 5.0f;
break;
case GLUT_KEY_DOWN:
m_xRotate += 5.0f;
break;
case GLUT_KEY_LEFT:
m_yRotate -= 5.0f;
break;
case GLUT_KEY_RIGHT:
m_yRotate += 5.0f;
break;
case GLUT_KEY_PAGE_UP:
m_zRotate -= 5.0f;
break;
case GLUT_KEY_PAGE_DOWN:
m_zRotate += 5.0f;
break;
default:
break;
}
// 刷新
glutPostRedisplay();
}
//然后调用:
glutSpecialFunc(processSpecialKeys);
附所有的特殊按键:
GLUT_KEY_F1 F1function key
GLUT_KEY_F2 F2function key
GLUT_KEY_F3 F3function key
GLUT_KEY_F4 F4function key
GLUT_KEY_F5 F5function key
GLUT_KEY_F6 F6function key
GLUT_KEY_F7 F7function key
GLUT_KEY_F8 F8function key
GLUT_KEY_F9 F9function key
GLUT_KEY_F10 F10function key
GLUT_KEY_F11 F11function key
GLUT_KEY_F12 F12 function key
GLUT_KEY_LEFT Leftfunction key
GLUT_KEY_RIGHT Up function key
GLUT_KEY_UP Rightfunction key
GLUT_KEY_DOWN Down function key
GLUT_KEY_PAGE_UP Page Up function key
GLUT_KEY_PAGE_DOWN Page Down function key
GLUT_KEY_HOME Home function key
GLUT_KEY_END End function key
GLUT_KEY_INSERT Insert function key