dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>C/C++>C/C++技术资料>文章内容
OpenGL编程轻松入门之动画制作
来源: 天极开发 作者: 黄燕
  到目前为止我们所做的图形全部都是静止的。而OpenGL的是一个可以制作大型3D图形、动画的工具。下面我们做一个可以旋转的立方体。

  例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可以执行后台任务或连续动画。

上一篇:VC++开发的应用技巧三则放送   下一篇:OpenGL编程轻松入门之菜单管理
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·C语言数组排序小结
·Python 与 C++ 程序的简单实例对
·c++ 数组与指针
·C++中的内存管理(new、delete、
·如何用C语言开发DSP嵌入式系统
·如何用C语言开发DSP嵌入式系统
·Linux下C语言编程
·学习arm的话先看哪本书?
·C++初学者应该关心的优秀图书一
·利用C语言小程序来解决大问题
·用C语言写PHP扩展的步骤
·用C语言扩展PHP功能
  相关文章
·VC++开发的应用技巧三则放送
·OpenGL编程轻松入门之菜单管理
·VC++实现非窗口类中使用定时器的
·用Visual C++设计“精灵”窗体
·VC++实现工具栏上添加平面组合框
·VC++实现Windows回收站的文件存
·Visual C++程序设计中的API和SDK
·在应用程序中播放声音资源文件
·VC++中利用/GS开关防止缓冲区溢
·VC++设计基于ODBC的数据库管理系
·用Visual C++实现PDF文件的显示
·在VC中添加响应自定义的消息的代
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763