【问题标题】:OpenGL / Glut Buttons and KeysOpenGL / Glut 按钮和键
【发布时间】:2013-03-15 15:05:40
【问题描述】:

我正在使用Pearson, Computer Graphics with OpenGL的书自学。

我目前正在尝试做一个简单的方块移动,但在我超越自己之前,我需要确保我了解 Glut 中内置了哪些键。

我知道以下键:

  • GLUT_KEY_F1, GLUT_KEY_F2, ..., GLUT_KEY_F12 - F1 到 F12 键
  • GLUT_KEY_PAGE_UP, GLUT_KEY_PAGE_DOWN - Page Up 和 Page Down 键
  • GLUT_KEY_HOME, GLUT_KEY_END - Home 和 End 键
  • GLUT_KEY_LEFT, GLUT_KEY_RIGHT, GLUT_KEY_UP, GLUT_KEY_DOWN - 箭头 键
  • GLUT_KEY_INSERT - 插入键

我要么在我的书中找到它们,要么在 Stackoverflow 的另一篇文章中找到它们。

但是还有更多吗?例如,对于键盘和鼠标上的所有键?

谢谢。

【问题讨论】:

    标签: c++ input keyboard glut


    【解决方案1】:

    glut 将键盘中的键除以 glutSpecialFunc w/c 采用特殊键,例如 F1、F2...、数字键等,而 glutKeyboardFunc 采用所有可以用字母等字符表示的键、数字、ESC('ASCII' 中的 27)、ENTER('ASCII' 中的 32)等

    总之,glutKeyboardFunc 采用char 参数,这些参数可以在任何字符之前不使用任何'\'(反斜杠,如'\t'、'\n')来表示,其余由glutSpecialFunc 处理

    【讨论】:

    • 回车键好像是13。
    【解决方案2】:

    键盘有两组按钮:可以用 ASCII 码表示的按钮和不能用 ASCII 码表示的按钮。可以用 ASCII 表示的,按下时返回 1 个字节,不能返回 2 个字节的第一个是 NULL

    通过为您提供两组处理键盘事件的函数来抽象这一点:一组处理普通的 ASCII 标准按钮glutKeyboardFunc,另一组处理特殊的两字节按钮glutSpecialFunc

    特殊功能具有常用键盘特殊按钮的常量:

    GLUT_KEY_F1:0x0001, GLUT_KEY_F2:0x0002, GLUT_KEY_F3:0x0003, GLUT_KEY_F4:0x0004, GLUT_KEY_F5:0x0005, GLUT_KEY_F6:0x0006, GLUT_KEY_F7:0x0007, GLUT_KEY_F8:0x0008, GLUT_KEY_F9:0x0009, GLUT_KEY_F10:0x000A, GLUT_KEY_F11:0x000B, GLUT_KEY_F12:0x000C, GLUT_KEY_LEFT:0x0064, GLUT_KEY_UP:0x0065, GLUT_KEY_RIGHT:0x0066, GLUT_KEY_DOWN:0x0067, GLUT_KEY_PAGE_UP:0x0068, GLUT_KEY_PAGE_DOWN:0x0069, GLUT_KEY_HOME:0x006A, GLUT_KEY_END:0x006B, GLUT_KEY_INSERT:0x006C, GLUT_KEY_REPEAT_OFF:0x0000, GLUT_KEY_REPEAT_ON:0x0001, GLUT_KEY_REPEAT_DEFAULT:0x0002。

    鼠标点击可以用glutMouseFunc处理,与鼠标按钮相关的常量是: GLUT_LEFT_BUTTON:0x0000, GLUT_MIDDLE_BUTTON:0x0001, GLUT_RIGHT_BUTTON:0x0002

    glut 还可以处理带有glutJoystickFunc 的操纵杆,它具有以下常量: GLUT_HAS_JOYSTICK:0x0264, GLUT_OWNS_JOYSTICK:0x0265, GLUT_JOYSTICK_BUTTONS:0x0266, GLUT_JOYSTICK_AXES:0x0267, GLUT_JOYSTICK_POLL_RATE:0x0268, GLUT_JOYSTICK_BUTTON_A:0x0001, GLUT_JOYSTICK_BUTTON_B:0x0002, GLUT_JOYSTICK_BUTTON_C:0x0004, GLUT_JOYSTICK_BUTTON_D:0x0008.

    如果您使用的是游戏鼠标或带有更多按钮的键盘/操纵杆,您可以通过将按下的按钮输出到控制台来测试每个按钮返回的内容,然后直接在代码中使用此值来了解其中一个按钮是否为按下

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多