OpenGL图形软件包

OpenGL(Open Graphics Library,开放图形库)是图形硬件的一个软件接口,它实现了各种二维和三维的高级图形处理技术,是实现逼真的三维效果与建立交互式三维景观的强大工具。OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL库,由于性能良好,该库在跨平台的移植中发展成为OpenGL,并于1992年6月发布1.0版。目前,OpenGL规范由ARB(OpenGL Architecture Review Board,OpenGL结构评审委员会)负责管理,成员包括了SGI、Microsoft、Intel、IBM、Sun、HP等知名的软硬件公司。委员会通过投票产生规范,并制成文档公布,各软硬件厂商以此为基础在各自的系统上予以实现。由于OpenGL的广泛应用,它已经成为一个事实上的工业标准。 

OpenGL的主要功能

    OpenGL作为一个性能优越的图形应用程序设计接口(API),它主要具有以下功能。
    模型绘制:OpenGL能够绘制点、线和多边形。应用这些基本的形体,可以构造出几乎所有的三维模型。此外,OpenGL函数库还提供了球、多面体、茶壶等复杂物体以及贝赛尔、NURBS等曲线曲面的绘制函数。
    模型观察:在建立了三维景物模型后,可以用OpenGL描述如何观察所建立的三维模型。观察三维模型需要建立一系列的变换,包括坐标变换、投影变换和视窗变换等。通过坐标变换可以使观察者观察到与视点位置相适应的三维模型景观。投影变换则决定观察三维模型的观察方式,不同的投影变换得到的三维模型的景象也是不同的。最后,视窗变换对模型的景象进行裁剪缩放,决定整个三维模型在屏幕上的图像
    颜色模式:OpenGL提供了两种颜色模式,即RGBA模式和颜色索引模式。在RGBA模式中,颜色直接由RGB值来指定;在颜色索引模式中,颜色值则由颜色表中的一个颜色索引值来指定。此外,三维物体在着色时还可以选择平面着色和光滑着色二种着色方式。
    光照应用:用OpenGL绘制的三维模型必须加上光照才能与客观物体更加相似,物体色彩的表现是光照条件与物体材质属性相互作用的结果。OpenGL提供了管理辐射光(Emitted Light)、环境光(Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light),以及指定模型表面的反射特性,即材质属性的方法。
    图像效果增强:OpenGL提供了一系列的增强三维景观的图像效果的函数,这些函数包括反走样、混合和雾化。反走样用于改善图像中线图形的锯齿而使其更平滑。混合用于处理模型的半透明效果。雾化使得影像从视点到远处逐渐褪色,更接近于真实。
    位图和图像处理:OpenGL提供一系列专门对位图和图像进行操作的函数。位图和图像数据均采用像素的矩阵表示。
    纹理映射:三维景物通常因缺少景物的具体细节而显得不够真实。为了更加逼真地表现三维景物,OpenGL提供了纹理映射的功能。OpenGL提供的一系列纹理映射函数可以十分方便地把真实图像贴到景物的多边形上,从而绘制逼真的三维景观。
    实时动画:OpenGL采用了双缓存技术(double buffer),并为其提供了一系列函数。
    交互技术:OpenGL提供了方便的三维图形人机交互接口,用户可以通过输入设备选择以及修改三维景观中的物体。


OpenGL的绘制流程

    OpenGL的绘制流程通常如图2-38所示,应用软件调用OpenGL API函数进行图形绘制,OpenGL函数将绘制命令(含命令、顶点数据和纹理数据等)传送到命令缓冲区中,命令缓冲区中的几何顶点数据通常还要进行几何变换和光照计算,以及通过指定的方法进行投影,然后与其它数据一起送到光栅化流程中,光栅化根据图形的几何形状、颜色和纹理数据产生一系列图像的帧缓存地址和像素点值,光栅化的结果最后被放置在帧缓冲存储器中,这样图像就显示在屏幕上了。注意,只有当命令缓冲区被清空时,缓冲区中的命令和数据才会传递给流水线的下一个阶段,OpenGL命令才会被执行。


图2-44 一条简化的OpenGL绘制流水线

 

基本的OpenGL语法

1.相关库
    OpenGL核心库OpenGL核心库中包含了115个最基本的命令函数,它们都是以“gl”为前缀,可以在任何OpenGL的工作平台上应用。这部分函数用于常规的、核心的图形处理,如建立各种各样的几何模型,产生光照效果,进行反走样,以及进行投影变换等等。
    OpenGL实用程序库:OpenGL的实用程序库包含43个函数,以“glu”为前缀,在任何OpenGL平台都可以应用。这部分函数通过调用核心库的函数,来实现一些较为复杂的操作,如纹理映射、坐标变换、网格化、曲线曲面以及二次物体(圆柱、球体等)的绘制等。
    OpenGL编程辅助库:OpenGL的辅助库包含31个函数,以“aux”为前缀,但它们不能在所有的OpenGL平台上使用。OpenGL的辅助库的函数主要用于窗口管理、输入输出处理以及绘制一些简单的三维形体。
    OpenGL实用程序工具包:OpenGL实用程序工具包(OpenGL utility toolkit,GLUT)包含30多个函数,函数名前缀是“glut”。其中的函数主要提供基于窗口的工具,如窗口系统的初始化,多窗口管理,菜单管理,字体以及一些较复杂物体的绘制等。由于glut库中的窗口管理函数是不依赖于运行环境的,因此OpenGL实用程序工具包可以在所有的OpenGL平台上运行,在后面的示例中,我们均使用glut包建立OpenGL程序运行框架。
    Windows专用库:Windows专用库函数包含有6个,每个函数以wgl开头,用于连接OpenGL和Windows NT,这些函数用于Windows NT环境下使OpenGL窗口能够进行渲染着色,在窗口内绘制位图字体以及把文本放在窗口的某一位置等,这些函数把Windows和OpenGL揉合在一起。

2.命名规则
    OpenGL函数都遵循一个命名约定,通过这个约定可以了解函数来源于哪个库,需要多少个参数以及参数的类型。命名规则格式如下:

<库前缀><根命令><可选的参数个数><可选的参数类型>

    例如函数glColor3f,gl表示这个函数来自核心库gl.h,color是该函数的根命令,表示该函数用于颜色设定,3f表示这个函数采用了三个浮点数参数。这种把参数数目和参数类型加入OpenGL函数结尾的约定使人们更容易记住参数列表而无需查找它。

3.数据类型
    由于OpenGL具有平台无关性,而不同机器的数据类型的描述范围有可能不同,因此OpenGL定义了自己的数据类型。这些数据类型可以映射为常规的C数据类型,下表列出了在OpenGL中定义的数据类型。

表2-1 OpenGL变量类型和相应的C数据类型

 

程序实例

程序2-1 OpenGL绘图矩形的简单例子

#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,150.0);
}
 
void Display(void)
{
	glClear(GL_COLOR_BUFFER_BIT);   //用当前背景色填充窗口
	glColor3f(1.0f, 0.0f, 0.0f);            //设置当前的绘图颜色为红色
	glRectf(50.0f, 100.0f, 150.0f, 50.0f);    //绘制一个矩形
	glFlush();                         //处理所有的OpenGL程序
}
 
int main(int argc, char* argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);  //初始化窗口的显示模式
	glutInitWindowSize(400,300);                  //设置窗口的尺寸
	glutInitWindowPosition(100,120);               //设置窗口的位置
	glutCreateWindow("矩形");                    //创建一个名为矩形的窗口
	glutDisplayFunc(Display);                     //设置当前窗口的显示回调函数
	Initial();                                    //完成窗口初始化
	glutMainLoop();                             //启动主GLUT事件处理循环
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值