計算機圖形學編程 (使用 OpenGL 和 C++), 2/e

[美]V.斯科特·戈登(V. Scott Gordon) ,約翰·克萊維吉(John Clevenger)

  • 計算機圖形學編程 (使用 OpenGL 和 C++), 2/e-preview-1
  • 計算機圖形學編程 (使用 OpenGL 和 C++), 2/e-preview-2
計算機圖形學編程 (使用 OpenGL 和 C++), 2/e-preview-1

買這商品的人也買了...

商品描述

本書以OpenGL和C++作為工具,介紹電腦圖形學編程的相關內容。全書從圖形編程的基礎和準備工作講起,介紹了OpenGL圖像管線、3D模型、紋理貼圖、光照、陰影、天空和背景、增強錶面細節、曲面細分、幾何著色器、水面模擬、光線追蹤等電腦圖形學編程技術。本書各章配備了不同形式的習題,供讀者鞏固所學知識。

 

本書適合作為高等院校電腦科學專業的電腦圖形編程課程的教材或輔導書,也適合對電腦圖形編程感興趣的讀者自學。

作者簡介

V.斯科特·戈登(V. Scott Gordon),加利福尼亚州立大学萨克拉门托分校教授,撰写及合著出版物30多部,涉及人工智能、神经网络、进化计算、计算机图形学、软件工程、视频和策略游戏编程,以及计算机科学教育等多个领域。戈登博士在科罗拉多州立大学获得博士学位。

 

约翰·克莱维吉(John Clevenger ),加利福尼亚州立大学萨克拉门托分校教授,拥有超过40年的教学经验,教学内容包括高级图形学、游戏架构、操作系统、VLSI芯片设计、系统仿真等主题。他是国际大学生程序设计竞赛(ICPC)的技术总监,负责监督编程竞赛支持系统PC^2的持续开发。克莱维吉博士在加州大学戴维斯分校获得博士学位。

目錄大綱

第 1 章 入門 1

1.1 語言和庫 1

1.1.1 C++ 1

1.1.2 OpenGL / GLSL 2

1.1.3 窗口管理庫 2

1.1.4 擴展庫 2

1.1.5 數學庫 3

1.1.6 紋理圖像加載庫 3

1.1.7 可選庫 3

1.2 安裝和配置 3

參考資料 4

第 2 章 OpenGL 圖像管線 5

2.1 OpenGL 管線 5

2.1.1 C++/OpenGL 應用程序 6

2.1.2 頂點著色器和片段著色器 8

2.1.3 曲面細分著色器 11

2.1.4 幾何著色器 11

2.1.5 柵格化 12

2.1.6 片段著色器 13

2.1.7 像素操作 13

2.2 檢測 OpenGL 和 GLSL 錯誤 14

2.3 從文件中讀取 GLSL 源代碼 16

2.4 從頂點構建對象 17

2.5 場景動畫 18

2.6 C++代碼文件結構 19

補充說明 20

習題 21

參考資料 21

第 3 章 數學基礎 22

3.1 3D 坐標系統 22

3.2 點 22

3.3 矩陣 22

3.4 變換矩陣 24

3.4.1 平移矩陣 24

3.4.2 縮放矩陣 25

3.4.3 旋轉矩陣 25

3.5 向量 26

3.5.1 點積的應用 27

3.5.2 叉積的應用 28

3.6 局部和世界空間 28

3.7 視覺空間和合成相機 28

3.8 投影矩陣 30

3.8.1 透視投影矩陣 30

3.8.2 正射投影矩陣 31

3.9 LookAt 矩陣 32

3.10 用來構建矩陣變換的 GLSL

函數 32

補充說明 33

習題 34

參考資料 34

第 4 章 管理 3D 圖形數據 35

4.1 緩沖區和頂點屬性 35

4.2 統一變量 37

4.3 頂點屬性插值 37

4.4 模型-視圖和透視矩陣 38

4.5 我們的第 一個3D程序—— 一個3D立方體 39

4.6 渲染一個對象的多個副本 45

實例化 45

4.7 在同一個場景中渲染多個不同模型 47

4.8 矩陣棧 49

4.9 應對“Z 沖突”偽影 53

4.10 圖元的其他選項 54

4.11 性能優先的編程方法 55

4.11.1 盡量減少動態內存空間分配 55

4.11.2 預先計算透視矩陣 55

4.11.3 背面剔除 56

補充說明 58

習題 58

參考資料 59

第 5 章 紋理貼圖 60

5.1 加載紋理圖像文件 60

5.2 紋理坐標 61

5.3 創建紋理對象 62

5.4 構建紋理坐標 62

5.5 將紋理坐標載入緩沖區 63

5.6 在著色器中使用紋理:採樣器變量和紋理單元 64

5.7 紋理貼圖:示例程序 64

5.8 多級漸遠紋理貼圖 66

5.9 各向異性過濾 69

5.10 環繞和平鋪 69

5.11 透視變形 70

5.12 材質—更多OpenGL細節 71

補充說明 72

習題 72

參考資料 72

第 6 章 3D 模型 74

6.1 程序構建模型—構建一個球體 74

6.2 OpenGL 索引—構建一個環面 79

6.2.1 環面 79

6.2.2 OpenGL 中的索引 79

6.3 加載外部構建的模型 84

補充說明 90

習題 90

參考資料 90

第 7 章 光照 91

7.1 光照模型 91

7.2 光源 91

7.3 材質 93

7.4 ADS 光照計算 95

7.5 實現 ADS 光照 96

7.5.1 Gouraud 著色(雙線性光強插值法) 97

7.5.2 Phong 著色 101

7.6 結合光照與紋理 105

補充說明 106

歷史記錄 106

習題 107

參考資料 107

第 8 章 陰影 108

8.1 陰影的重要性 108

8.2 投影陰影 108

8.3 陰影體 109

8.4 陰影貼圖 109

8.4.1 陰影貼圖(第 1 輪)—— 從光源位置“繪制”物體 110

8.4.2 陰影貼圖(中間步驟)——將 Z 緩沖區復制到紋理 111

8.4.3 陰影貼圖(第 2 輪)—— 渲染帶陰影的場景 111

8.5 陰影貼圖示例 113

8.6 陰影貼圖的偽影 117

8.7 柔和陰影 119

8.7.1 現實世界中的柔和陰影 119

8.7.2 生成柔和陰影——百分比鄰近濾波(PCF) 120

8.7.3 柔和陰影/PCF 程序 122

補充說明 124

習題 124

參考資料 125

第 9 章 天空和背景 126

9.1 天空盒 126

9.2 穹頂 127

9.3 實現天空盒 128

9.3.1 從頭開始構建天空盒 128

9.3.2 使用 OpenGL 立方體貼圖 131

9.4 環境貼圖 133

補充說明 136

習題 137

參考資料 137

第 10 章 增強錶面細節 138

10.1 凹凸貼圖 138

10.2 法線貼圖 139

10.3 高度貼圖 145

補充說明 146

習題 147

參考資料 147

第 11 章 參數曲面 148

11.1 二次貝塞爾曲線 148

11.2 三次貝塞爾曲線 149

11.3 二次貝塞爾曲面 151

11.4 三次貝塞爾曲面 152

補充說明 153

習題 153

參考資料 153

第 12 章 曲面細分 154

12.1 OpenGL 中的曲面細分 154

12.2 貝塞爾曲面細分 158

12.3 地形、高度圖的細分 162

12.4 控制細節級別 166

補充說明 168

習題 168

參考資料 168

第 13 章 幾何著色器 169

13.1 OpenGL 中的逐個圖元處理 169

13.2 修改圖元 170

13.3 刪除圖元 172

13.4 添加圖元 173

13.5 更改圖元類型 175

補充說明 176

習題 176

參考資料 176

第 14 章 其他技術 177

14.1 霧 177

14.2 復合、混合、透明度 178

14.3 用戶定義剪裁平面 182

14.4 3D 紋理 183

14.5 噪聲 187

14.6 噪聲應用——大理石 190

14.7 噪聲應用——木材 193

14.8 噪聲應用——雲 195

14.9 噪聲應用——特殊效果 198

補充說明 199

習題 200

參考資料 200

第 15 章 模擬水面 202

15.1 游泳池錶面和底部的幾何設定 202

15.2 添加水面反射和折射 205

15.3 添加水面波浪 212

15.4 更多修正 213

15.5 為水的流動添加動畫 216

15.6 水下焦散 218

補充說明 219

習題 220

參考資料 220

第 16 章 光線追蹤和計算著色器 221

16.1 計算著色器 222

16.1.1 編譯及使用計算著色器 222

16.1.2 計算著色器中的並行計算 222

16.1.3 工作組 225

16.1.4 工作組詳解 225

16.1.5 工作組的限制 227

16.2 光線投射 227

16.2.1 定義 2D 紋理圖像 228

16.2.2 構建和顯示光線投射圖像 228

16.2.3 光線與球面的交點 233

16.2.4 軸對齊的光線與立方體的交點 234

16.2.5 無光照的簡單光線投射的輸出 235

16.2.6 添加 ADS 光照 235

16.2.7 添加陰影 237

16.2.8 非軸對齊的光線與立方體的交點 238

16.2.9 確定紋理坐標 239

16.2.10 平面交點和過程紋理 244

16.3 光線追蹤 246

16.3.1 反射 246

16.3.2 折射 247

16.3.3 結合反射、折射和紋理 249

16.3.4 增加光線數 250

16.3.5 通用解決方案 254

16.3.6 更多示例 257

16.3.7 透明對象的顏色混合 260

補充說明 264

習題 265

參考資料 265

第 17 章 3D 眼鏡和 VR 頭顯的立體視覺 267

17.1 雙目視圖和投影矩陣 268

17.2 色差式渲染 269

17.3 並排式渲染 270

17.4 修正頭顯的鏡頭畸變 271

17.5 簡單的測試硬件配置 276

補充說明 277

習題 277

參考資料 277

附錄 A PC(Windows)上的安裝與設置 279

A.1 安裝庫和開發環境 279

A.1.1 安裝開發環境 279

A.1.2 安裝 OpenGL/GLSL 279

A.1.3 準備 GLFW 279

A.1.4 準備 GLEW 280

A.1.5 準備 GLM 280

A.1.6 準備 SOIL2 280

A.1.7 準備共享的 lib 和include 文件夾 280

A.2 在 MS Visual Studio 中開發和部署 OpenGL 項目 281

創建 Visual Studio 自定義項目模板 281

參考資料 282

附錄 B Mac(macOS)平臺上的安裝與設置 283

B.1 安裝庫和開發環境 283

B.1.1 準備並安裝依賴庫 283

B.1.2 準備開發環境 284

B.2 修改 Mac 的 C++/OpenGL/ GLSL 應用程序代碼 285

B.2.1 修改 C++代碼 285

B.2.2 修改 GLSL 代碼 286

參考資料 287

附錄 C 使用 Nsight 圖形調試器 288

C.1 關於 NVIDIA Nsight 288

C.2 設置 Nsight 288

C.3 在 Nsight 中運行 C++/OpenGL

應用程序 289

參考資料 291