如何通过鼠标输入暂停GLUT框架下2D图形的自动旋转?
实现点击鼠标停止图形旋转的修改方案
你只需要对现有代码做4处修改即可实现需求:
1. 新增全局旋转控制变量
在全局变量定义区域添加一个布尔变量,控制旋转是否开启:
GLfloat angle = 0.0f; int refreshMills = 30; bool isRotating = true; // 新增:控制旋转状态,默认开启旋转
2. 补全鼠标回调函数逻辑
点击鼠标时切换旋转状态,这里设置为任意鼠标按键按下时触发切换,你也可以按需限定为左键:
void mouse(int button, int state, int x, int y) { // 鼠标按键按下时切换旋转状态 if (state == GLUT_DOWN) { isRotating = !isRotating; } }
3. 修改角度增量逻辑
只有旋转状态开启时,才更新旋转角度,修改display函数末尾的角度更新代码:
glutSwapBuffers(); // 仅当旋转开启时增加角度 if (isRotating) { angle += 2.0f; }
4. 启用鼠标事件注册
取消main函数中glutMouseFunc行的注释,让GLUT能够响应鼠标事件:
glutDisplayFunc( display ); glutMouseFunc ( mouse ); // 取消该行注释,注册鼠标事件回调 glutSpecialFunc( special );
修改完成后运行程序,点击任意鼠标按键即可停止旋转,再次点击即可恢复旋转效果,原有方向键控制移动的功能不受影响。
内容的提问来源于stack exchange,提问作者uwu
相关产品推荐
相关产品推荐

