《國外計算機科學教材系列:交互式計算機圖形學·基于OpenGL著色器的自頂向下方法(第6版)》采用自頂向下的方法并輔以面向編程的方式,基于現代可編程GPU的著色器編程,使用C++語言、OpenGL著色語言(GLSL)并結合OpenGL系統地介紹了現代計算機圖形學的核心概念、原理和方法。本書是作者多年來教學與科研工作的總結,涵蓋了基于OpenGL著色器的交互式圖形編程、三維可編程繪制流水線、變換與觀察、光照與明暗繪制、曲線曲面建模等基本的計算機圖形學內容以及離散技術、層級建模、過程建模、光線跟蹤、并行繪制和體繪制等高級內容,并為讀者進一步深入學習和研究,在每章后面提供了相關的建議閱讀資料。
《國外計算機科學教材系列:交互式計算機圖形學·基于OpenGL著色器的自頂向下方法(第6版)》第六版進一步反映了計算機圖形學的最新發展現狀,面向圖形應用開發并輔以大量的示例和完整的源代碼,是一本“基礎性與先進性、理論性與應用性、科學性與通俗性”相結合的內容全面而又系統的國外經典計算機圖形學教材。
《國外計算機科學教材系列:交互式計算機圖形學·基于OpenGL著色器的自頂向下方法(第6版)》既可作為有一定C++編程基礎的計算機及相關專業高年級本科生或研究生的計算機圖形學教材,也適合于作為相關技術人員的參考書。
第六版新增內容
●全書使用基于著色器的新版本OpenGL
●不再使用在OpenGL 3.1中所棄用的OpenGL函數
●在OpenGL應用程序代碼和著色器中均增加了實現變換和觀察的細節描述
●保持與penGL ES 2.0和WebGL的一致性
●用C++代替了C
●增加了向量類和矩陣類以創建與OpenGL著色語言(GLSL)兼容的應用程序代碼
●討論了基于頂點的光照計算和基于片元的光照計算
●增加了多邊形的三角細分和Delaunay三角剖分
●介紹了體繪制
●重新編寫了所有示例程序的代碼以適合OpenGL 3.1
●增加了新合著者,《OpenGL編程指南》的作者Dave Shreiner
本書是計算機圖形學的入門教材,重點介紹應用程序的編寫。本書于1997年首次出版,第一版在使用標準圖形庫和自頂向下的方法上多多少少是一場革命。在接下來的13年中,發行了5個版本,大多數計算機圖形學概論課以及幾乎所有的教科書都采用了本書的方法。
在過去的幾年中,圖形硬件的重大變化已經導致了圖形軟件的重大變化。在OpenGL的前15年,新版本的發布一直保持向后兼容,基礎軟件的升級使代碼的可重用能力成為重要的優點,應用軟件的開發者和圖形學課程的教師都在受益。從所公布的OpenGL 3.0重大變化來看,其中一個關鍵的變化是從OpenGL 3.1開始,許多先前版本中最常見的函數將被廢棄。相對于先前版本的這一根本變化反映出需要使用最新的可編程圖形處理單元(GPU)的功能變化,這些變化也是OpenGL ES 2.0和WebGL的一部分,OpenGL ES 2.0用于開發手機和圖形輸入板等移動終端設備的應用軟件,而WebGL支持大多數最新的瀏覽器。
就像本書以前5個版本的作者(Edward Angel)以及《OpenGL編程指南》和《OpenGL ES 2.0編程指南》的作者(Dave Shreiner)一樣,我們面臨著如何反映這些變化的難題。我們撰寫了多部書籍并在ACM SIGGRAPH中多年從事OpenGL導論課程的教學,我們發現在高等教育界或高端游戲領域之外的應用程序編程人員,幾乎沒有人了解這些變化,知道這些變化的人并不認為我們可以在初級層次教會這些概念。
第1章 圖形系統和模型
1.1 計算機圖形學的應用
1.2 圖形系統
1.3 物理圖像與合成圖像
1.4 成像系統
1.5 虛擬照相機模型
1.6 應用程序編程接口
1.7 圖形繪制系統的體系結構
1.8 可編程流水線
1.9 性能特征
小結和注釋
建議閱讀資料
習題
第2章 圖形學編程
2.1 Sierpinski鏤墊
2.2 編寫二維圖形應用程序
2.3 OpenGL應用程序編程接口
2.4 圖元和屬性
2.5 顏色
2.6 觀察
2.7 控制函數
2.8 Sierpinski鏤墊繪制程序
2.9 多邊形和遞歸
2.10 三維Sierpinski鏤墊
2.11 增加交互性
2.12 菜單
小結和注釋
建議閱讀資料
習題
第3章 幾何對象和變換
3.1 標量、點和向量
3.2 三維圖元
3.3 坐標系和標架
3.4 OpenGL中的標架
3.5 矩陣和向量類
3.6 建模一個彩色立方體
3.7 仿射變換
3.8 平移、旋轉和縮放
3.9 變換的齊次坐標表示
3.10 變換的級聯
3.11 OpenGL變換矩陣
3.12 使立方體旋轉起來
3.13 三維應用程序的接口
3.14 四元數
小結和注釋
建議閱讀資料
習題
第4章 觀察
4.1 經典觀察和計算機觀察
4.2 計算機觀察
4.3 定位照相機
4.4 平行投影
4.5 透視投影
4.6 OpenGL中的透視投影
4.7 透視投影變換矩陣
4.8 隱藏面消除
4.9 顯示網格
4.10 投影和陰影
小結和注釋
建議閱讀資料
習題
第5章 光照和明暗繪制
5.1 光線和材質
5.2 光源
5.3 Phong反射模型
5.4 計算向量
5.5 多邊形的明暗繪制
5.6 通過遞歸細分逼近球面
5.7 指定光照參數
5.8 實現光照模型
5.9 球面模型的明暗繪制
5.10 基于每個片元的光照計算
5.11 全局光照
小結和注釋
建議閱讀資料
習題
第6章 從頂點到片元
6.1 圖形繪制流水線的基本實現策略
6.2 圖形繪制系統的四個主要任務
6.3 裁剪
6.4 線段的裁剪
6.5 多邊形的裁剪
6.6 其他圖元的裁剪
6.7 三維裁剪
6.8 光柵化
6.9 Bresenham算法
6.10 多邊形光柵化算法
6.11 隱藏面消除
6.12 反走樣
6.13 顯示方面的問題
小結和注釋
建議閱讀資料
習題
第7章 離散技術
7.1 緩存
7.2 數字圖像
7.3 緩存的寫操作
7.4 映射方法
7.5 紋理映射
7.6 OpenGL的紋理映射
7.7 紋理生成
7.8 環境貼圖
7.9 反射貼圖示例程序
7.10 凹凸映射
7.11 合成技術
7.12 采樣與走樣
小結和注釋
建議閱讀資料
習題
第8章 層級建模方法
8.1 圖符和實例
8.2 層級模型
8.3 機器人手臂
8.4 樹與樹的遍歷
8.5 使用樹形數據結構
8.6 動畫
8.7 圖形對象
8.8 場景圖
8.9 開放場景圖
8.10 圖形和因特網
8.11 其他樹形結構
小結和注釋
建議閱讀資料
習題
第9章 過程建模方法
9.1 基于算法的建模
9.2 基于物理的建模和粒子系統
9.3 牛頓粒子
9.4 求解粒子系統方程
9.5 約束條件
9.6 一個簡單的粒子系統
9.7 基于語言的建模
9.8 遞歸方法和分形
9.9 過程噪聲
小結和注釋
建議閱讀資料
習題
第10章 曲線和曲面
10.1 曲線和曲面的表示形式
10.2 設計準則
10.3 三次參數多項式曲線
10.4 插值
10.5 Hermite曲線和曲面
10.6 Bézier曲線和曲面
10.7 三次B樣條
10.8 普通B樣條
10.9 曲線和曲面的繪制
10.10 Utah茶壺模型
10.11 代數曲面
10.12 曲線和曲面的細分
10.13 從數據生成網格
小結和注釋
建議閱讀資料
習題
第11章 高級繪制
11.1 超越流水線繪制結構
11.2 光線跟蹤
11.3 構建一個簡單的光線跟蹤器
11.4 繪制方程
11.5 輻射度方法
11.6 RenderMan
11.7 并行繪制
11.8 體繪制
11.9 等值面與步進立方體
11.10 網格簡化
11.11 直接體繪制
11.12 基于圖像的繪制
小結和注釋
建議閱讀資料
習題
附錄A 示例程序
A.1 著色器初始化函數
A.2 Sierpinski鏤墊程序
A.3 遞歸實現Sierpinski鏤墊程序
A.4 在著色器中實現立方體的旋轉
A.5 透視投影
A.6 旋轉著色的立方體
A.7 對球面模型執行基于每個片元的光照計算
A.8 帶紋理的立方體旋轉程序
A.9 基于樹形結構的機器人繪制程序
A.10 茶壺繪制程序
附錄B 空間
B.1 標量
B.2 向量空間
B.3 仿射空間
B.4 Euclid空間
B.5 投影
B.6 GRAM?SCHMIDT正交化
建議閱讀資料
習題
附錄C 矩陣
C.1 定義
C.2 矩陣的運算
C.3 行矩陣和列矩陣
C.4 秩
C.5 表示的變換
C.6 叉積
C.7 特征值和特征向量
C.8 向量和矩陣類
建議閱讀資料
習題
附錄D OpenGL函數一覽
D.1 初始化和窗口函數
D.2 頂點緩沖區對象
D.3 交互函數
D.4 屬性設置和功能開啟函數
D.5 紋理和圖像函數
D.6 狀態和緩存操作函數
D.7 查詢函數
D.8 GLSL函數
參考文獻