欢迎来到天天文库
浏览记录
ID:40747437
大小:31.00 KB
页数:5页
时间:2019-08-07
《GLUT 按键处理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、【转】【OpenGL】GLUT按键处理2010-07-1615:19转载自hh20040410最终编辑hh20040410GLUT教程 键盘输入 GLUT允许我们编写程序,在里面加入键盘输入控制,包括了普通键,和其他特殊键(如F1,UP)。在这一章里我们将学习如何去检测哪个键被按下,可以从GLUT里得到些什么信息,和如何处理键盘输入。 到现在,你应该注意到了,只要你想控制一个事件的处理,你就必须提前告诉GLUT,哪个函数将完成这个任务。到现在为止,
2、我们已经使用GLUT告诉窗口系统,当窗口重绘时我们想调用哪个渲染函数,当系统空闲时,哪个函数被调用。当窗口大小改变时,哪个函数又将被调用。相似的,我们必须做同样的事来处理按键消息。我们必须使用GLUT通知窗口系统,当某个键被按下时,哪个函数将完成所要求的操作。我们同样是调用一个函数注册相关的回调函数。一函数介绍:当你按下一个键后,GLUT提供了两个函数为这个键盘消息注册回调。①glutKeyboardFunc普通按键的按键消息。 这个函数是告诉窗口系统,哪一个函数将会被调用来处理普通按键消息。 普通键
3、是指字母,数字,和其他可以用ASCII代码表示的键。函数原型如下: voidglutKeyboardFunc(void(*func)(unsignedcharkey,intx,inty)); 参数: func:处理普通按键消息的函数的名称。如果传递NULL,则表示GLUT忽略普通按键消息。 这个作为glutKeyboardFunc函数参数的函数需要有三个形参。第一个表示按下的键的ASCII码, 其余两个提供了,当键按下时当前的鼠标位置。鼠标位置是相对于当前客户窗口的左上角而言的。 一个
4、经常的用法是当按下ESCAPE键时退出应用程序。注意,我们提到过,glutMainLoop函数产生的 是一个永无止境的循环。唯一的跳出循环的方法就是调用系统exit函数。这就是我们函数要做的,当 按下ESCAPE键调用exit函数终止应用程序(同时要记住在源代码包含头文件stdlib.h)。 下面就是这个函数的代码: voidprocessNormalKeys(unsignedcharkey,intx,inty) { if(key==27) Exit
5、(0); }②glutSpecialFunc特殊按键的按键消息。 GLUT提供函数glutSpecialFunc以便当有特殊键按下的消息时,你能注册你的函数。 函数原型如下: voidglutSpecialFunc(void(*func)(intkey,intx,inty)); 参数: func:处理特殊键按下消息的函数的名称。传递NULL则表示GLUT忽略特殊键消息。 下面我们写一个函数,当一些特殊键按下的时候,改变我们的三角形的颜色。 这个函数使在按下F1键时三角形为红色,
6、按下F2键时为绿色,按下F3键时为蓝色。 voidprocessSpecialKeys(intkey,intx,inty){ switch(key){ caseGLUT_KEY_F1: red=1.0; green=0.0; blue=0.0;break; case
7、GLUT_KEY_F2: red=0.0; green=1.0; blue=0.0;break; caseGLUT_KEY_F3: red=0.0;
8、 green=0.0; blue=1.0;break; } } 上面的GLUT_KEY_*在glut.h里已经被预定义为常量。这组常量如下:二组合键的处理: CTRL,ALT和SHIFT 一些时候我们想知道要是一个组合键(modifierkey)也就是CTR
此文档下载收益归作者所有