Presentation is loading. Please wait.

Presentation is loading. Please wait.

OpenGL 的键盘控制 1、特殊键的按键消息 2、普通键的按键消息.

Similar presentations


Presentation on theme: "OpenGL 的键盘控制 1、特殊键的按键消息 2、普通键的按键消息."— Presentation transcript:

1 OpenGL 的键盘控制 1、特殊键的按键消息 2、普通键的按键消息

2 键盘控制: GLUT允许编写程序时,在里面加入键盘输入控制,包括了普通键,和其他特殊键(如F1,UP)。在这一章里我们将学习如何去检测哪个键被按下,可以从GLUT里得到些什么信息,和如何处理键盘输入。 

3 键盘控制: 处理按键消息,必须使用GLUT通知窗口系统,当某个键被按下时,哪个函数将完成所要求的操作。同样是调用一个函数注册相关的回调函数。

4 1、普通按键消息: 当按下一个键后,GLUT提供了两个函数为这个键盘消息注册回调。
一个是glutKeyboardFunc。这个函数是告诉窗口系统,哪一个函数将会被调用来处理普通按键消息。 普通键是指字母,数字,和其他可以用ASCII代码表示的键。 函数原型如下: void glutKeyboardFunc(void(*func)(unsigned char key,int x,int y)); 参数: func: 处理普通按键消息的函数的名称。如果传递NULL,则表示GLUT忽略普通按键消息。 这个作为glutKeyboardFunc函数参数的函数需要有三个形参。第一个表示按下的键的ASCII码,其余两个提供了,当键按下时当前的鼠标位置。鼠标位置是相对于当前客户窗口的左上角而言的。 

5 2、控制特殊键的按键消息 控制特殊键的按键消息。GLUT提供函数glutSpecialFunc以便当有特殊键按下的消息时,你能注册你的函数。
函数原型如下: void glutSpecialFunc(void (*func)(int key,int x,int y)); 参数: func: 处理特殊键按下消息的函数的名称。传递NULL则表示GLUT忽略特殊键消息。

6 实例1:旋转中的茶壶(特殊键的按键消息) Keyboard0

7 功能:上下左右箭头控制对象的旋转 主要回调函数: glutSpecialFunc
这个函数是控制特殊键的按键消息.GLUT提供函数glutSpecialFunc以便当有特殊键按下的消息时,能注册函数. 函数原型如下: void glutSpecialFunc(void (*func)(int key,int x,int y)); 参数: func: 处理特殊键按下消息的函数的名称.传递NULL则表示GLUT忽略特殊键消息.

8 实例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; case GLUT_KEY_LEFT: viewRotateY+=1.0; case GLUT_KEY_RIGHT: viewRotateY-=1.0; default: return; } // printf("viewRotateX:%6.3f,viewRotateY:%6.3f\n",viewRotateX,viewRotateY); glutPostRedisplay(); Keyboard0

9 实例2:键盘控制旋转、放大、缩小及退出。 Z,z控制Z轴;D,d控制大小;;Esc控制退出 Keyboard1

10 功能:(普通按键)键盘控制旋转、放大、缩小及退出
主要回调函数: glutKeyboardFunc 按下一个键后,GLUT提供了两个函数为这个键盘消息注册回调.其中一个是glutKeyboardFunc.这个函数是告诉窗口系统,哪一个函数将会被调用来处理普通按键消息. 普通键是指字母,数字,和其他可以用ASCII代码表示的键. 函数原型如下: void glutKeyboardFunc(void(*func)(unsigned char key,int x,int y)); 参数: func: 处理普通按键消息的函数的名称.如果传递NULL,则表示GLUT忽略普通按键消息. 这个作为glutKeyboardFunc函数参数的函数需要有三个形参.第一个表示按下的键的ASCII码,其余两个提供了,当键按下时当前的鼠标位置.鼠标位置是相对于当前客户窗口的左上角而言的.

11 实例1中的: glutKeyboardFunc(myKeyboard);
//Z,z控制Z轴;D,d控制大小;;Esc控制退出 void myKeyboard(unsigned char k,int x,int y) { switch(k) case 'Z': viewRotateZ+=5.0; break; case 'z': viewRotateZ-=5.0; case 'D': viewDist+=1.0; case 'd': viewDist-=1.0;; case 27: exit(0); default: return; } glutPostRedisplay();

12 在glut.h里已经被预定义为常量。这组常量如下: GLUT_KEY_F1               F1 function key GLUT_KEY_F2               F2 function key GLUT_KEY_F3               F3 function key GLUT_KEY_F4               F4 function key GLUT_KEY_F5               F5 function key GLUT_KEY_F6               F6 function key GLUT_KEY_F7               F7 function key GLUT_KEY_F8               F8 function key GLUT_KEY_F9               F9 function key  GLUT_KEY_F10              F10 function key GLUT_KEY_F11              F11 function key GLUT_KEY_F12              F12 function key GLUT_KEY_LEFT             Left function key GLUT_KEY_RIGHT            Up function key GLUT_KEY_UP               Right function 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

13 练习1: 程序实现:当一些特殊键按下的时候,改变三角形的颜色。这个函数使在按下F1键时三角形为红色,按下F2键时为绿色,按下F3键时为蓝色。
Keyboard4

14 练习2: 程序实现:当一些普通键按下的时候,改变茶壶的颜色。这个函数使在按下R键时茶壶为红色,按下G键时为绿色,按下B键时为蓝色。
Keyboard3


Download ppt "OpenGL 的键盘控制 1、特殊键的按键消息 2、普通键的按键消息."

Similar presentations


Ads by Google