OpenGL和GLUT键盘功能

Posted

技术标签:

【中文标题】OpenGL和GLUT键盘功能【英文标题】:OpenGL and GLUT keyboard function 【发布时间】:2014-02-07 18:40:55 【问题描述】:

如何注册CTRL键被按下?以下代码适用于除 CTRL 之外的所有键:

switch (key)

case GLUT_KEY_RIGHT:
    cout << "right key" << endl;
    glutPostRedisplay();  // Redraw the scene
    break;
case GLUT_KEY_LEFT:
    cout << "left key" << endl;
    glutPostRedisplay();  // Redraw the scene
    break;
case GLUT_KEY_UP:
    cout << "up key" << endl;
    glutPostRedisplay();  // Redraw the scene
    break;
case GLUT_KEY_DOWN:
    cout << "down key" << endl;
    glutPostRedisplay();  // Redraw the scene
    break;
case GLUT_ACTIVE_CTRL:
    cout << "CTRL pressed" << endl;
    glutPostRedisplay();  // Redraw the scene
    break;

【问题讨论】:

【参考方案1】:

GLUT 无法检测到只是按下 CtrlCtrl 的“枚举器”不是 GLUT_KEY_CTRL,而是 GLUT_ACTIVE_CTRL,这一事实也暗示了这一事实。

不过,你可以查询Ctrl在按下另一个键时的状态:

case GLUT_KEY_RIGHT:
    cout << "right key";
    if (glutGetModifiers() & GLUT_ACTIVE_CTRL)
        cout << " w/Ctrl";
    cout << endl;
    glutPostRedisplay();  // Redraw the scene
    break;

有关详细信息,请参阅documentation of glutGetModifiers()

【讨论】:

以上是关于OpenGL和GLUT键盘功能的主要内容,如果未能解决你的问题,请参考以下文章

Opengl/Glut 键盘输入问题

Mac 上的 OpenGL/GLUT 应用程序无法获得焦点 [关闭]

使用 C++ 在 OpenGL 中使用键盘移动 3d 形状

opengl中如何实现图象的缩放

点不会通过 OpenGL 中的键盘输入移动

如何使用带有 GLUT 的键盘进行简单的 2D 形状移动