OpenGL是一个图形硬件的软件接口(“GL”即Graphics Library)。这一接口包含了数百个函数,图形程序员可以利用这些函数指定设计高品质的三维彩色图像所需的对象和操作。这些函数中有许多实际上是其他函数的简单变形,因此,实际上它仅包含大约180个左右完全不同的函数。 OpenGL 实用库(OpenGL Utility Library,GLU)和对X窗口系统的OpenGL扩展(OpenGL Extension to the X Window System,GLX)为OpenGL提供了有用的支持特性和完整的OpenGL核心函数集。本书详细介绍了这些函数的功能。
第1章 OpenGL简介
在概念上对OpenGL作了概述。它通过一个高层的模块图来阐述OpenGL所执行的所有主要处理阶段。
第2章 命令和例程概述
较详细地阐述了OpenGL对输入数据的处理过程(用顶点形式来指定一个几何体或用像素形式来定义一幅图像时),并告诉你如何用OpenGL函数来控制这个过程。此外,在本章中还对GLU和GLX函数作了讨论。
第3章 命令和例程一览
根据OpenGL命令所完成的功能列举说明了这些命令组。一旦了解了这些命令的功能,你就可以利用这些完整的函数原型作为快速参考。
第4章 定义的常量及相关命令
列举了在OpenGL中定义的常量和使用这些常量的命令。
第5章 OpenGL参考说明
本书的主体部分,它包括各组相关的OpenGL命令的描述。带参数的命令和与之一起描述的其他命令仅在数据类型方面有所不同。每个函数的参考说明介绍了参数、命令的作用和使用这些命令时可能发生的错误。
此外,本章还包含了有关OpenGL的 ARB扩展—多重纹理和绘图子集的参考说明。需要说明的是并非所有的OpenGL的环境都支持ARB扩展。
?第6章 GLU参考说明
本章包含了所有的GLU命令的参考说明。
?第7章 GLX参考说明
本章包含了所有的GLX命令的参考说明。
0.1 阅读此书前的预备知识
本书是OpenGL Architecture Review Board, Mason Woo、 Jackie Neider、Tom Davis 和Dave Shreinre编著的《OpenGL编程指南(第3版)》(Reading, MA: Addison-Wesley, 1999)的姊妹篇。阅读这两本书的前提是你已经懂得如何用C语言编程。
两本书的不同之处主要在于:《OpenGL编程指南》一书着重于介绍如何运用OpenGL,而本书的重点则是OpenGL的工作方式。当然要想彻底地了解OpenGL,这两方面的知识都是必需的。这两本书的另一个不同点是本书的大多数内容都是按字母次序编排的,这样编排的前提是假定你已经知道你所不明白的地方而仅仅想查找某个特定命令的用法。而《OpenGL编程指南》一书的编排则更像一本指南:它首先解释了OpenGL的简单概念,然后再导出更复杂的概念。虽然你不必通过阅读《OpenGL编程指南》一书来理解本书对命令的解释,但如果你已经读过它,你将会对这些命令有更深刻的理解。
如果你对计算机图形学还不太了解,那么请先从《OpenGL编程指南》一书入手学习,并同时参考下面这些书:
?James D. Foley、 Andries van Dam、Steven K. Feiner和John F. Hughes著,《计算机图形学:原理及应用》(Computer Graphics:Principles and Practice)。(Reading, MA:Addision-Wesley)。该书是一本计算机图形学的百科全书,它包含了丰富的信息量,但最好在你对这门学科有一定的实践经验之后再读它。ナAndrew S. Glassner 著,《3D计算机图形学:艺术家与设计师的用户指南》(3D Computer Graphics: A User誷 Guide for Artists and Designers)。(New York:Design Press)。这是一本非技术性的、综合介绍计算机图形学的书,它着重于所能获得的视觉效果而非如何获取这些效果的具体技巧。
ナOlin Lathrop著,《计算机图形学的工作原理》(The Way Computer Graphics Work)。(New York:John Wiley and Sons,Inc.)。这本书概括性地介绍了计算机图形学,主要面向初级和中级计算机用户。它介绍了理解计算机图形学所必需的一般概念。
0.2 字体约定
本书使用如下的字体约定:
黑体字(Bold)—命令和例行程序名;
斜体字(Italics)—变量名、自变量名、参数名、空间维数和文件名;
正体字(Regular)—枚举类型和定义的常量;
等宽字体(Monospace font)—示例代码。
值得注意的是本书所使用的命令名称都是缩写形式。许多OpenGL命令只是其他命令的变种。简言之,这里只使用函数的基本名称。如果此命令上加有星号(*),则说明它所代表的实际的命令名称可能比显示的命令名称要多。如,glVertex*代表所有指定顶点的命令变种所构成的命令。
多数命令的区别仅在于它们所带的自变量的数据类型。有些命令则在相关自变量的数目、这些自变量是否被指定为向量以及是否需在列表中单独指定等方面存在着区别。例如,你使用glVertex2f命令时必须以浮点数形式提供x和y的坐标;而使用glVertex3sv 命令时你需为x,y,z提供一个包含三个短整型值的数组。
0.3 致谢
本手册的初版是许多人共同努力的结果。Silicon Graphics的Kurt Akeley,SABL Productions的Sally Browning以及Silicon Graphics的Kevin P. Smith为第1版提供了大量的资料,另外还有Jackie Neider和Mark Segal(他们均来自Silicon Graphics)。Mark和Kurt合著《The OpenGL Graphics System:A Specification》,Kevin著《OpenGL Graphics System Utility Library》,Phil Karlton 著《OpenGL Graphics with the X Window System》为本书作者提供了文献来源。Phil Karlton和Kipp Hickman帮助在Silicon Graphics定义并创建了OpenGL,此外还有Gain Technology, Inc.的Raymond Drewry、Digital Equipment Corp.的Fred Fisher、Kubota Pacific Computer, Inc.的Randi Rost等人也为本书的编写提供了帮助。OpenGL 结构评审委员会的成员Murray Cantor以及International Business Machines的Linas Vepstas、Digital Equipment Corporation的Paula Womack和Jeff Lane、Intel的Murali Sundaresan,还有Microsoft的Chuck Whitmer也提供了很多帮助。Thad Beier同Seth Katz以及Silicon Graphics的Inventor小组一起制作了封面图形。Silicon Graphics的Kay Maitz、Evans Technical Communications的Arthur Evans以及Susan Blau提供了产品援助,Tanya Kucak对本手册进行了编辑。当然,如果没有OpenGL,也就不会有本书的存在,所以要感谢Silicon Graphics的OpenGL小组所有成员,感谢他们的辛勤工作。他们是:Momi Akeley、Allen Akin、Chris Frazier、Bill Glazier、Paul Ho、Simon Hui、Lesley Kalmin、Pierre Tardif、Jim Winget,尤其是Wei Yen。另外,还有上面提到的Kurt、Phil、Mark、Kipp以及Kevin。当然还有许多其他的Slicon Graphics成员也为改进OpenGL的定义和功能做出了很多贡献,在这里也一并感谢他们。 Kempf的Renate Kempf及其同事、Silicon Graphics的Chris Frazier为《OpenGL Reference Manual for OpenGL, Version1.1》添加了所有OpenGL1.1 Specification中的新功能,并编辑审查了其他所有参考说明书。下列人员对该书进行了仔细的复审,他们是Allen Akin、David Blythe、Craig Dunwoody、Chris Frazier以及Slicon Graphics的Paula Womack、OpenGL 结构评审委员会中的成员,包括Silicon Graphics的Kurt Akeley、HP的Dave Arns、E&S的Bill Armstrong、Intergraph的Dale Kirkland和IBM的Bimal Poddar。Silicon Graphics的Simon Hui复审了GLX参考说明,John Spitzer复审了已校对的图形插页。
在本书中,SGI的Dave Shreiner添加了OpenGL 1.2和GLX 1.3的大部分新的功能,并在David Yu的帮助下重新修订了图面。Norman Chin重新修订了GLU 1.3的参考说明。下列人员认真地进行了手册复审这一艰巨的工作,他们是:Ron Bielaski、Steve Cunningham、Jeffery Galinovsky、Eric Haines、Mark Kilgard、Dale Kirkland、Seth Livingston、Bimal Poddar、David Nishimoto、Mike Schmitt、Scott Thompson、David Yu以及SGI的OpenGL小组的成员Craig Dunwoody、Jaya Kanajan、George Kyraizis、Jon Leech和Ken Nicholson。
尤其感谢Jon Leech,是他编辑了OpenGL 1.2.1、GLU 1.3和GLX 1.3的说明书,以及使OpenGL保持活力和生机的OpenGL ARB。同时也要感谢Laura Cooper和Dany Galgani为本手册的编写所提供的产品支持。原书书号:ISBN 0-201-65765-1