C++按ESC键退出当前窗口

C++按ESC键退出当前窗口

学习记录

int c = waitKey(100);//按ESC则退出当前视频
   if ((char)c == 27)
   {
    break;
   }
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
这是一个比较复杂的任务,需要使用OpenGL进行图形渲染和盘事件处理。以下是C++代码示例: ```cpp #include <GL/glut.h> GLfloat angleTeapot = 0.0f; // 茶壶旋转角度 GLfloat angleX = 0.0f; // 视角旋转角度 GLfloat angleY = 0.0f; GLfloat angleZ = 0.0f; GLfloat posX = 0.0f; // 视角位置 GLfloat posY = 0.0f; GLfloat posZ = 5.0f; void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(posX, posY, posZ, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // 设置视角 glPushMatrix(); glRotatef(angleTeapot, 0.0f, 1.0f, 0.0f); glutWireTeapot(1.0); glPopMatrix(); glutSwapBuffers(); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 'w': angleX -= 5.0f; break; case 'a': angleY += 5.0f; break; case 's': angleX += 5.0f; break; case 'd': angleY -= 5.0f; break; case '4': posX -= 0.1f; break; case '5': posY -= 0.1f; break; case '6': posZ -= 0.1f; break; case '1': posX += 0.1f; break; case '2': posY += 0.1f; break; case '3': posZ += 0.1f; break; case 27: exit(0); break; // 退出窗口 } glutPostRedisplay(); } void idle() { angleTeapot += 1.0f; if (angleTeapot > 360.0f) angleTeapot -= 360.0f; glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRotatef(angleX, 1.0f, 0.0f, 0.0f); glRotatef(angleY, 0.0f, 1.0f, 0.0f); glRotatef(angleZ, 0.0f, 0.0f, 1.0f); glutPostRedisplay(); } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(640, 480); glutCreateWindow("Teapot"); glEnable(GL_DEPTH_TEST); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutIdleFunc(idle); glutMainLoop(); return 0; } ``` 这段代码使用了OpenGL的glut库,实现了一个线框茶壶模型,并且支持盘事件处理和视角控制。在main函数中,首先初始化glut库,设置窗口大小并创建窗口。然后开启深度测试,设置渲染模式为双缓冲模式,绑定显示函数、盘事件处理函数和空闲函数,并进入主循环。 在display函数中,首先清空颜色缓冲区和深度缓冲区,然后使用gluLookAt函数设置视角。接着使用glPushMatrix和glPopMatrix函数保存和恢复茶壶模型的旋转状态,并调用glutWireTeapot函数绘制茶壶模型。最后交换前后缓冲区,完成一帧渲染。 在keyboard函数中,根据不同的按操作修改旋转角度和视角位置,并调用glutPostRedisplay函数重新绘制窗口。 在idle函数中,每帧旋转茶壶模型,并使用glRotatef函数设置视角旋转角度,并调用glutPostRedisplay函数重新绘制窗口。 使用这段代码可以得到一个可以通过盘控制的茶壶模型,按esc即可退出窗口
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值