代码:

#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. Matplotlib新手上路(中)

    接上回继续 一.多张图布局(subplot) 1.1 subplot布局方式 import matplotlib.pyplot as plt plt.figure() plt.subplot(3, 2 ...

  2. Android + Eclipse + PhoneGap 2.9.0 安卓最新环境配置,部分资料整合网上资料,已成功安装.

    前言:最近心血来潮做了一个以品牌为中心的网站,打算推出本地服务o2o应用.快速开发手机应用,最后选择了phonegap,这里我只是讲述我安装的过程,仅供大家参考. 我开发的一个模型http://www ...

  3. Shell脚本编程实战一:创建按天备份的脚本工具

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8241256.html 一:准备工作:创建归档目录 与  归档配置文件 归档目录:创建一个仓库目录,专门用于存放 ...

  4. 蓝牙发现服务UUID(service UUID)

    出至<蓝牙标准Core_V4.0>2.5.1 uuid(1576页) 其中 Bluetooth_Base_UUID定义为 00000000-0000-1000-8000-00805F9B3 ...

  5. echarts 通过dom获取echarts实例,批量监听reset

    重点在于 echarts.getInstanceByDom 这个 API 我的js: // 懒加载优化:滚动节流策略 var __SCROLLTIMER__ = null // 重新设置 echart ...

  6. Spark 底层网络模块

    文章正文 对于分布式系统来说,网络是最基本的一环,其设计的好坏直接影响到整个分布式系统的稳定性及可用性.为此,Spark专门独立出基础网络模块spark-network,为上层RPC.Shuffle数 ...

  7. DUAL PORT RAM应用实例

    作者:桂. 时间:2018-05-14  12:11:00 链接:http://www.cnblogs.com/xingshansi/p/9035522.html 前言 主要是Xilinx 常用模块汇 ...

  8. [MySQL]对于事务并发处理带来的问题,脏读、不可重复读、幻读的理解

    一.缘由 众所周知MySQL从5.5.8开始,Innodb就是默认的存储引擎,Innodb最大的特点是:支持事务.支持行级锁. 既然支持事务,那么就会有处理并发事务带来的问题:更新丢失.脏读.不可重复 ...

  9. js绝对地址图片转换成base64的方法

    //将图片转换成base64 function getBase64Image(url, callback){ var canvas = document.createElement('canvas') ...

  10. LeetCode: First Missing Positive 解题报告

    First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...