內容介紹
本書詳細闡述了與著色器程式設計相關的高效解決方案及相應的數據結構和算法,主要包括固定功能管線、OpenGL著色器的發展、著色器基本概念、使用glman、GLSL著色器語言、光照、頂點著色器、片元著色器和表面外觀、片元著色器中的表
面紋理、噪聲、基於著色器的圖像處理、幾何著色器的概念和示例、細分著色器、GLSLAPI、基於著色器的科學可視化計算以
及著色器套用等內容。此外,本書還提供了相應的算法、代碼以及偽代碼,以幫助讀者進一步理解相關方案的實現過程。
本書適合作為高等院校計算機及相關專業的教材和教學參考書,也可作為相關開發人員的自學教材和參考手冊。
作品目錄
第1章固定功能管線1傳統的視見方案1
頂點操作1
管線的片元處理3
圖形管線中的狀態4
傳統視見機制的實現方案5
頂點處理操作5
渲染處理操作6
固定管線中的齊次坐標9
頂點數組10
本章小結13
本章練習14
第2章OpenGL著色器的發展16
著色器發展史17
OpenGL著色器發展史19
OpenGL 2.0/GLSL 1.1019
OpenGL 3.x/GLSL 3.3019
OpenGL 4.0/GLSL 4.0020
OpenGL 4.x/GLSL 4.x021
內部原因21
OpenGL ES22
處理不同版本22
本書方案22
變數名命名規則23
本章練習23
第3章著色器基本概念24
圖形管線中的著色器24
頂點著色器26
片元著色器29
細分著色器31
幾何著色器34
圖形著色器——理論與實踐(第 2 版) ·X·
GLSL著色器語言35
應用程式與著色器之間的數據傳遞38
在應用程式中定義attribute變數38
在應用程式中定義uniform變數40
GLSL新版本之間的轉換方式42
本章練習44
第4章glman的使用45
使用glman46
載入GLIB檔案47
編輯GLIB檔案和著色器檔案47
生成GLIB場景47
視窗和視見操作47
轉換操作48
定義幾何對象48
定義紋理50
定義著色器名50
其他命令51
定義uniform變數51
GLIB檔案示例53
紋理和噪聲54
使用紋理55
使用噪聲紋理55
glman界面視窗功能56
生成並顯示場景的硬拷貝56
全局場景轉換57
眼睛轉換57
對象拾取和轉換57
紋理轉換58
顯示幀速率58
其他功能項59
本章練習59
第5章GLSL著色器語言61
著色器語言的成因61
圖形卡功能項62
通用GLSL語言63
共享命名空間64
函式擴展和操作符功能項64
目 錄 ·XI·
新增函式64
新增變數類型65
新增函式參數類型65
具體實現65
忽略的語言功能項66
新增矩陣和向量類型66
名稱集67
向量構造函式67
矩陣和向量擴展函式68
矩陣和向量的擴展操作70
新增函式71
混合操作75
新增函式參數類型75
const變數76
兼容模式76
定義兼容模式76
OpenGL 2.1內建數據類型77
綜述81
本章練習81
第6章光照82
ADS光照模型82
ADS光照模型函式83
光源類型85
固定光源85
有向光源86
聚光燈86
構建基於著色器的光照機制88
固定著色88
平滑著色89
Phong著色方案89
各向異性著色90
本章練習91
第7章頂點著色器92
圖形管線中的頂點著色器93
頂點著色器的輸入數據93
源自頂點著色器的輸出數據94
幾何體94
頂點著色器之後的固定功能處理96
圖形著色器——理論與實踐(第 2 版) ·XII·
頂點著色器和細分著色器之間的關係96
頂點著色器和幾何著色器之間的關係96
利用頂點著色器替換固定功能圖形操作97
標準的頂點處理過程97
基於頂點著色器的固定功能管線擴展97
頂點修正98
頂點著色器中的問題100
生成法線100
綜述101
本章練習102
第8章片元著色器和表面外觀103
片元著色器的基本功能104
片元著色器的輸入數據104
片元著色器的in變數105
坐標系106
片元著色器處理機制107
源自片元著色器的輸出數據107
利用片元處理器替換固定功能處理107
著色機制107
傳統的紋理貼圖108
偽色108
片元著色器後續步驟110
其他著色器效果110
像素丟棄111
Phong著色111
基於解析法線的著色機制112
各向異性著色113
基於數據驅動的色彩方案114
使用其他數據生成圖像115
本章練習116
第9章片元著色器中的表面紋理117
紋理坐標117
傳統的紋理貼圖117
GLSL紋理貼圖118
紋理上下文120
固定功能管線中的紋理環境121
紋理採樣參數121
目 錄 ·XIII·
採樣器122
過程紋理122
凹凸貼圖127
立方體貼圖132
渲染至紋理135
渲染至紋理(glman多路渲染)138
本章練習140
第10章噪聲141
噪聲的基本概念141
3種噪聲類型:數值、梯度以及數值+梯度142
三次插值和五次插值142
噪聲方程143
其他噪聲145
分形布朗運動(FBM,1/f,倍頻程)146
二維噪聲和三維噪聲146
基於glman的噪聲148
基於內建GLSL函式使用噪聲紋理149
湍流149
不同環境中的噪聲示例151
大理石著色器153
雲彩著色器153
木材著色器155
與噪聲相關的高級話題156
noisegraph應用程式156
本章練習157
第11章基於著色器的圖像處理159
基本概念160
單幅圖像處理160
亮度160
CMYK轉換161
色調轉換163
圖像過濾機制165
圖像模糊操作166
色度鍵圖像167
立體視圖169
3D電視171
邊檢測技術173
圖形著色器——理論與實踐(第 2 版) ·XIV·
浮雕效果174
卡通著色器176
藝術視覺效果177
圖像的翻轉、旋轉和扭曲178
圖像混合處理182
基於固定基圖像的圖像混合操作183
反像183
亮度184
對比度184
圖像的自身混合操作185
飽和度185
銳利度186
不同圖像間的混合操作187
其他合成方案188
圖像漸變190
內容提示194
本章練習195
第12章幾何著色器的概念和示例198
幾何著色器的功能198
新型鄰接圖元200
基於輸入和輸出變數的布局結構201
新增OpenGL API函式201
新增GLSL變數以及變數類型203
頂點著色器或細分著色器與幾何著色器之間的通信203
幾何著色器中的法線204
套用示例205
Bezier曲線205
收縮三角形207
球體細分208
3D對象輪廓邊211
本章練習213
第13章細分著色器214
細分著色器定義214
細分著色器與幾何著色器215
細分著色器概念216
設定細分級別時的問題219
套用示例219
目 錄 ·XV·
等值線219
Bezier曲面222
球體細分228
基於螢幕覆蓋率的整球細分233
PN三角形236
綜述241
本章練習241
第14章GLSL API243
OpenGL程式處理中的著色器243
處理OpenGL擴展244
GLSL著色器程式的創建方式245
創建並編譯著色器對象245
CheckGLErrors()函式247
創建、綁定、連結並激活著色器程式248
生成著色器程式並綁定著色器對象248
著色器程式的連結操作249
激活著色器程式250
向著色器傳遞數據250
在應用程式中定義uniform變數251
兼容模式下的uniform變數253
在應用程式中定義attribute變數254
兼容模式下的attribute變數255
著色器程式的C++控制類256
本章練習257
第15章基於著色器的科學可視化計算258
基於圖像的可視化技術258
負像258
圖像邊檢測259
卡通渲染259
雙曲線幾何學260
3D標量數據可視化計算263
點雲264
剖切面267
體探測270
直接體渲染271
其他轉換函式276
通過幾何對象傳遞數據值279
圖形著色器——理論與實踐(第 2 版) ·XVI·
地形凹凸貼圖280
流顯示283
2D線積分卷積283
3D線積分卷積285
獲取流線對象286
幾何可視化289
輪廓邊技術289
刺狀區290
本章練習292
第16章著色器套用295
光線干涉現象295
衍射光柵295
油膜299
透鏡效果301
浴室玻璃304
大氣效果306
彩虹307
輝光效果310
其他視效函式312
glman Timer函式313
迪斯科球313
霧效果315
3D幾何體變形316
算法藝術319
Connett圓319
運動狀態下的可見信息321
爆炸效果著色器322
本章練習324
參考文獻326
附錄A基於GLSL程式的C++類329
附錄BMatrix4 C++類331
附錄CVec C++類334
附錄D頂點數組類336