內容介紹
前 言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。
作品目錄
譯者序前言第1章OpenGL