English

OpenGL――打开图形世界的钥匙

2009-09-09 来源:中华读书报 作者:■薇言 我有话说

大部分的软件开发工程师做梦都想开发出市场巨大的产品,眼睁睁看着起家时技术含量并不太高的腾讯QQ、Youtube、开心网和Twitter的成功之后,他们会忍不住叹息:“凭啥第一个想到做这个的不是我呢?”但是没办法,对大部

分人来说,靠一两次头脑风暴创造人生传奇的可能性并不大。更何况,做前浪或许可以成功,但死在沙滩上的危险却也同样让人望而却步。这样来说,大部分人的未来之选,应该是方兴未艾的朝阳产业,对软件开发业来说,这其中一定包括游戏开发和虚拟现实。而它们,统统可以用OpenGL实现。

第一次接触OpenGL是我读研究生二年级的时候,那时的我对MatLab在图像处理上的应用也算比较了解,无论是膨胀、腐蚀还是去噪、压缩,都可以信手拈来。尽管MatLab在图像处理等科学研究领域占有难以撼动的优势,但它的变量定义和内存分配,远远没有C/C++灵活、合理。这个缺陷导致了快速存取大数据量文件的困难,在一些实时性要求高的工程项目中,其缺陷更为显著。而那时导师交给我一个关于雷达视频中目标提取的项目,面对这个实时性高的项目,我无法用MatLab完成。无奈之下,只好抱上一堆C/C++图像处理的书来参考研究,但看着连BMP图像的最简单处理都需要劳神伤“才”地写上一堆代码,令我冷汗直冒,多年前初次使用汇编的感觉又回来了。

正在我努力将脑袋埋入书丛,一边苦练C++内功,一边感慨好时光一去不返的时候,师兄的一句话解救了我――他向我推荐了OpenGL。OpenGL(Open Graphics Library)是一个定义了跨编程语言、跨平台、网络透明的2D/3D图形API。它功能强大、调用方便,自诞生以来已催生了各种计算机平台及设备上的数千种优秀应用程序。在包含CAD、遥感与数字摄影测量、游戏开发、制造业及虚拟现实等行业领域中,OpenGL都能够帮助程序员实现在PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力和视觉表现力的图形处理软件的开发。

以我了解的图像处理为例,OpenGL拥有很完善的各类算法实现的函数库。由于代码开源,用户不仅可以直接调用函数实现某种功能,还可以根据特殊需要改编代码。更由于其一流的算法思想和代码质量,阅读代码本身也成为一种学习提高方式。这样一来,大家就可以理解对苦海无边的我来说,OpenGL的出现真如同诺亚方舟。在它的帮助下,我不但顺利完成项目,还积累了C++编程经验,甚至加深了对图像处理本身的理解。

尽管OpenGL拥有很多优势,但广大读者恐怕更熟悉的是微软的Direct3D。这其中埋藏着一段故事。1995、1996年微软为了推行Direct3D,采取了一系列冻结OpenGL的手段。这其中包括:拒绝在Window95上支持OpenGL;采取异常手段收回对OpenGL的MCD驱动接口的支持,导致硬件厂商放弃已进入最后测试的OpenGL驱动;微软的市场部门还游说了各个游戏开发商、硬件厂商、新闻出版机构,让他们接受Di鄄rect3D,尽量减少OpenGL的市场份额。这引发了一场火药味极浓的API争夺战,参与的不仅仅是两家公司,还包括一些知名的游戏开发者和硬件厂商。最终,技术和市场主宰了争论,尽管微软仍然想尽办法压缩OpenGL的生存空间,而SiliconGraphics也宣布不再以任何微软不能接受的方式推行OpenGL。但时至今日,OpenGL依然是唯一能与Direct3D对立的API,也是目前应用最广泛的计算机图形标准。虽然Direct3D在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。

OpenGL是如此重要的一个API,但遗憾的是,国内的书籍市场上,介绍OpenGL的书并不多,其中还有相当一部分来自非相关研究工作的人的编撰。这些书大都用大篇幅做VC扫盲,且主要以某个应用领域的函数介绍为主,案例仅限于纯编程的小示例,缺少真正的工程案例,使读者无法融会贯通。而国外的相关书籍尽管原理性内容讲解透彻,但缺乏本土化案例,往往给人隔靴搔痒之感。

《实战OpenGL三维可视化系统开发与源码精解》以“铁路三维可视化系统”的实例为主线,系统阐述了三维可视化从框架设计到最终实现的理论、技术和算法,实现了基于OpenGL、VisualC++、Orcle9数据库开发的三维可视化设计系统。这本书不仅提供了大量大型的工程案例,更难能可贵的是,它的代码部分进行了详细的注解和标注,不单方便读者阅读理解,更能在实际项目中“即插即用”。对初级读者来说,这本书帮助他们学会OpenGL的各个功能和应用,对从事三维可视化设计、虚拟现实、计算机图形学研究等中高级读者来说,它可以帮助掌握OpenGL的高级开发技巧,使大家提高实践技能,并对三维可视化的工程实践有了更加清晰和系统的认识。

开始写技术类书籍的书评之后,我常常思考一本好书的衡量标准。我想最基本的是它对于主题是否论述清晰到位,达到了前言中的著书目的,而不是为写而写。更进一步,假如它的目标读者是初学者,那么一本好书则应该能够引发初学者的阅读兴趣,开启一扇知识之门;而对于中高级读者来说,它应该足够补充新的知识,让读者受益其中。我认为,这本书做到了这一点,我想这也是为什么它在购书网站被多位读者推荐的原因。

  (《实战OpenGL三维可视化系统开发与源码精解》,“C/C++开发专家”系列之一,吕希奎、周小平编著,电子工业出版社,2009年6月,69.50元)

手机光明网

光明网版权所有

光明日报社概况 | 关于光明网 | 报网动态 | 联系我们 | 法律声明 | 光明网邮箱 | 网站地图

光明网版权所有