OpenGL——旋转的六边形(动画)
代码:
#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——旋转的六边形(动画)的更多相关文章
- 用css3制作旋转加载动画的几种方法
以WebKit为核心的浏览器,例如Safari和Chrome,对html5有着很好的支持,在移动平台中这两个浏览器对应的就是IOS和Android.最近在开发一个移动平台的web app,那么就有机会 ...
- Canvas 图片绕边旋转的小动画
/** * 图片绕边旋转的小动画 */ function initDemo10() { var canvas = document.getElementById("demo10") ...
- OpenGL旋转平移 变换
#include<gl/glut.h> #include<gl/GL.h> #include<gl/GLU.h> #include<math.h> #i ...
- QPropertyAnimation实现图形,控件的旋转和位移动画,尤其是旋转
QPropertyAnimation可以简单方便的实现对象的旋转和移动的动画效果. 1. 移动 Pixmap *item = new Pixmap(kineticPix); QPropertyAnim ...
- 代码创建 WPF 旋转、翻转动画(汇总)
先建立一个button <Button Width="80" Height="60" Content="旋转" Name=" ...
- WPF 鼠标移动时触发图片旋转(非动画)
非动画,只是简单的触发器. 主要是针对旋转的写法. 代码 <Grid> <Image x:Name="image" Source="nifi3.gif& ...
- 第04课 OpenGL 旋转
旋转: 在这一课里,我将教会你如何旋转三角形和四边形.左图中的三角形沿Y轴旋转,四边形沿着X轴旋转. 上一课中我教给您三角形和四边形的着色.这一课我将教您如何将这些彩色对象绕着坐标轴旋转.其实只需在上 ...
- openGL 旋转的图形 矩阵操作
#include <windows.h> #ifdef __APPLE__ #include <GLUT/glut.h> #else #include <GL/glut. ...
- swift 旋转加载动画
https://github.com/naoyashiga/RPLoadingAnimation
随机推荐
- Linux的SSH免密登录认证过程研究
一.先看下SSH免密登录使用到的工具和生成的文件 工具:ssh-keygen用于生成秘钥文件,其中秘钥分为公钥和私钥.ssh-copy-id用于复制公钥文件到被控制机. 文件:ssh-keygen生成 ...
- 在 Python 中使用 in_memory 工作空间
在 Python 中使用 in_memory 工作空间 在 Python 脚本中,in_memory 工作空间仅对地理处理工具有效:它不是可以写入任何数据的通用虚拟目录. 您可以按以下代码示例所示使用 ...
- HTML:Browser 对象
ylbtech-HTML:Browser 对象 1.返回顶部 1. Window 对象 Window 对象表示浏览器中打开的窗口. 如果文档包含框架(frame 或 iframe 标签),浏览器会为 ...
- ubuntu crontab 在时间段内随机执行一次
crontab 在linux下做定时任务的命令, 1. 基本格式 * * * * * cmd 第一个表示:分钟 1-59, 每分钟用 */1 第二个表示:小时 023 第三个表示:日期1-31 第四个 ...
- VirtualBox中出现UUID have already exists 解决方法
虚拟机更换VDI文件,启动时会出现 "UUID already exists"的错误,这是因为删除虚拟机时候没有选择"删除所有",只是选择移除造成的. 方法一: ...
- 解决nginx access日志中400 bad request 错误(转)
在access.log中有大量400错误,并以每天几百M的速度增加,占用大量空间.tail -f /opt/nginx/logs/access.log 116.236.228.180 - - [15/ ...
- 自建Kubernetes logtail日志采集客户端安装方式
自建Kubernetes安装方式 前提条件 Kubernetes集群版本1.8及以上. 已经安装Helm命令,版本2.6.4及以上. 安装步骤 在日志服务控制台创建一个Project,Project名 ...
- 【Android】详解Android Activity
目录结构: contents structure [+] 创建Activity 如何创建Activity 如何创建快捷图标 如何设置应用程序的名称.图标与Activity的名称.图标不相同 Activ ...
- Ubuntu 13.10 录音有特别大噪音解决办法
现在物理机跑Ubuntu,平常的QQ只能在虚拟机里跑了:起初和别人QQ语音,别人能听到很大的噪音,以为是虚拟机的回音,属于正常现象,结果我用虚拟机里边的录音工具和Ubuntu里的录音工具测试一下,发现 ...
- Nuget 配置文件的位置
最近在 Visual Studio 中使用 Nuget 时,发现总是连接代理服务器,忘了什么时候配置的了,找了半天没找到配置位置,最后发现在这个地方: %appdata%\NuGet 找到 NuGet ...