代码:

#include<iostream>
#include <math.h>
#include<Windows.h>
#include <GL/glut.h> using namespace std; const double TWO_PI = 6.2831853; GLsizei winWidth = , winHeight = ;
GLuint regHex;
static GLfloat rotTheta; class scrPt {
public:
GLint x, y;
}; void init()
{
scrPt hexVertex;
GLdouble hexTheta; glClearColor(1.0, 1.0, 1.0, 0.0);
//创建1个显示列表
regHex = glGenLists();
//编译显示列表
glNewList(regHex, GL_COMPILE);
glColor3f(209.0 / 255.0, 73.0 / 255.0, 78.0 / 255.0);
glBegin(GL_POLYGON);
for (GLint k = ; k < ; k++) {
hexTheta = TWO_PI * k / ;
hexVertex.x = + * cos(hexTheta);
hexVertex.y = + * sin(hexTheta);
glVertex2i(hexVertex.x, hexVertex.y);
}
glEnd();
glEndList();
} void displayHex()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
//旋转操作
glRotatef(rotTheta, 0.0, 0.0, 1.0);
//执行显示列表
glCallList(regHex);
glPopMatrix();
//互换缓存
glutSwapBuffers();
glFlush();
} //计算增加的旋转角度
void rotateHex()
{
rotTheta += 3.0;
if (rotTheta > 360.0) {
rotTheta -= 360.0;
}
//标记当前窗口需要重新绘制
//通过glutMainLoop下一次循环时,窗口显示将被回调以重新显示窗口的正常面板
glutPostRedisplay();
} void winReshapeFcn(GLint newWidth, GLint newHeight)
{
glViewport(, , (GLsizei)newWidth, (GLsizei)newHeight); glMatrixMode(GL_PROJECTION);
//重置当前指定的矩阵为单位矩阵,相当于复位操作
glLoadIdentity();
gluOrtho2D(-320.0, 320.0, -320.0, 320.0); glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);
} void mouseFcn(GLint button, GLint action, GLint x, GLint y)
{
switch (button) {
case GLUT_LEFT_BUTTON: //鼠标左键,开始旋转
if (action == GLUT_DOWN) {
//全局的回调函数,如果启用则rotateHex会被不断调用,直到有窗口事件发生
glutIdleFunc(rotateHex);
}
break;
case GLUT_RIGHT_BUTTON: //鼠标右键,停止旋转
if (action == GLUT_DOWN) {
//参数为NULL说明不改变
glutIdleFunc(NULL);
}
break;
defalut:
break;
}
} int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(, ); glutInitWindowSize(winWidth, winHeight);
glutCreateWindow("第一个动画程序");
init();
glutDisplayFunc(displayHex);
glutReshapeFunc(winReshapeFcn);
glutMouseFunc(mouseFcn);
glutMainLoop(); system("pause");
return ;
}

运行结果:

OpenGL——旋转的六边形(动画)的更多相关文章

  1. 用css3制作旋转加载动画的几种方法

    以WebKit为核心的浏览器,例如Safari和Chrome,对html5有着很好的支持,在移动平台中这两个浏览器对应的就是IOS和Android.最近在开发一个移动平台的web app,那么就有机会 ...

  2. Canvas 图片绕边旋转的小动画

    /** * 图片绕边旋转的小动画 */ function initDemo10() { var canvas = document.getElementById("demo10") ...

  3. OpenGL旋转平移 变换

    #include<gl/glut.h> #include<gl/GL.h> #include<gl/GLU.h> #include<math.h> #i ...

  4. QPropertyAnimation实现图形,控件的旋转和位移动画,尤其是旋转

    QPropertyAnimation可以简单方便的实现对象的旋转和移动的动画效果. 1. 移动 Pixmap *item = new Pixmap(kineticPix); QPropertyAnim ...

  5. 代码创建 WPF 旋转、翻转动画(汇总)

    先建立一个button <Button Width="80" Height="60" Content="旋转" Name=" ...

  6. WPF 鼠标移动时触发图片旋转(非动画)

    非动画,只是简单的触发器. 主要是针对旋转的写法. 代码 <Grid> <Image x:Name="image" Source="nifi3.gif& ...

  7. 第04课 OpenGL 旋转

    旋转: 在这一课里,我将教会你如何旋转三角形和四边形.左图中的三角形沿Y轴旋转,四边形沿着X轴旋转. 上一课中我教给您三角形和四边形的着色.这一课我将教您如何将这些彩色对象绕着坐标轴旋转.其实只需在上 ...

  8. openGL 旋转的图形 矩阵操作

    #include <windows.h> #ifdef __APPLE__ #include <GLUT/glut.h> #else #include <GL/glut. ...

  9. swift 旋转加载动画

    https://github.com/naoyashiga/RPLoadingAnimation

随机推荐

  1. android:碎片的生命周期

    和活动一样,碎片也有自己的生命周期,并且它和活动的生命周期实在是太像了,我相 信你很快就能学会,下面我们马上就来看一下. 4.3.1    碎片的状态和回调 还记得每个活动在其生命周期内可能会有哪几种 ...

  2. docker使用大全 tomcat安装

    um install docker #安装docker docker search tomcat docker pull docker.io/tomcat # 安装tomcat镜像 docker im ...

  3. vs2010编译错误(报错:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏)

    报错:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 1> 这段时间忙于看文献,没用过VS了. 今天用着用着就报错了: LINK : fat ...

  4. 发布库到仓库 maven jcenter JitPack MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. Linux下RocketMQ环境的配置

    RocketMQ是一款分布式消息系统,最初是由阿里巴巴消息中间件团队研发并大规模应用于生产系统,满足线上海量堆积的需求,在去年捐赠给Apache开源基金会,并列为孵化项目,今年成功的正式成为了apac ...

  6. 一篇文章让你学透Linux系统中的more命令

    Linux 下有很多实用工具可以让你在终端界面查看文本文件.其中一个就是 more. more 跟我之前另一篇文章里写到的工具 —— less 很相似.它们之间的主要不同点在于 more 只允许你向前 ...

  7. 从YOLOv1到YOLOv3,目标检测的进化之路

    https://blog.csdn.net/guleileo/article/details/80581858 本文来自 CSDN 网站,作者 EasonApp. 作者专栏: http://dwz.c ...

  8. about the libiconv.2.dylib

    https://stackoverflow.com/questions/5835847/libiconv-2-dylib-mac-os-x-problem https://blog.csdn.net/ ...

  9. 解决《UNIX环境高级编程》(APUE)示例代码的编译问题

    转自 http://cunsheng.sinaapp.com/?p=360 APUE中示例很多, 把这些源码拿来跑跑调调对学习理解有着莫大的帮助, 随书网站就提供了源码下载, 不过我自己在Linux和 ...

  10. c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数

    每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数).对于任意一个类A,如果不编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如: A ...