opengl之双缓冲—旋转的矩形
2016-04-01 11:46
288 查看
// opengl_test.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<Windows.h> #include<GL/GL.h> #include<GL/GLU.h> #include<GL/glut.h> static GLfloat spin = 0.0; void init(void) { //确定窗口将清除成什么颜色 glClearColor(0.0, 0.0, 0.0, 0.0); //设置着色模式:采用恒定着色,使用图元中某个顶点的颜色来渲染整个图元 glShadeModel(GL_FLAT); } void display(void) { //完成清除窗口的功能:清除当前可写的颜色缓冲 glClear(GL_COLOR_BUFFER_BIT); //将当前矩阵保存入堆栈顶 glPushMatrix(); //图形沿着方向向量(0.0,0.0,1.0)选择spin度 glRotatef(spin, 0.0, 0.0, 1.0); //绘制物体时所使用的颜色 glColor3f(1.0, 1.0, 1.0); //绘制矩形:左下角坐标和右上角坐标 glRectf(-25.0, -25.0, 25.0, 25.0); //恢复矩阵状态 glPopMatrix(); //交换两个缓冲区指针:双缓冲 glutSwapBuffers(); } void spinDisplay(void) { spin = spin + 2.0; if (spin > 360.0) spin = spin - 360.0; //标记当前窗口需要重新绘制。通过glutMainLoop下一次循环时,窗口显示将被回调以重新显示窗口 //的正常面板。多次调用glutPostRedisplay,在下一个显示回调只产生单一的重新显示回调 glutPostRedisplay(); } void reshape(int w, int h) { //以像素为单位,指定了视口的左下角(0,0),宽度,高度 glViewport(0, 0, (GLsizei)w, (GLsizei)h); //设置当前矩阵模式:对投影矩阵应用随后的矩阵操作 glMatrixMode(GL_PROJECTION); //将当前的用户坐标系的原点移到屏幕中心,类似于复位操作 glLoadIdentity(); //指定了opengl在绘制最终图像时所使用的坐标系统,决定了图像如何映射到屏幕上 glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0); //设置当前矩阵模式:对模型视景矩阵堆栈应用随后的矩阵操作 glMatrixMode(GL_MODELVIEW); //将当前的用户坐标系的原点移到屏幕中心,类似于复位操作 glLoadIdentity(); } void mouse(int button, int state, int x, int y) { switch (button) { case GLUT_LEFT_BUTTON: if (state == GLUT_DOWN) //回调函数中指定一个函数。如果不存在其他尚未完成的事件,就执行这个函数 glutIdleFunc(spinDisplay); break; case GLUT_MIDDLE_BUTTON: if (state == GLUT_DOWN) glutIdleFunc(NULL); break; default: break; } } int _tmain(int argc, char* argv[]) { //对GLUT进行初始化,并处理所有命令行参数,应该在调用其他任何GLUT函数之前调用。 glutInit(&argc, argv); //使用双缓存窗口和RGB颜色模式的窗口 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); //初始化窗口尺寸 glutInitWindowSize(250, 250); //初始化窗口左上角的屏幕位置 glutInitWindowPosition(100, 100); //创建窗口 glutCreateWindow(argv[0]); int(); //当GUI确定一个窗口的内容需要重新显示时。通过此函数注册的回调函数就会被执行。 glutDisplayFunc(display); //当前窗口大小改变时,此回调会执行 glutReshapeFunc(reshape); //鼠标有动作执行时,此回调会执行 glutMouseFunc(mouse); //进入GLUT时间处理循环,让所有的与事件有关的函数调用无限循环 glutMainLoop(); return 0; }
相关文章推荐
- runloop 的运行原理
- GEEK学习笔记— —Linux中fork()函数
- 我的学习目录
- tomcat配置及优化
- Tomcat7调优及JVM性能优化for Linux环境
- shell脚本中的if参数
- 在Linux下安装Docker
- 像素格式结构-PIXELFORMATDESCRIPTOR
- 我的NopCommerce之旅(5): 缓存
- apache traffic server 编译安装
- [IMX6DL]Linux内核 --- 中断流程小结
- Linux内核在S3C2410平台上移植
- 《开源安全运维平台-OSSIM最佳实践》喜获清华、北大、国家图书馆等国内一流大学图书馆收藏
- Install Seafile Secure Cloud Storage on CentOS 7
- 网站如何整体换角度
- mac install: /usr/bin/unrar: Operation not permitted
- 2.nginx架构及工作流程
- 虚拟机WM中win7和linux间共享目录的另一解决方法
- 大型网站架构技术一览
- Hadoop搭建注意事项