- 16
- 0
- 约3.58千字
- 约 14页
- 2016-04-23 发布于天津
- 举报
opengl的键盘控制
OpenGL 的键盘控制 1、特殊键的按键消息 2、普通键的按键消息 键盘控制: GLUT允许编写程序时,在里面加入键盘输入控制,包括了普通键,和其他特殊键(如F1,UP)。在这一章里我们将学习如何去检测哪个键被按下,可以从GLUT里得到些什么信息,和如何处理键盘输入。? 键盘控制: 处理按键消息,必须使用GLUT通知窗口系统,当某个键被按下时,哪个函数将完成所要求的操作。同样是调用一个函数注册相关的回调函数。 1、普通按键消息: 当按下一个键后,GLUT提供了两个函数为这个键盘消息注册回调。 一个是glutKeyboardFunc。这个函数是告诉窗口系统,哪一个函数将会被调用来处理普通按键消息。 普通键是指字母,数字,和其他可以用ASCII代码表示的键。 函数原型如下: void glutKeyboardFunc(void(*func)(unsigned char key,int x,int y)); 参数: func: 处理普通按键消息的函数的名称。如果传递NULL,则表示GLUT忽略普通按键消息。 这个作为glutKeyboardFunc函数参数的函数需要有三个形参。第一个表示按下的键的ASCII码,其余两个提供了,当键按下时当前的鼠标位置。鼠标位置是相对于当前客户窗口的左上角而言的。? 2、控制特殊键的按键消息 控制特殊键的按键消息。GLUT提供函数glutSpecialFunc以便当有特殊键按下的消息时,你能注册你的函数。 函数原型如下: void glutSpecialFunc(void (*func)(int key,int x,int y)); 参数: func: 处理特殊键按下消息的函数的名称。传递NULL则表示GLUT忽略特殊键消息。 实例1:旋转中的茶壶(特殊键的按键消息) 功能:上下左右箭头控制对象的旋转主要回调函数: glutSpecialFunc glutSpecialFunc函数: 这个函数是控制特殊键的按键消息.GLUT提供函数glutSpecialFunc以便当有特殊键按下的消息时,能注册函数. 函数原型如下: void glutSpecialFunc(void (*func)(int key,int x,int y)); 参数: func: 处理特殊键按下消息的函数的名称.传递NULL则表示GLUT忽略特殊键消息. 实例1中的:glutSpecialFunc(mySpecial); void mySpecial (int k,int x,int y) { switch(k) { case GLUT_KEY_UP: viewRotateX+=1.0; break; case GLUT_KEY_DOWN: viewRotateX-=1.0; break; case GLUT_KEY_LEFT: viewRotateY+=1.0; break; case GLUT_KEY_RIGHT: viewRotateY-=1.0; break; default: return; } // printf(viewRotateX:%6.3f,viewRotateY:%6.3f\n,viewRotateX,viewRotateY); glutPostRedisplay(); } 实例2:键盘控制旋转、放大、缩小及退出。 Z,z控制Z轴;D,d控制大小;;Esc控制退出 功能:(普通按键)键盘控制旋转、放大、缩小及退出 主要回调函数: glutKeyboardFunc 按下一个键后,GLUT提供了两个函数为这个键盘消息注册回调.其中一个是glutKeyboardFunc.这个函数是告诉窗口系统,哪一个函数将会被调用来处理普通按键消息. 普通键是指字母,数字,和其他可以用ASCII代码表示的键. 函数原型如下: void glutKeyboardFunc(void(*func)(unsigned char key,int x,int y)); 参数: func: 处理普通按键消息的函数的名称.如果传递NULL,则表示GLUT忽略普通按键消息. 这个作为glutKeyboardFunc函数参数的函数需要有三个形参.第一个表示按下的键的ASCII码,其余两个提供了,当键按下时当前的鼠标位置.鼠标位置是相对于当前客户窗口的左上角而言的. 实例1中的: glutKeyboardFunc(myKeyboard); //Z,z
原创力文档

文档评论(0)