关于openGL之一

2018-12-05
关于openGL之一

一.openGL是什么?
在此之前,我也在知乎上看了一些大家对于openGL 的理解,对于同样是小白的我,大致总结了以下几点给大家参考:
1.OpenGL只是关注于怎么调用接口实现绘画
2.它主要为我们定义了用来操作图形和图片的一系列函数的API,需要注意的是OpenGL本身并非API
3. 它是指定义了一组接口,不包含实现。一般来说我们提到 OpenGL 的时候说的都是规范的定义,不包含实现。
4. OpenGL不是一种编程语言,而是应用程序编程接口,图形与硬件的接口,包含了多个图形函数
二.用openGL绘制图形
本次我做的是移动的矩形
下面是源代码:

//MoveRect.c 在窗口绘制移动的矩形
#include <windows.h>
#include <gl/glut.h>
#include<gl/gl.h>
#include<gl/glu.h>
// 参数指定正方形的位置和大小
GLfloat x1 = 100.0f;
GLfloat y1 = 150.0f;
GLsizei rsize = 50;//边长是50
// 正方形运动变化的步长
GLfloat xstep = 1.0f;//x方向移动1.0
GLfloat ystep = 1.0f;//y方向移动1.0
//窗口的大小
GLfloat windowWidth;
GLfloat windowHeight;


//1.在窗口绘制需要的图形
void RenderScene(void)
{
 glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(1.0f, 1.0f, 1.0f);//正方形的颜色为白色
 glRectf(x1, y1, x1+rsize, y1+rsize);//绘制正方形,参数为左下角和右下角的坐标

 //清空命令缓存区并交换帧缓存
 glutSwapBuffers();
}

//2.窗口大小改变时调用的登记函数
void ChangeSize(GLsizei w, GLsizei h)
{
 if(h == 0) h = 1;

glViewport(0, 0, w, h);

 glMatrixMode(GL_PROJECTION);
 glLoadIdentity(); 

if (w <= h)
 {
 windowHeight = 250.0f*h/w;
 windowWidth = 250.0f;
 }
 else
 {
 windowWidth = 250.0f*w/h;
 windowHeight = 250.0f;
 }
 glOrtho(0.0f, windowWidth, 0.0f, windowHeight, 1.0f, -1.0f);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
}

void TimerFunction(int value)
{
 // 处理到达窗口边界的正方形,使之反弹
 if(x1 > windowWidth-rsize || x1 < 0) xstep = -xstep;
 if(y1 > windowHeight-rsize || y1 < 0) ystep = -ystep;
 if(x1 > windowWidth-rsize) x1 = windowWidth-rsize-1;
 if(y1 > windowHeight-rsize) y1 = windowHeight-rsize-1;
 // 根据步长修改正方形的位置
 x1 += xstep;
 y1 += ystep;

 // 用新坐标重新绘图
 glutPostRedisplay();
 glutTimerFunc(33,TimerFunction, 1);
}

//4.常用来初始化,常用来设置场景渲染状态
void SetupRC(void)
{
 //设置窗口清除色为蓝色
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
}

//主函数
int main(void)
{
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);//窗口初始化为双缓冲区
 glutCreateWindow("MoveRect"); //创建窗口

 glutDisplayFunc(RenderScene);
 glutReshapeFunc(ChangeSize);
 glutTimerFunc(330, TimerFunction, 1);//每330毫秒

 SetupRC();
 glutMainLoop();
} 

运行结果截图:
在这里插入图片描述
在这里插入图片描述

由于这是个动态的图,所以只能截到这样的,大家可以复制我的代码玩一下哦。啾咪~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值