OpenGL---GLUT教程(七) GLUT高级键盘控制

  
 GLUT 教程
                  高级键盘控制( keyboard features
 
这节我们将去介绍4个新的处理键盘输入的函数。
 
第一个函数允许我们去禁止keyboard repeat。函数原型如下:
int glutSetKeyRepeat(int repeatMode);
参数:
repeatMode:开启,禁用,或恢复auto repeat模式,下面是它可能的取值。
RepeatMode的可能取值如下:
 GLUT_KEY_REPEAT_OFF:关闭auto repeat模式。
 GLUT_KEY_REPEAT_ON:开启auto repeat模式。
 GLUT_KEY_REPEAT_DEFAULT:把auto repeat模式恢复到默认状态。
 
注意这个函数,作用范围是全局性的。也就是,它会影响所有窗口的repeat模式。不仅仅是我们应用程序这一个。因此注意当使用这个函数关闭auto repeat模式后,有必要在程序结束时将auto repeat模式重设到默认模式。
 
GLUT提供我们另外一个简单的函数,来禁用keyboard repeat,这个让我们安全的忽视keyboard repeat,而不会影响其他程序。函数原型如下:
Int glutIgnoreKeyRepeat(int repeatMode);
参数:
RepeatMode:传递0,开启auto repeat,非0则禁用auto repeat。
在一些情况下,当key repeat发生时,我们将不接受函数回调。然而如果你想在一个key被按下后,执行一个动作,你就需要知道这个key什么时候松开。GLUT提供了两个函数注册相关的回调函数。
Void glutKeyboardUpFunc(void (*func)(unsigned char key,int x,int y));
Void glutSpecialUpFunc(void (*func)(int key,int x,int y));
参数:
Func:回调函数的函数名。
我们在下一节,提供一个程序也就是上一节的代码,来看看这些函数怎么工作。
 
(这章很不好翻译。好多都不知道怎么说,汗。- -|| 有需要的看原文。 http://www.lighthouse3d.com/opengl/glut/index.php?7     我感觉原文写的也不咋清楚。还是看下一节的例子。 呵呵。)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值