本站首页    管理页面    写新日志    退出


«July 2025»
12345
6789101112
13141516171819
20212223242526
2728293031


公告

☆★☆★☆★☆★☆★☆
生活的点点记录,以及一些体会...........

喜欢是淡淡的爱,爱是深深的喜欢.

时间会见证一切.......................

欢迎大家指出错误,共同进步..........

期待中..............................

☆★☆★☆★☆★☆★☆


我的分类(专题)

日志更新

最新评论

留言板

链接

世纪音频

 

 


Blog信息
blog名称:
日志总数:162
评论数量:312
留言数量:0
访问次数:941425
建立时间:2005年5月17日




[opengl study process]GLUT教程(四)
文章收藏

oceanblue 发表于 2008/9/24 21:53:12

 转载http://blog.csdn.net/xie_zi  GLUT教程                       动画 到现在为止,我们有了一个画着一个白色三角形的OpenGL窗口,但一点也不激动人心。现在让我们在这节教程里,让这个三角形自己旋转起来。   让我们回到main()函数,增加些额外的设置。首先告诉GLUT我们想要一个双缓冲区。双缓冲区通过在后一个缓冲区里绘画,并不停交换前后缓冲区(可见缓冲区),来产生平滑的动画。使用双缓冲区可以预防闪烁。 …………. glutInitDisplayMode(GL_DEPTH|GLUT_DOUBLE|GLUT_RGBA); ………… 接着我们要做的是告诉GLUT,当应用程序空闲的时候渲染函数应该被调用。这导致GLUT一直调用渲染函数而产生动画。GLUT提供了一个函数:glutIdleFunc.这个函数使另一个函数在程序空闲的时候就会被调用。 void glutIdleFunc(void(*func)(void)); 参数: func:在程序空闲的时候就会被调用的函数的函数名。 按照我们的想法,当程序空闲时应该调用的函数是我们先前定义的渲染函数: renderScene。由于OpenGL默认没有开启深度测试,我们还要开启它,这样我们才能知道哪个物体在前面,哪个物体在后面。深度测试的开启在main()函数里,下面看看现在的main函数。void main(int argc, char **argv) {         glutInit(&argc, argv);                  // 在这里设置双缓冲区。         glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);                  glutInitWindowPosition(100,100);         glutInitWindowSize(320,320);         glutCreateWindow("3D Tech- GLUT Tutorial");         glutDisplayFunc(renderScene);                  // 这里让程序空闲时调用renderScene,         glutIdleFunc(renderScene);                  glutReshapeFunc(changeSize);                  //开启深度测试。         glEnable(GL_DEPTH_TEST);         glutMainLoop();} 下面就是设置渲染函数renderScene。我们定义了一个浮点型变量并初始化为0.0,下面在renderScene函数加一些必须的东西。  float angle=0.0; void renderScene(void) {          //注意我们这里清除了深度缓冲区。         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);                  //保存当前模型视图矩阵。         glPushMatrix();                 glRotatef(angle,0.0,1.0,0.0);         glBegin(GL_TRIANGLES);                 glVertex3f(-0.5,-0.5,0.0);                 glVertex3f(0.5,0.0,0.0);                 glVertex3f(0.0,0.5,0.0);         glEnd();                  // 弹出堆栈         glPopMatrix();                  // 交换缓冲区         glutSwapBuffers();                  // 让angle自动增加。         angle++;} glutSwapBuffers函数交换了前后缓冲区,函数原型如下: void glutSwapBuffers(); 好了,我们得到了一个旋转的三角形,你可以下载这个VC工程在这里(glut2.zip)。很棒吧?。但再次说下,我们不会渲染一些十分精美的画面,这是为了保持代码的简洁。也因为主要是学习GLUT。


阅读全文(2381) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144771886 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号