電腦圖形學編程 (使用 OpenGL 和 C++)
內容描述
本書以C++和OpenGL 作為工具,教授電腦圖形學編程。全書共14 章和3 個附錄。
首先從圖形編程的基礎和準備工作開始,依次介紹了OpenGL 圖像管線、圖形編程數學基礎、管理3D 圖形數據、紋理貼圖、3D 模型、光照、陰影、天空和背景、增強錶面細節、參數曲面、曲面細分、幾何著色器,以及其他相關的圖形編程技術。附錄分別介紹了Windows、macOS 平臺上的安裝設置,以及Nsight 圖形調試器的應用。本書每章最後配備了不同形式的習題,供讀者鞏固所學知識。
本書適合作為高等院校電腦科學專業的電腦圖形編程課程的教材或輔導書,也適合對電腦圖形編程感興趣的讀者自學。
目錄大綱
第1章入門.1
1.1語言和庫.1
1.1.1 C++2
1.1.2 OpenGL / GLSL 2
1.1.3窗口管理.2
1.1.4擴展庫.3
1.1.5數學庫.3
1.1.6紋理管理.3
1.1.7可選庫.4
1.2安裝和配置.4
參考資料4
第2章OpenGL圖像管線.5
2.1 OpenGL管線5
2.1.1 C++/OpenGL應用程序.6
2.1.2頂點著色器和片段著色器.9
2.1.3曲面細分著色器.12
2.1.4幾何著色器.13
2.1.5光柵化.14
2.1.6片段著色器.15
2.1.7像素操作.16
2.2檢測OpenGL和GLSL錯誤.17
2.3從文件讀取GLSL源代碼.19
2.4從頂點構建對象.20
2.5場景動畫.21
2.6 C++代碼文件結構23
補充說明.24
習題24
參考資料25
第3章數學基礎.26
3.1 3D坐標系統.26
3.2點26
3.3矩陣27
3.4變換矩陣29
3.4.1平移矩陣.29
3.4.2縮放矩陣.29
3.4.3旋轉矩陣.30
3.5向量31
3.5.1點積的應用.32
3.5.2叉積的應用.33
3.6局部和世界空間33
3.7視覺空間和合成相機34
3.8投影矩陣36
3.8.1透視投影矩陣.36
3.8.2正射投影矩陣.37
3.9 LookAt矩陣.38
3.10用來構建矩陣變換的GLSL函數.39
補充說明40
習題.40
參考資料.41
第4章管理3D圖形數據.42
4.1緩衝區和頂點屬性42
4.2統一變量44
4.3頂點屬性插值45
4.4模型-視圖和透視矩陣.46
4.5我們的□ □個3D程序——一個3D立方體47
4.6渲染一個對象的多個副本.53
4.7在同一個場景中渲染多個不同模型.57
4.8矩陣堆棧.59
4.9應對“Z衝突”偽影64
4.10圖元的其他選項.65
4.11性能優先的編程方法.66
4.11.1盡量減少動態內存空間分配66
4.11.2預先計算透視矩陣.67
4.11.3背面剔除.68
補充說明.69
習題70
參考資料70
第5章紋理貼圖71
5.1加載紋理圖像文件.71
5.2紋理坐標.72
5.3創建紋理對象.74
5.4構建紋理坐標.74
5.5將紋理坐標載入緩衝區.75
5.6在著色器中使用紋理:採樣器變量和紋理單元.76
5.7紋理貼圖:示例程序.77
5.8多級漸遠紋理貼圖.79
5.9各向異性過濾.83
5.10環繞和平鋪.84
5.11透視變形.85
5.12材質——更多OpenGL細節.86
補充說明.86
習題87
參考資料87
第6章3D模型88
6.1程序構建模型——構建一個球體.88
6.2 OpenGL索引——構建一個環面.94
6.2.1環面.94
6.2.2 OpenGL中的索引95
6.3加載外部構建的模型.99
補充說明.106
習題.107
參考資料.107
第7章光照108
7.1光照模型108
7.2光源109
7.3材質.111
7.4 ADS光照計算.112
7.5實現ADS光照114
7.5.1 Gouraud著色(雙線性光強插值法) 115
7.5.2 Phong著色.120
7.6結合光照與紋理124
補充說明.126
歷史記錄.126
習題.126
參考資料.127
第8章陰影128
8.1陰影的重要性128
8.2投影陰影129
8.3陰影體129
8.4陰影貼圖130
8.4.1陰影貼圖(□ □輪)——從光源位置“繪製”物體131
8.4.2陰影貼圖(中間步驟)——將Z緩衝區復製到紋理132
8.4.3陰影貼圖(第2輪)——渲染帶陰影的場景132
8.5陰影貼圖示例135
8.6陰影貼圖的偽影139
8.7柔和陰影142
8.7.1現實世界中的柔和陰影142
8.7.2生成柔和陰影——百分比鄰近濾波(PCF) .143
8.7.3柔和陰影/PCF程序146
補充說明.148
習題148
參考資料149
第9章天空和背景.150
9.1天空盒.150
9.2天空穹頂.152
9.3實現天空盒.153
9.3.1從頭開始構建天空盒.153
9.3.2使用OpenGL立方體貼圖.156
9.4環境貼圖.158
補充說明.161
習題162
參考資料163
第10章增強表面細節.164
10.1凹凸貼圖.164
10.2法線貼圖.166
10.3高度貼圖.172
補充說明.174
習題175
參考資料175
第11章參數曲面.176
11.1二次貝塞爾曲線.176
11.2三次貝塞爾曲線.177
11.3二次貝塞爾曲面.180
11.4三次貝塞爾曲面.181
補充說明.183
習題183
參考資料183
第12章曲面細分.184
12.1 OpenGL中的曲面細分184
12.2貝塞爾曲面細分.188
12.3地形、高度圖的細分.193
12.4控制細節級別(LOD).198
補充說明.200
習題.201
參考資料.201
第13章幾何著色器202
13.1 OpenGL中的逐個圖元處理.202
13.2修改圖元203
13.3刪除圖元206
13.4添加圖元207
13.5更改圖元類型209
補充說明.211
習題.211
參考資料.211
第14章其他技術212
14.1霧212
14.2複合、混合、透明度.213
14.3用戶定義剪裁平面218
14.4 3D紋理219
14.5噪聲223
14.6噪聲應用——大理石.227
14.7噪聲應用——木材.230
14.8噪聲應用——雲.233
14.9噪聲應用——特殊效果.236
補充說明.238
習題.238
參考資料.239
附錄A PC(Windows)上的安裝與設置240
A.1安裝庫和開發環境240
A.1.1安裝開發環境.240
A.1.2安裝OpenGL /
GLSL.240
A.1.3準備GLFW 240
A.1.4準備GLEW 241
A.1.5準備GLM.241
A.1.6準備SOIL2.241
A.1.7準備共享的“lib”和“include”文件夾241
A.2在MS Visual Studio中開發和部署OpenGL項目242
參考資料243
附錄B Macintosh(macOS)平台上的安裝與設置.244
B.1安裝庫和開發環境244
B.1.1準備並安裝依賴庫.244
B.1.2準備開發環境.245
B.2修改Mac的C++ / OpenGL /GLSL應用程序代碼.246
B.2.1修改C++代碼247
B.2.2修改GLSL代碼.247
B.2.3補充說明.248
參考資料.248
附錄C使用Nsight圖形調試器.249
C.1關於NVIDIANsight 249
C.2設置Nsight 249
C.3在Nsight中運行C++/OpenGL應用程序.250
參考資料.252
作者介紹
V.斯科特·戈登(V. Scott Gordon)
加州州立大學薩克拉門托分校教授,教授高級圖形和遊戲工程課程。他撰寫及合著了30多部出版物,涉及人工智能、神經網絡、進化計算、軟件工程、視頻和策略遊戲編程,以及計算機科學教育等多個領域。戈登博士在科羅拉多州立大學獲得博士學位。
約翰·克萊維吉(John Clevenger)
加州州立大學薩克拉門托分校教授,擁有40多年的教學經驗,教學內容包括高級圖形、遊戲架構、操作系統、VLSI芯片設計、系統仿真和其他主題。他參與了多個用於圖形和遊戲架構教學的軟件框架和工具的開發,其中包括本書Java版第一版中用到的graphicslib3D庫。他是國際大學生程序設計競賽(ICPC)的技術總監,負責監督PC2的持續開發,PC2是目前世界上使用較為廣泛的編程競賽支持系統。克萊維吉博士在加州大學戴維斯分校獲得博士學位。