《OpenGL編程指南》是2010年機械工業出版社出版的圖書,作者是Dave Shreiner。本書對OpenGL以及OpenGL實用函式館進行了全面而又權威的介紹。
基本介紹
- 書名:Open GL編程指南
- 作者:Dave Shreiner
- 頁數:519頁
- 出版社:機械工業出版社
- 出版時間:2010年3月1日
- 裝幀:平裝
圖書信息,作者簡介,內容簡介,目錄,
圖書信息
外文書名: OpenGL Programming Guide, Seventh Edition
叢書名: 開發人員專業技術叢書
正文語種: 簡體中文
開本: 16
ISBN: 9787111294504
條形碼: 9787111294504
尺寸: 24 x 18.4 x 2.2 cm
重量: 880 g
作者簡介
Dave Shreiner 是ARM公司的圖形技術總監,長期擔任SGI核心OpenGL組的成員。他首次開設了OpenGL的商業培訓課程,擁有二十多年的計算機圖形套用開發經驗。Dave定期參加SIGGRAPH和其他全球性的圖形工作會議。他是《OpenGL ES 2.0 Programming Guide》(Addison-Wesley,2009)和《OpenGL Reference Manual》(Addison-Wesley,2004)的作者,也是Addison-Wesley的OpenGL系列的編輯。
內容簡介
《Open GL編程指南(原書第7版)》的上一個版本覆蓋了到OpenGL 2.1版的內容。本版涵蓋了OpenGL 3.0和3.1的最新特性。《Open GL編程指南(原書第7版)》以清晰的語言描述了OpenGL的功能以及許多基本的計算機圖形技巧,例如創建和渲染3D模型、從不同的透視角度觀察物體、使用著色、光照和紋理貼圖使場景更加逼真等。另外,《Open GL編程指南(原書第7版)》還深入探討了許多高級技巧,包括紋理貼圖、抗鋸齒、霧和大氣效果、NURBS、圖像處理子集等。此外,《Open GL編程指南(原書第7版)》還對一些重要的主題進行了討論,例如提高性能、OpenGL擴展以及跨平台技術等。《Open GL編程指南(原書第7版)》內容詳實,講解生動,圖文並茂,是OpenGL程式設計師的絕佳編程指南。
目錄
譯者序
前言
第1章 OpenGL簡介 1
1.1 什麼是OpenGL 1
1.2 一段簡單的OpenGL代碼 3
1.3 OpenGL函式的語法 4
1.4 OpenGL是一個狀態機 6
1.5 OpenGL渲染管線 6
1.5.1 顯示列表 7
1.5.2 求值器 7
1.5.3 基於頂點的操作 7
1.5.4 圖元裝配 7
1.5.5 像素操作 8
1.5.6 紋理裝配 8
1.5.7 光柵化 8
1.5.8 片斷操作 8
1.6 與OpenGL相關的函式館 9
1.6.1 包含檔案 9
1.6.2 OpenGL實用工具庫(GLUT) 10
1.7 動畫 13
1.7.1 暫停刷新 14
1.7.2 動畫=重繪+交換 15
1.8 OpenGL及其廢棄機制 17
1.8.1 OpenGL渲染環境 17
1.8.2 訪問OpenGL函式 18
第2章 狀態管理和繪製幾何物體 19
2.1 繪圖工具箱 20
2.1.1 清除視窗 20
2.1.2 指定顏色 22
2.1.3 強制完成繪圖操作 23
2.1.4 坐標系統工具箱 24
2.2 描述點、直線和多邊形 25
2.2.1 什麼是點、直線和多邊形 25
2.2.2 指定頂點 27
2.2.3 OpenGL幾何圖元 27
2.3 基本狀態管理 31
2.4 顯示點、直線和多邊形 32
2.4.1 點的細節 32
2.4.2 直線的細節 33
2.4.3 多邊形的細節 36
2.5 法線向量 41
2.6 頂點數組 43
2.6.1 步驟1:啟用數組 44
2.6.2 步驟2:指定數組的數據 44
2.6.3 步驟3:解引用和渲染 46
2.6.4 重啟圖元 51
2.6.5 實例化繪製 53
2.6.6 混合數組 54
2.7 緩衝區對象 57
2.7.1 創建緩衝區對象 57
2.7.2 激活緩衝區對象 58
2.7.3 用數據分配和初始化緩衝區對象 58
2.7.4 更新緩衝區對象的數據值 60
2.7.5 在緩衝區對象之間複製數據 62
2.7.6 清除緩衝區對象 63
2.7.7 使用緩衝區對象存儲頂點數組數據 63
2.8 頂點數組對象 65
2.9 屬性組 69
2.10 創建多邊形表面模型的一些提示 71
第3章 視圖 77
3.1 簡介:用照相機打比方 78
3.1.1 一個簡單的例子:繪製立方體 80
3.1.2 通用的變換函式 83
3.2 視圖和模型變換 84
3.2.1 對變換進行思考 85
3.2.2 模型變換 86
3.2.3 視圖變換 89
3.3 投影變換 93
3.3.1 透視投影 94
3.3.2 正投影 95
3.3.3 視景體裁剪 96
3.4 視口變換 96
3.4.1 定義視口 96
3.4.2 變換深度坐標 97
3.5 和變換相關的故障排除 98
3.6 操縱矩陣堆疊 100
3.6.1 模型視圖矩陣堆疊 101
3.6.2 投影矩陣堆疊 102
3.7 其他裁剪平面 102
3.8 一些組合變換的例子 104
3.8.1 創建太陽系模型 104
3.8.2 創建機器人手臂 107
3.9 逆變換和模擬變換 109
第4章 顏色 113
4.1 顏色感知 113
4.2 計算機顏色 114
4.3 RGBA和顏色索引模式 115
4.3.1 RGBA顯示模式 116
4.3.2 顏色索引模式 117
4.3.3 在RGBA和顏色索引模式中進行選擇 118
4.3.4 切換顯示模式 118
4.4 指定顏色和著色模型 119
4.4.1 在RGBA模式下指定顏色 119
4.4.2 在顏色索引模式下指定顏色 120
4.4.3 指定著色模型 121
第5章 光照 123
5.1 隱藏表面消除工具箱 124
5.2 現實世界和OpenGL光照 125
5.2.1 環境光、散射光、鏡面光和發射光 125
5.2.2 材料顏色 126
5.2.3 光和材料的RGB值 126
5.3 一個簡單的例子:渲染光照球體 127
5.4 創建光源 129
5.4.1 顏色 130
5.4.2 位置和衰減 131
5.4.3 聚光燈 132
5.4.4 多光源 133
5.4.5 控制光源的位置和方向 133
5.5 選擇光照模型 138
5.5.1 全局環境光 138
5.5.2 局部的觀察點或無限遠的觀察點 138
5.5.3 雙面光照 139
5.5.4 鏡面輔助顏色 139
5.5.5 啟用光照 140
5.6 定義材料屬性 140
5.6.1 散射和環境反射 141
5.6.2 鏡面反射 141
5.6.3 發射光顏色 142
5.6.4 更改材料屬性 142
5.6.5 顏色材料模式 143
5.7 和光照有關的數學知識 146
5.7.1 材料的發射光 147
5.7.2 經過縮放的全局環境光 147
5.7.3 光源的貢獻 147
5.7.4 完整的光照計算公式 148
5.7.5 鏡面輔助顏色 148
5.8 顏色索引模式下的光照 149
第6章 混合、抗鋸齒、霧和多邊形偏移 151
6.1 混合 152
6.1.1 源因子和目標因子 152
6.1.2 啟用混合 154
6.1.3 使用混合方程式組合像素 154
6.1.4 混合的樣例用法 156
6.1.5 一個混合的例子 157
6.1.6 使用深度緩衝區進行三維混合 159
6.2 抗鋸齒 162
6.2.1 對點和直線進行抗鋸齒處理 164
6.2.2 使用多重採樣對幾何圖元進行抗鋸齒處理 169
6.2.3 對多邊形進行抗鋸齒處理 172
6.3 霧 172
6.3.1 使用霧 173
6.3.2 霧方程式 175
6.4 點參數 181
6.5 多邊形偏移 182
第7章 顯示列表 185
7.1 為什麼使用顯示列表 185
7.2 一個使用顯示列表的例子 186
7.3 顯示列表的設計哲學 188
7.4 創建和執行顯示列表 189
7.4.1 命名和創建顯示列表 191
7.4.2 存儲在顯示列表里的是什麼 191
7.4.3 執行顯示列表 193
7.4.4 層次式顯示列表 193
7.4.5 管理顯示列表索引 194
7.5 執行多個顯示列表 194
7.6 用顯示列表管理狀態變數 199
第8章 繪製像素、點陣圖、字型和圖像 202
8.1 點陣圖和字型 203
8.1.1 當前光柵位置 204
8.1.2 繪製點陣圖 205
8.1.3 選擇點陣圖的顏色 206
8.1.4 字型和顯示列表 206
8.1.5 定義和使用一種完整的字型 207
8.2 圖像 209
8.3 圖像管線 215
8.3.1 像素包裝和解包 216
8.3.2 控制像素存儲模式 217
8.3.3 像素傳輸操作 219
8.3.4 像素映射 221
8.3.5 放大、縮小或翻轉圖像 222
8.4 讀取和繪製像素矩形 224
8.5 使用緩衝區對象存取像素矩形數據 227
8.5.1 使用緩衝區對象傳輸像素數據 227
8.5.2 使用緩衝區對象提取像素數據 228
8.6 提高像素繪圖速度的技巧 229
8.7 圖像處理子集 230
8.7.1 顏色表 231
8.7.2 卷積 234
8.7.3 顏色矩陣 240
8.7.4 柱狀圖 241
8.7.5 最小最大值 243
第9章 紋理貼圖 245
9.1 概述和示例 248
9.1.1 紋理貼圖的步驟 248
9.1.2 一個示例程式 249
9.2 指定紋理 251
9.2.1 紋理代理 255
9.2.2 替換紋理圖像的全部或一部分 257
9.2.3 一維紋理 259
9.2.4 三維紋理 261
9.2.5 紋理數組 264
9.2.6 壓縮紋理圖像 265
9.2.7 使用紋理框線 267
9.2.8 mipmap:多重細節層 267
9.3 過濾 275
9.4 紋理對象 277
9.4.1 命名紋理對象 277
9.4.2 創建和使用紋理對象 278
9.4.3 清除紋理對象 280
9.4.4 常駐紋理工作集 280
9.5 紋理函式 282
9.6 分配紋理坐標 284
9.6.1 計算正確的紋理坐標 285
9.6.2 重複和截取紋理 286
9.7 紋理坐標自動生成 289
9.7.1 創建輪廓線 289
9.7.2 球體紋理 293
9.7.3 立方圖紋理 294
9.8 多重紋理 296
9.9 紋理組合器函式 299
9.10 在紋理之後套用輔助顏色 303
9.10.1 在禁用光照時使用輔助顏色 303
9.10.2 啟用光照後的輔助鏡面顏色 303
9.11 點塊紋理 303
9.12 紋理矩陣堆疊 304
9.13 深度紋理 305
9.13.1 創建陰影圖 306
9.13.2 生成紋理坐標並進行渲染 307
第10章 幀緩衝區 309
10.1 緩衝區及其用途 310
10.1.1 顏色緩衝區 311
10.1.2 清除緩衝區 312
10.1.3 選擇用於讀取和寫入的顏色緩衝區 313
10.1.4 緩衝區的禁止 315
10.2 片斷測試和操作 316
10.2.1 裁剪測試 316
10.2.2 alpha測試 317
10.2.3 模板測試 318
10.2.4 深度測試 322
10.2.5 遮擋查詢 322
10.2.6 條件渲染 324
10.2.7 混合、抖動和邏輯操作 325
10.3 累積緩衝區 327
10.3.1 運動模糊 328
10.3.2 景深 328
10.3.3 柔和陰影 331
10.3.4 微移 331
10.4 幀緩衝區對象 332
10.4.1 渲染緩衝區 333
10.4.2 複製像素矩形 340
第11章 分格化和二次方程表面 342
11.1 多邊形分格化 342
11.1.1 創建分格化對象 343
11.1.2 分格化回調函式 343
11.1.3 分格化屬性 347
11.1.4 多邊形定義 350
11.1.5 刪除分格化對象 352
11.1.6 提高分格化性能的建議 352
11.1.7 描述GLU錯誤 352
11.1.8 向後兼容性 352
11.2 二次方程表面:渲染球體、圓柱體和圓盤 353
11.2.1 管理二次方程對象 354
11.2.2 控制二次方程對象的屬性 354
11.2.3 二次方程圖元 355
第12章 求值器和NURBS 360
12.1 前提條件 360
12.2 求值器 361
12.2.1 一維求值器 361
12.2.2 二維求值器 365
12.2.3 使用求值器進行紋理處理 369
12.3 GLU的NURBS接口 371
12.3.1 一個簡單的NURBS例子 371
12.3.2 管理NURBS對象 374
12.3.3 創建NURBS曲線或表面 377
12.3.4 修剪NURBS表面 380
第13章 選擇和反饋 383
13.1 選擇 383
13.1.1 基本步驟 384
13.1.2 創建名字棧 384
13.1.3 點擊記錄 385
13.1.4 一個選擇例子 386
13.1.5 挑選 389
13.1.6 編寫使用選擇的程式的一些建議 397
13.2 反饋 398
13.2.1 反饋數組 399
13.2.2 在反饋模式下使用標記 400
13.2.3 一個反饋例子 400
第14章 OpenGL高級技巧 404
14.1 錯誤處理 405
14.2 OpenGL版本 406
14.2.1 工具函式館版本 407
14.2.2 視窗系統擴展版本 407
14.3 標準的擴展 407
14.4 實現半透明效果 409
14.5 輕鬆實現淡出效果 409
14.6 使用後緩衝區進行物體選擇 411
14.7 低開銷的圖像轉換 411
14.8 顯示層次 412
14.9 抗鋸齒字元 413
14.10 繪製圓點 414
14.11 圖像插值 414
14.12 製作貼花 415
14.13 使用模板緩衝區繪製填充的凹多邊形 416
14.14 尋找衝突區域 416
14.15 陰影 417
14.16 隱藏直線消除 418
14.16.1 使用多邊形偏移實現隱藏直線消除 418
14.16.2 使用模板緩衝區實現隱藏直線消除 419
14.17 紋理貼圖的套用 419
14.18 繪製深度緩衝的圖像 420
14.19 Dirichlet域 420
14.20 使用模板緩衝區實現生存遊戲 421
14.21 glDrawPixels()和glCopyPixels()的其他套用 422
第15章 OpenGL著色語言 424
15.1 OpenGL圖形管線和可程式著色器 424
15.1.1 頂點處理 425
15.1.2 片斷處理 426
15.2 使用GLSL著色器 427
15.2.1 著色器示例 427
15.2.2 OpenGL/GLSL接口 428
15.3 OpenGL著色語言 432
15.4 使用GLSL創建著色器 433
15.4.1 程式起點 433
15.4.2 聲明變數 433
15.4.3 聚合類型 434
15.5 uniform塊 439
15.5.1 在著色器中指定uniform變數 440
15.5.2 訪問在uniform塊中聲明的uniform變數 440
15.5.3 計算不變性 446
15.5.4 語句 446
15.5.5 函式 448
15.5.6 在GLSL程式中使用OpenGL 狀態值 449
15.6 在著色器中訪問紋理圖像 449
15.7 著色器預處理器 452
15.7.1 預處理器指令 452
15.7.2 宏定義 452
15.7.3 預處理器條件 453
15.7.4 編譯器控制 453
15.8 擴展處理 454
15.9 頂點著色器的細節 454
15.10 變換反饋 458
15.11 片斷著色器 462
附錄A GLUT(OpenGL實用工具庫)基礎知識 464
附錄B 狀態變數 468
附錄C 齊次坐標和變換矩陣 495
附錄D OpenGL和視窗系統 499
術語表 511