欢迎登录

OpenGL学习记录(一)——介绍

:2018-09-25    :243 次   :3845 字   

OpenGL作为当前主流的图形API之一,在一些场合具有比DirectX更优越的特性。

(1)    与C语言紧密结合

OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL很容易理解和学习。

(2)    强大的可移植性

微软的Direct3D虽然也是十分优秀的图形API,但它只适用于Windows系统,而OpenGL不仅适用于Windows,还可以用于Unix/Linux等其他系统,它甚至在大型计算机、各种专业计算机上都有应用。并且,OpenGL的基本命令都做到了硬件无关,甚至是平台无关。

(3)    高性能的图形渲染


OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。

总之,OpenGL是一个非常优秀的图形软件接口。

下面对Windows下的OpenGL编程进行简单介绍。

OpenGL的图形库函数封装在动态链接库OpenGL32.DLL中,开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。OpenGL函数命令方式十分有规律,每个库函数均有前缀gl、glu、aux,分别表示该函数属于OpenGL基本库、实用库或辅助库。Windows NT下的OpenGL包含了100多个核心函数,均以gl作为前缀,同时还支持另外四类函数:

OpenGL实用库函数:43个,以glu作为前缀;

OpenGL辅助库函数:31个,以aux作为前缀;

Windows专用库函数(WGL):6个,以wgl作为前缀;

Win32API函数(WGL):5个,无前缀。


一些函数如glColor*()(定义颜色值),函数名后可以接不同的后缀以支持不同的数据类型和格式,如glColor3b()、glColor3d()、glColor3f()和glColor3bv()等,这几个函数在功能上是相似的,只是适用于不同的数据类型和格式,其中3表示该函数带有三个参数,b、d、f分别表示参数的类型是字节型、双精度浮点型和单精度浮点型,v则表示这些参数是以向量形式出现的。

OpenGL定义了一些特殊标识符,如GLfloat、GLvoid,它们其实就是C中的float和void。

一个实例:


#include "stdafx.h"
#include <gl/glut.h>
void Initial(void)
{
	glClearColor(1.0f, 1.0f, 1.0f, 1.0f);      //设置窗口背景颜色为白色
	glMatrixMode(GL_PROJECTION);     //设置投影参数
	gluOrtho2D(0.0, 200.0, 0.0, 200.0);
}
void Display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);   //用当前背景色填充窗口
	glColor3f(1.0f, 0.0f, 0.0f);            //设置当前的绘图颜色为红色
	glRectf(50.0f, 50.0f, 150.0f, 150.0f);    //绘制一个矩形
	glFlush();                         //清空命令缓冲区,执行OpenGL程序
}
void main(int argc, char* argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);  //初始化窗口的显示模式
	glutInitWindowSize(400, 400);                  //设置窗口的尺寸
	glutInitWindowPosition(100, 120);               //设置窗口的位置
	glutCreateWindow("矩形");                    //创建一个名为矩形的窗口
	glutDisplayFunc(Display);                     //设置当前窗口的显示回调函数
	Initial();                                    //完成窗口初始化
	glutMainLoop();                             //启动主GLUT事件处理循环
}


main函数中以glut开头的函数都包含在glut.h中。GLUT库的函数主要执行如处理多窗口绘制、处理回调驱动事件、生成层叠式弹出菜单、绘制位图字体和笔画字体,以及各种窗口管理等任务。

glutInit用来初始化GLUT库并同窗口系统对话协商。

glutInitDisplayMode用来确定所创建窗口的显示模式。参数GLUT_SINGLE 指定单缓存窗口,这也是缺省模式,对应的模式为GLUT_DOUBLE 双缓存窗口。参数GLUT_RGB指定颜色RGBA模式,这也是缺省模式,对应的模式为GLUT_INDEX 颜色索引模式窗口。

glutInitWindowSize 初始化窗口的大小,第一个参数为窗口的宽度,第二个参数为窗口的高度,以像素为单位。

glutInitWindowPosition 设置初始窗口的位置,第一个参数为窗口左上角x的坐标,第二个参数为窗口左上角y的坐标,以像素为单位。屏幕的左上角的坐标为(0,0),横坐标向右逐渐增加,纵坐标向下逐渐增加。

glutCreateWindow 创建顶层窗口,窗口的名字为扩号中的参数。

glutDisplayFunc 注册当前窗口的显示回调函数。当一个窗口的图像层需要重新绘制时,GLUT将调用该窗口的的显示回调函数。在此例中的mydisplay就是显示回调函数,显示回调函数不带任何参数,它负责整个图像层的绘制。我们的大部分工作将集中在这个函数中。

glutMainLoop进入GLUT事件处理循环。glutMainLoop函数在GLUT程序中最多只能调用一次,它一旦被调用就不再返回,并且调用注册过的回调函数。所以这个函数必须放在注册回调函数的后面,此例中为glutDisplayFunc。

    暂无评论,快来抢沙发吧!
×