本書是OpenGL及3D圖形編程的經(jīng)典入門指南,涵蓋了使用OpenGL進(jìn)行編程所需要的主要知識。
本書內(nèi)容分3部分。第一部分介紹經(jīng)典OpenGL繪圖的基礎(chǔ)知識,涉及管線、數(shù)學(xué)知識、數(shù)據(jù)、著色器和程序等;第二部分著重介紹OpenGL的一些高級功能,涉及頂點處理與繪圖命令、基元處理片段處理與幀緩沖、計算著色器、高級數(shù)據(jù)管理、管線監(jiān)控等;第三部分介紹一些實戰(zhàn)技巧,涉及渲染技巧、高性能的OpenGL、調(diào)試和穩(wěn)定性等。
本書適合希望系統(tǒng)學(xué)習(xí)OpenGL的讀者閱讀,經(jīng)驗豐富的OpenGL程序員也能從中獲益。本書既可以作為學(xué)習(xí)OpenGL的教材,也可以作為隨時查閱的參考手冊。
OpenGL是實時計算機(jī)圖形領(lǐng)域領(lǐng)先的3D API。這是一本經(jīng)典的OpenGL開發(fā)教程,全面介紹了OpenGL 4.5的API、關(guān)鍵擴(kuò)展、著色器和其他基礎(chǔ)知識,并基于實例講解了OpenGL 4.5的各項功能。另外,本書在幾種流行的平臺上引入了OpenGL,并提供了多樣化的實踐技巧和詳盡的指導(dǎo)。
作為經(jīng)典圖書的升級版,本書重點介紹了許多OpenGL 4.5的新功能,包括重要的ARB和KHR擴(kuò)展,這些功能現(xiàn)已成為標(biāo)準(zhǔn)的一部分,并且遵循接近零驅(qū)動開銷(Approach Zero Driver Overhead,AZDO)規(guī)則。書中針對主要的增強(qiáng)功能提供了豐富的示例程序。
格雷厄姆·塞勒斯(Graham Sellers)是AMD的軟件架構(gòu)師和工程研究員,是OpenGL ARB中的AMD代表。他為核心的OpenGL規(guī)范和擴(kuò)展做出了貢獻(xiàn),并擁有多項圖形和圖像處理專利。
小理查德·賴特(Richard S. Wright, Jr.)是Software Bisque公司的高級軟件工程師,他用OpenGL開發(fā)了多媒體宇航和天文軟件。十多年來,他在美國福賽大學(xué)(Full Sail University)的游戲開發(fā)學(xué)位課程中教授OpenGL編程。
尼古拉斯·海梅爾(Nicholas Haemel)是英偉達(dá)公司相機(jī)軟件部門的主管,曾代表英偉達(dá)參加KhronosGroup標(biāo)準(zhǔn)組織,并編寫了許多OpenGL擴(kuò)展。
第 1章 OpenGL簡介 2
1.1 OpenGL和圖形管線 2
1.2 OpenGL的起源和演化 4
1.3 基元、管線和像素 6
1.4 總結(jié) 7
第 2章 我們的第 一個OpenGL程序 8
2.1 創(chuàng)建簡單的應(yīng)用 8
2.2 使用著色器 10
2.3 繪制我們的第 一個三角形 15
2.4 總結(jié) 16
第3章 管線 17
3.1 向頂點著色器傳遞數(shù)據(jù) 17
3.2 在階段之間傳遞數(shù)據(jù) 19
3.3 細(xì)分曲面 21
3.3.1 細(xì)分曲面控制著色器 21
3.3.2 細(xì)分曲面引擎 23
3.3.3 細(xì)分曲面評估著色器 23
3.4 幾何著色器 24
3.5 基元裝配、裁剪和光柵化 25
3.5.1 裁剪 25
3.5.2 視口轉(zhuǎn)換 26
3.5.3 剔除 27
3.5.4 光柵化 27
3.6 片段著色器 28
3.7 幀緩存運算 30
3.8 計算著色器 31
3.9 使用OpenGL擴(kuò)展 32
3.10 總結(jié) 35
第4章 3D圖形中的數(shù)學(xué) 36
4.1 本章是在講令人生畏的數(shù)學(xué)課嗎 36
4.2 3D圖形數(shù)學(xué)速成課 37
4.2.1 向量 37
4.2.2 常見向量運算符 39
4.2.3 矩陣 41
4.2.4 矩陣構(gòu)造和運算符 42
4.3 了解轉(zhuǎn)換 44
4.3.1 OpenGL中的坐標(biāo)空間 45
4.3.2 坐標(biāo)轉(zhuǎn)換 46
4.3.3 連接轉(zhuǎn)換 52
4.3.4 四元數(shù) 52
4.3.5 模型—視圖轉(zhuǎn)換 53
4.3.6 投影轉(zhuǎn)換 55
4.4 插值、直線、曲線和樣條 58
4.4.1 曲線 58
4.4.2 樣條 61
4.5 總結(jié) 63
第5章 數(shù)據(jù) 64
5.1 緩沖 64
5.1.1 創(chuàng)建緩沖和分配內(nèi)存 65
5.1.2 填充以及拷貝數(shù)據(jù)到緩沖 69
5.1.3 使用緩沖為頂點著色器提供數(shù)據(jù) 71
5.2 統(tǒng)一變量 77
5.2.1 缺省區(qū)塊統(tǒng)一變量 77
5.2.2 一致區(qū)塊 79
5.2.3 使用統(tǒng)一變量轉(zhuǎn)換幾何圖形 89
5.3 著色器存儲區(qū)塊 93
5.4 原子計數(shù)器 97
5.5 紋理 101
5.5.1 創(chuàng)建并初始化紋理 101
5.5.2 紋理目標(biāo)和類型 102
5.5.3 從著色器中紋理讀取數(shù)據(jù) 103
5.5.4 從文件載入紋理 106
5.5.5 控制紋理數(shù)據(jù)的讀取方式 108
5.5.6 數(shù)組紋理 116
5.5.7 在著色器中向紋理寫入數(shù)據(jù) 120
5.5.8 同步存取圖像 128
5.5.9 紋理壓縮 128
5.5.10 紋理視圖 131
5.6 總結(jié) 133
第6章 著色器和程序 134
6.1 語言概述 134
6.1.1 數(shù)據(jù)類型 134
6.1.2 內(nèi)置函數(shù) 139
6.2 編譯、鏈接和檢查程序 143
6.2.1 從編譯程序獲得信息 143
6.2.2 從鏈接程序獲得信息 146
6.2.3 單獨程序 147
6.2.4 著色器子程序 152
6.2.5 程序二進(jìn)制 155
6.3 總結(jié) 157
第二部分 深入探索
第7章 頂點處理與繪圖命令 160
7.1 頂點處理 160
7.1.1 頂點著色器輸入 160
7.1.2 頂點著色器輸出 164
7.2 繪圖命令 165
7.2.1 索引繪圖命令 165
7.2.2 實例化 170
7.2.3 間接繪制 178
7.3 變換頂點的保存 185
7.3.1 使用變換反饋 185
7.3.2 開始、暫停和停止變換反饋 189
7.3.3 用變換反饋結(jié)束管線 190
7.3.4 變換反饋示例:實物模擬 190
7.4 裁剪 196
7.5 總結(jié) 200
第8章 基元處理 201
8.1 曲面細(xì)分 201
8.1.1 曲面細(xì)分基元模式 202
8.1.2 曲面細(xì)分子分段模式 208
8.1.3 數(shù)據(jù)在曲面細(xì)分著色器之間的傳遞 209
8.1.4 著色器調(diào)用通信 211
8.1.5 曲面細(xì)分示例:地形渲染 211
8.1.6 曲面細(xì)分示例:三次貝塞爾面片 215
8.2 幾何著色器 219
8.2.1 傳遞幾何著色器 219
8.2.2 在應(yīng)用程序中使用幾何著色器 221
8.2.3 刪除幾何著色器中的幾何 224
8.2.4 修改幾何著色器中的幾何體 226
8.2.5 在幾何著色器中生成幾何體 227
8.2.6 修改幾何著色器中的基元類型 229
8.2.7 多條儲存流 231
8.2.8 通過幾何著色器引入新基元類型 232
8.2.9 多次視口轉(zhuǎn)換 237
8.3 總結(jié) 239
第9章 片段處理與幀緩沖 240
9.1 片段著色器 240
9.2 單片段測試 243
9.2.1 剪裁測試 243
9.2.2 模板測試 245
9.2.3 深度測試 247
9.2.4 早期測試 250
9.3 顏色輸出 251
9.3.1 混合 251
9.3.2 邏輯運算 254
9.3.3 顏色遮罩 255
9.4 離屏渲染 256
9.4.1 多個幀緩沖附件 260
9.4.2 分層渲染 261
9.4.3 幀緩存的完整性 266
9.4.4 立體渲染 268
9.5 反混疊 272
9.5.1 過濾法反混疊 272
9.5.2 多樣本反混疊 274
9.5.3 多樣本紋理 275
9.5.4 采樣率著色 278
9.5.5 重心采樣 280
9.6 高級幀緩沖格式 282
9.6.1 無附件渲染 283
9.6.2 浮點幀緩沖 284
9.6.3 整數(shù)幀緩沖 293
9.6.4 sRGB顏色空間 294
9.7 點精靈 296
9.7.1 點紋理化 296
9.7.2 渲染星空 297
9.7.3 點參數(shù) 299
9.7.4 有形點 299
9.7.5 旋轉(zhuǎn)點 301
9.8 獲取圖像 302
9.8.1 從幀緩存中讀取 302
9.8.2 在幀緩沖之間復(fù)制數(shù)據(jù) 304
9.8.3 讀取紋理數(shù)據(jù) 307
9.9 總結(jié) 308
第 10章 計算著色器 309
10.1 使用計算著色器 309
10.1.1 執(zhí)行計算著色器 310
10.1.2 計算著色器通信 314
10.2 示例 317
10.2.1 計算著色器并行前綴和 317
10.2.2 計算著色器群集 326
10.3 總結(jié) 333
第 11章 高級數(shù)據(jù)管理 334
11.1 取消綁定 334
11.2 稀疏紋理 338
11.3 紋理壓縮 343
11.3.1 RGTC壓縮方法 343
11.3.2 生成壓縮數(shù)據(jù) 345
11.4 壓縮數(shù)據(jù)格式 349
11.5 高質(zhì)量紋理過濾 351
11.6 總結(jié) 353
第 12章 管線監(jiān)控 354
12.1 查詢 354
12.1.1 遮擋查詢 355
12.1.2 定時查詢 362
12.1.3 變換反饋查詢 365
12.1.4 管線狀態(tài)查詢 369
12.2 OpenGL同步 370
12.2.1 清空管線 370
12.2.2 同步與柵欄 371
12.3 總結(jié) 374
第三部分 實戰(zhàn)演練
第 13章 渲染技巧 376
13.1 光照模型 376
13.1.1 Phong光照模型 376
13.1.2 Blinn-Phong光照 382
13.1.3 邊緣光 384
13.1.4 法線映射 386
13.1.5 環(huán)境映射 389
13.1.6 材料性質(zhì) 396
13.1.7 投射陰影 398
13.1.8 霧化效果 401
13.2 非真實感繪制 404
13.3 替代渲染方法 407
13.3.1 延期著色 407
13.3.2 屏幕空間技術(shù) 414
13.3.3 無三角渲染 419
13.4 2D圖像 429
13.4.1 距離場紋理 429
13.4.2 位圖字體 433
13.5 總結(jié) 436
第 14章 高性能的OpenGL 437
14.1 優(yōu)化CPU性能 437
14.1.1 OpenGL中的多線程 437
14.1.2 包緩存 441
14.2 OpenGL中的低開銷操作 448
14.2.1 間接渲染 449
14.2.2 GPU工作生成 452
14.2.3 零拷貝 458
14.3 性能分析工具 463
14.3.1 Windows性能工具包和GPUView 464
14.3.2 GPU PerfStudio 466
14.3.3 調(diào)試來使應(yīng)用運行的更快 468
14.4 總結(jié) 480
第 15章 調(diào)試和穩(wěn)定性 481
15.1 調(diào)試你的程序 481
15.2 安全性和健壯性 486
15.2.1 圖像重置 486
15.2.2 讀取邊界檢查 488
15.3 總結(jié) 489
附錄A 超級寶典工具 490
附錄B SBM文件格式 494
附錄C OpenGL的功能和版本 500