今天将继续修改OpenGL基础知识(三)中的例子,并进行了一些简单的动画绘制。在编写代码之前先介绍一下函数glutTimerFunc(unsigned int msecs,void (*func) (int value),int value); 这个函数是GLUT库中的函数,主要功能是再等待msecs秒之后,执行func函数,并且可以通过value向这个函数传递参数。

程序代码如下:

#include <GL/glut.h>

//方块初始化
GLfloat x1 = 0.0f;
GLfloat y1 = 0.0f;
GLfloat rsize = 25;

//x轴方向上移动的距离
GLfloat xstep = 1.0f;

//y轴方向上移动的距离
GLfloat ystep = 1.0f;

//窗口宽高变化
GLfloat windowWidth;
GLfloat windowHeight;

void RenderScene(void)
{
 glClear(GL_COLOR_BUFFER_BIT); //清除颜色

glColor3f(1.0f,0.0f,0.0f);    //设置颜色为红色

glRectf(x1,y1,x1+rsize,y1-rsize); //绘制边长为50的矩形

glutSwapBuffers();                    //刷新
}

void TimerFunction(int value)
{
 if(x1 > windowWidth-rsize || x1 < -windowWidth)
  xstep = -xstep;

if(y1 > windowHeight || y1 < windowHeight+rsize)
  ystep = -ystep;

x1 += xstep;
 y1 += ystep;

if(x1 > (windowWidth-rsize+xstep))
  x1 = windowWidth-rsize-1;
 else if(x1 < -(windowWidth+xstep))
  x1 = -windowWidth - 1;

if(y1 > (windowHeight + ystep))
  y1 = windowHeight-1;
 else if(y1 < -(windowHeight-rsize+ystep))
  y1 = -windowHeight+rsize-1;

glutPostRedisplay();
 glutTimerFunc(33,TimerFunction, 1);
}

//当窗口大小变化时调用
void ChangeSize(GLsizei w,GLsizei h)
{
 GLfloat aspectRatio;
 if(0 == h)
  h = 1;

//设置视口大小
 glViewport(0,0,w,h);

//重置坐标系
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();

//建立裁剪区
 aspectRatio = (GLfloat)w / (GLfloat)h;
 if(w <= h)
  glOrtho(-100.0,100.0,-100.0/aspectRatio,100/aspectRatio,1.0,-1.0);
 else
  glOrtho(-100.0*aspectRatio,100.0*aspectRatio,-100.0,100.0,1.0,-1.0);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();

}

//设置渲染
void SetupRC(void)       
{
 glClearColor(0.0f,0.0f,1.0f,1.0f);
}

int main(int argc,char* argv[])
{
 glutInit(&argc,argv);
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
 glutCreateWindow("OpenGL Sample");
 glutDisplayFunc(RenderScene);
 glutReshapeFunc(ChangeSize);
 glutTimerFunc(33,TimerFunction,1);
 SetupRC();
 glutMainLoop();
 return 0;
}

以下是截图:

以上程序展示的是一个运动的正方形。

......

OpenGL基础知识(四)相关推荐

  1. OpenGL基础知识介绍和简单使用

    OpenGL基础知识介绍 OpenGL简介 OpenGL 专业词解析 1.OpenGL上下文[context] 2.渲染 3.顶点数组和顶点缓冲区 4.着色器程序Shader 5.顶点着色器(Vert ...

  2. (七)JS基础知识四(搞定异步)【三座大山之三,必考!!!】

    JS基础知识四(异步) 提问 单线程 应用场景 callback hell和promise 提问 同步和异步的区别是什么 手写用Promise加载一张图片 前端使用的异步的场景有哪些 单线程 JS是单 ...

  3. 跳槽者、应届生必看JAVA面试题系列 - JAVA基础知识(四)

    一: 前言 莫等闲,白了少年头,空悲切. 二: 面试挑战   在文章开始前,首先安利下"面试挑战": 凡是满足下面的挑战条件的,如果一个月内没有拿到一个Offer的,免费提供简历封 ...

  4. C# 基础知识 (四).C#简介及托管代码

            暑假转瞬即逝,从10天的支教生活到1周的江浙沪旅游,在这个漫长的暑假中我经历了很多东西,也学到了很多东西,也认识到了很多不足之处!闲暇之余我准备重新进一步巩固C#相关知识,包括C#入门 ...

  5. post获取重定向的链接 python_【转载】python面试基础知识(四) 网络部分

    最近,小编在整理python面试基础知识,看了很多博客.文章和咨询了一些大厂公司大牛.了解到,在python面试的时候,不仅要求你有项目经验,还要考试代码呢!今天,小编和大家分享一下python面试基 ...

  6. Android OpenGL基础(四、图片后处理)

    一.后处理   在Android OpenGL基础(三.绘制Bitmap纹理)一文中,我们简单介绍了如何把一张图片绘制到四边形上.现在我们可以在绘制原始图片的基础上再实现一些后处理的功能,例如灰度.反 ...

  7. Java基础知识(四) 基本类型与运算

    Java基础知识 基本类型与运算 1. Java提供了哪些基本数据类型 2. 什么是不可变类 3. 值传递与引用传递的区别 4. Math类中的round.ceil和floor方法的功能各是什么 5. ...

  8. OpenGL基础知识

    基本概念 透视(Perspective) 变换(Transformation) 投影矩阵(Projection Matrix):用于将3D坐标转换为2D屏幕坐标 光栅化(Rasterization): ...

  9. Android学习之基础知识四-Activity活动7讲(活动的启动模式)

    在实际的项目开发中,我们需要根据特定的需求为每个活动指定恰当的启动模式.Activity的启动模式一共有4种:standard.singleTop.singleTask.singleInstance. ...

最新文章

  1. win7关闭开机启动项_电脑开机全是各种广告?来看看我怎么解决的吧
  2. oracle怎么导出筛选后的数据,ORACLE,筛选单字段不重复的记录,保留其他字段....
  3. 【BZOJ4821】【SDOI2017】相关分析 [线段树]
  4. python 模糊匹配_很冷门,但非常实用的 Python 库
  5. C#如何反射出委托的签名,如何使用反射调用委托
  6. thinkphp3.2 代码生成并点击验证码
  7. “中国式”盗版该何去何从?
  8. 编写java判断闰年_编写java程序判断闰年。
  9. 对AIOps架构框架比较
  10. 老蒋征婚启示啊啊啊啊啊啊
  11. jpadao层继承什么_实木复合地板特点是什么
  12. OpenCV精进之路(十五):特征检测和特征匹配方法汇总
  13. Linux内存管理--基本概念【转】
  14. SQL中char、varchar、nvarchar的区别
  15. rdlc报表 矩形高固定_什么是 BI?和报表有什么关系?有了 BI 还要做报表吗?
  16. 简易支付系统的架构设计
  17. Performance Test Framework (PTF)是压力测试框架(轩)
  18. lca rmq 算法资料
  19. 【洛谷 P3191】 [HNOI2007]紧急疏散EVACUATE(二分答案,最大流)
  20. 無間道III 終極無間

热门文章

  1. 一零四一、海康威视希捷紫盘查询序列号
  2. 夜神模拟器和电脑如何互进行文件传输
  3. 基于51单片机的信号发生器设计
  4. 我的java开发总结
  5. mac运行ps特别慢_Mac Mac运行越来越慢?变卡顿?试试看这些加快小诀窍!
  6. 剑指 Offer 52—— 两个链表的第一个公共节点
  7. unity碰撞检测的几种函数
  8. 小米2019秋招软件开发笔试题A选择部分解析
  9. 了解DN、RDN和CN
  10. Http发送get、post、delete、put请求