Glut键盘控制

在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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现OpenGL键盘控制汽车,需要以下步骤: 1. 创建一个OpenGL窗口,并将汽车模型加载到窗口中。 2. 定义汽车的运动方向,例如前进、后退、左转、右转等。 3. 使用OpenGL中的glutKeyboardFunc函数来捕获键盘事件,根据按键的不同,改变汽车的运动方向。 4. 在窗口的渲染循环中,根据汽车的运动方向更新汽车的位置和方向,并重新绘制汽车模型。 以下是示例代码: ```c++ #include <GL/glut.h> float car_x = 0.0f; float car_y = 0.0f; float car_z = -5.0f; float car_angle = 0.0f; void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(car_x, car_y, car_z); glRotatef(car_angle, 0.0f, 1.0f, 0.0f); // 绘制汽车模型 glColor3f(1.0f, 0.0f, 0.0f); glBegin(GL_QUADS); glVertex3f(-1.0f, -0.5f, 2.0f); glVertex3f( 1.0f, -0.5f, 2.0f); glVertex3f( 0.5f, -0.5f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.0f); glVertex3f(-1.0f, -0.5f, -2.0f); glVertex3f( 1.0f, -0.5f, -2.0f); glVertex3f( 0.5f, -0.5f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.0f); glVertex3f(-1.0f, -0.5f, 2.0f); glVertex3f(-1.0f, -0.5f, -2.0f); glVertex3f(-1.0f, 0.5f, -2.0f); glVertex3f(-1.0f, 0.5f, 2.0f); glVertex3f(1.0f, -0.5f, 2.0f); glVertex3f(1.0f, -0.5f, -2.0f); glVertex3f(1.0f, 0.5f, -2.0f); glVertex3f(1.0f, 0.5f, 2.0f); glVertex3f(-1.0f, -0.5f, 2.0f); glVertex3f(-1.0f, -0.5f, -2.0f); glVertex3f( 1.0f, -0.5f, -2.0f); glVertex3f( 1.0f, -0.5f, 2.0f); glVertex3f(-1.0f, 0.5f, 2.0f); glVertex3f(-1.0f, 0.5f, -2.0f); glVertex3f( 1.0f, 0.5f, -2.0f); glVertex3f( 1.0f, 0.5f, 2.0f); glEnd(); glutSwapBuffers(); } void keyboard(unsigned char key, int x, int y) { switch(key) { case 'w': car_z += 0.1f; break; case 's': car_z -= 0.1f; break; case 'a': car_angle += 5.0f; break; case 'd': car_angle -= 5.0f; break; } } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize(800, 600); glutCreateWindow("OpenGL Keyboard Control Car"); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glEnable(GL_DEPTH_TEST); glutMainLoop(); return 0; } ``` 在这个示例代码中,我们创建了一个OpenGL窗口,并将一个简单的汽车模型加载到窗口中。然后,我们使用glutKeyboardFunc函数来捕获键盘事件,并根据按键的不同来改变汽车的运动方向。在窗口的渲染循环中,我们根据汽车的运动方向更新汽车的位置和方向,并重新绘制汽车模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值