OpenGL编程轻松入门之动画制作
发布时间:2006-05-23 20:09:03 来源:天极开发 网友评论 0 条 到目前为止我们所做的图形全部都是静止的。而OpenGL的是一个可以制作大型3D图形、动画的工具。下面我们做一个可以旋转的立方体。
例16:一个旋转的立方体
myDisplay函数中有一个glutSwapBuffers()函数。此函数交换当前窗口使用层的缓存,它将后台缓存中的内容交换到前台缓存中,该函数执行的结果直到显示器垂直回行扫描后才看得到。必须使用双缓存结构,否则此函数不起任何作用。
myAanimate函数中glutPostRedisplay()函数标记当前窗口需要重新绘制。在glutMainLoop函数的事件处理循环的下一个反复中,将调用该窗口的显示回调函数重绘该窗口的图像层。
在main函数中glutInitDisplayMode中为GLUT_DOUBLE,而我们以前的很多例子为GLUT_SINGLE。main函数中还调用了glutIdleFunc,此函数设置全局空闲回调函数。,从而使GLUT程序可以执行后台任务或连续动画。
例16:一个旋转的立方体
| #include <GL/glut.h> GLfloat X = 10.0f; GLfloat Y = 1.0f; GLfloat Z = 5.0f; void myDisplay(void) { GLfloat diffuse[] = {0.7,0.7,0.0,1.0}; glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor3f(1.0,1.0,1.0); /*绘制立方体*/ glPushMatrix(); glRotatef(X,1.0,0.0,0.0); glRotatef(Y,0.0,1.0,0.0); glRotatef(Z,0.0,0.0,1.0); glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse); glutSolidCube(1.0); glPopMatrix(); glFlush(); glutSwapBuffers();//交换当前窗口使用层的缓存 } void myReshape(int w,int h) { glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.5,1.5,-1.5,1.5); if(w <= h) glOrtho(-2.25,2.25,-2.25*h/w,2.25*h/w,-10.0,10.0); else glOrtho(-2.25*w/h,2.25*w/h,-2.25,2.25,-10.0,10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void myAnimate(void) { X += 1.0; Y += 1.0; Z += 1.0; glutPostRedisplay();//标记当前窗口需要重新绘制 } int main(int argc,char ** argv) { /*初始化*/ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(400,400); glutInitWindowPosition(200,200); /*创建窗口*/ glutCreateWindow("color"); /*绘制与显示*/ glutReshapeFunc(myReshape); glutDisplayFunc(myDisplay); glutIdleFunc(myAnimate);//设置全局空闲回调函数 glutMainLoop(); return(0); } |
myDisplay函数中有一个glutSwapBuffers()函数。此函数交换当前窗口使用层的缓存,它将后台缓存中的内容交换到前台缓存中,该函数执行的结果直到显示器垂直回行扫描后才看得到。必须使用双缓存结构,否则此函数不起任何作用。
myAanimate函数中glutPostRedisplay()函数标记当前窗口需要重新绘制。在glutMainLoop函数的事件处理循环的下一个反复中,将调用该窗口的显示回调函数重绘该窗口的图像层。
在main函数中glutInitDisplayMode中为GLUT_DOUBLE,而我们以前的很多例子为GLUT_SINGLE。main函数中还调用了glutIdleFunc,此函数设置全局空闲回调函数。,从而使GLUT程序可以执行后台任务或连续动画。
- 推荐阅讯
- 基于MVC模式的Struts框架研究与应用
- 雅虎发布自助构建网站应用编程接口
- Visual Studio 2005中的新DataSet特性
- 新华LINUX发布华镭系统桌面版RAYS LX 1.5 B
- 微软量产软件开发协作工具 ALM战略开始
- AJAX:带给开发者们崭新的一片天
- VB2005中开发新一代控制台应用程序
- 30亿元风投点燃导火索 Web2.0血战在即
- Eclipse插件编程之Implementors
- AVS对外开放解码器源代码 可免费下载
- 阅读排行
- 1..net页面间的参数传递简单实例
- 2.VC++与Matlab混合编程之引擎操作详解
- 3.Oracle数据库数据对象分析
- 4.Eclipse3.2+Tomcat5.5.17+Oracle9配置
- 5.Oracle数据库中索引的维护
- 6.在Oracle的网络结构中解决连接问题
- 7.Oracle数据安全面面观
- 8.Oracle数据库的ORA-00257故障解决过程
- 9.Oracle数据库备份与恢复的三种方法
- 10.Oracle与SQL Server在企业应用中的比较
- 专题教程
- Windows Server-Windows Server文档-Windows Server新闻-Windows Ser PostgreSQL-PostgreSQL文档-PostgreSQL新闻-PostgreSQL专家
- WebLogic-WebLogic文档-WebLogic新闻-WebLogic专家 FreeBSD-FreeBSD文档-FreeBSD新闻-FreeBSD专家
- Linux-内核 GUI KDE Gnome DNS FTP 安全 安装-Linux专区 Windows-AD IIS ServerCore 虚拟化 安全 HPC-Windows专区
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
