OpenGL系列教程(2)——OpenGL基础(1)

本篇将阐述OpenGL的基础知识。内容整理自OpenGL编程宝典。

先简要说明一下OpenGL的历史:
    OpenGL的前身是SGI公司的IRIS GL,它最初是一个2D图形函数库,后来逐渐演变为这家公司的高端图形工作站使用的3D图形编程接口。由于IRIS GL对硬件依赖性极高导致难以移植,其技术发展常常受到束缚,于是便诞生了OpenGL。
    OpenGL就是SGI对IRIS GL的移植性进行改进和提高的结果。这个新的图形API是一个开放的标准,允许其他图形硬件厂商参与标准的制定。一个得到众多厂商支持真正的开放式标准能使程序员更容易创建出跨平台的应用程序。这样OpenGL体系结构审核委员会(ARB)就成立了。
    ARB的创立者包括SGI,DEC,IBM,Intel和微软公司,而实质上由SGI主导。1992年7月1日,OpenGL规范1.0出台。 随着时间推移,ARB陆续地增加了一些新成员。ARB每隔4年召开一次会议,以改进和维护OpenGL规范,并对OpenGL标准进行升级。
    由于某些原因, SGI公司的业务不断下滑,最后破产的SGI公司把OpenGL标准的控制权移交给了一个新的工作组——
Khronos Group,而大多数ARB成员已经成为Khronos的成员了。直至今日,OpenGL规范仍由Khronos Group进行维护和升级。

以上是OpenGL的发展历史概述。

下面进入正文。

OpenGL有两部分组成,一部分是OpenGL规范,也可称为OpenGL标准,这是由
Khronos Group制定的。规范只定义了OpenGL的特征和行为,比如它应该具有哪些函数,这些函数之间如何协调工作之类,并不包含代码实现。另一部分则是实现,这个部分是交由图形硬件厂商完成的。图形硬件厂商从Khronos Group那里获取规范,然后根据规范开发出相应的硬件和驱动程序。 至此,软件开发人员便可按照规范调用硬件厂商实现的所有OpenGL功能,来开发3D应用程序。

OpenGL具有扩展机制,这是为了图形硬件厂商能为自己生产的显卡添加新功能而制定的。3D图形领域的竞争十分激烈,倘若OpenGL不支持扩展,函数是完全固定的,那么图形硬件厂商就无法为自己的显卡添加与众不同的功能,只能在现有的功能上做不断的改进和优化,这对于计算机图形学的发展是极其不利的。正因为如此,
Khronos Group允许图形硬件厂商通过扩展机制进行创新,图形硬件厂商只需要在OpenGL工作组(Khronos旗下的一个机构)注册它们的扩展,并提供一个扩展的头文件即可。

在使用GLEW的情况下,你可以找到一些OpenGL函数,其函数名在末尾处会有诸如NV、AMD、ARB、EXT等字样,这便是图形硬件厂商利用OpenGL扩展机制添加进来的新函数。从字面可以理解,例如NV结尾的函数是由英伟达(nVidia)提供的,AMD是由AMD公司提供的。这里需要解释一下ARB和EXT。EXT意指这个扩展函数与特定的图形硬件厂商无关,能被多数显卡支持;而ARB则代表这个扩展即将被加入OpenGL规范,能被几乎所有显卡支持。

在使用某一个扩展功能时,需要先确认这个功能是否被当前显卡所支持。如果你使用的计算机安装了英伟达的显卡,那么必然有许多AMD的扩展就不能使用。具体如何确认不是本篇的讨论范围,因此不再叙述。

随着各种OpenGL扩展逐渐从特定厂商支持升级到EXT再升级到ARB最后成为标准,OpenGL的函数库变得庞大而又复杂。作为一个图形接口,在升级的过程中必须要保持向下兼容性,即高版本的OpenGL也能使用低版本的函数,以保证过去的程序还能在新的系统上正常运作。然而这些老旧的函数多半是性能低下而且冗余的,在高版本的OpenGL上并不应该使用它们,但还是有不少程序员依然在使用这些函数。于是,在OpenGL3.0标准中,Khronos将这些老旧的函数标记为“不鼓励使用”的函数,以告知程序员不应该使用它们。

而OpenGL3.1遇到了前所未有的苛刻要求, 
Khronos直接将这些老旧函数从OpenGL规范中移除,但是却引入了一个OpenGL扩展GL_ARB_compatibility。这意味着图形硬件厂商可以在OpenGL3.1驱动中不包含任何老旧函数。这让软件开发商十分头疼,因为这将导致曾经开发的图形产品和技术将成为废弃物。许多软件开发人员开始指责这种行为,与此同时,英伟达明确表明自己不会废除任何老旧函数。

因此在OpenGL3.2时, 
Khronos做出了妥协。它废除了GL_ARB_compatibility扩展,取而代之将OpenGL分成了核心框架和完整框架。完整框架包含了一切最陈旧的函数和最新的函数,而核心框架只包含推荐使用的函数。

事实上,那些不被鼓励使用的老旧函数对于开发人员来说却更容易理解。虽然它们的效率不如那些被推荐的函数,但是在使用上更为方便。诸如glBegin,glVertex,glColor,glMatrixMode等,这些老旧函数依然在不少图形学教材中被当作典例使用。而在本系列的教程中,我们将不涉及这些老旧函数,只涉及OpenGL核心框架。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NEHE的OPENGL教程 第42课 多视窗口… NEHE的OPENGL教程 第42课 多视窗口… NeHe的OPENGL中文教程:第41课 体… NeHe的OPENGL中文教程:第40课 绳… NeHe的OPENGL中文教程:第39课 物… NeHe的OPENGL中文教程:第39课 物… NeHe的OPENGL中文教程:第38课 从… NeHe的OPENGL中文教程:第37课 卡… 愚人节十大IT假新闻:Opera浏览器… NeHe的OPENGL中文教程:第36课 放… NeHe的OPENGL中文教程:第35课 AVI… NeHe的OPENGL中文教程:第35课 AVI… NeHe的OPENGL中文教程:第34课 从… NeHe的OPENGL中文教程:第33课 加… NeHe的OPENGL中文教程:第32课 Alp… NeHe的OPENGL中文教程:第32课 Alp… NeHe的OPENGL中文教程:第32课 Alp… NeHe的OPENGL中文教程:第31课 模… NEHE的OPENGL中文教程:第30课 碰… NEHE的OPENGL中文教程:第30课 碰… NeHe的OPENGL中文教程:第29课 Bli… NeHe的OPENGL中文教程:第28课 贝… NeHe的OPENGL中文教程:第27课 影… NeHe的OPENGL中文教程:第26课剪裁… NeHe的OPENGL中文教程:第25课 变… NeHe的OPENGL中文教程:第24课 TAG… NeHe的OPENGL中文教程:第23课 球… NeHe的OPENGL中文教程:第22课 凸… NeHe的OPENGL中文教程:第22课 凸… NeHe的OPENGL中文教程:第21课 反… NeHe的OPENGL中文教程:第21课 反… NeHe的OPENGL中文教程:第20课 蒙… NeHe的OPENGL中文教程:第19课 粒… NeHe的OPENGL中文教程:第18课 二… NeHe的OPENGL中文教程:第17课 2D… NeHe的OPENGL中文教程:第16课 雾 NeHe的OPENGL中文教程:第15课 图… NeHe的OPENGL中文教程:第14课 图… NeHe的OPENGL中文教程:第13课 位… NeHe的OPENGL中文教程:第12课 显… NeHe的OPENGL中文教程:第11课 飘… NeHe的OPENGL中文教程:第十课 漫… NeHe的OPENGL中文教程:第九课 漂… NeHe的OPENGL中文教程:第八课 Alp… NeHe的OPENGL中文教程:第七课 纹… NeHe的OPENGL中文教程:第七课 纹… NeHe的OPENGL中文教程:第六课 纹… NeHe的OPENGL中文教程:第五课 向3… NeHe的OPENGL中文教程:第四课 旋… NeHe的OPENGL中文教程:第三课 着… NeHe的OPENGL中文教程:第二课 多… NeHe的OPENGL中文教程:第一课 新… NeHe的OPENGL中文教程:第一课 新… DirectX与OpenGL方面的经典电子书… VC++ 6.0下OpengGL配置以及glut配… 怎样开始学习OpenGL

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值