譯者序
前言
第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
· · · · · · (
收起)