本書由淺入深地講解OpenGL的概念和用法,通過一個個簡單的實例使讀者對各個知識點一目了然。書中包括渲染管道、著色器、緩存、紋理、矩陣、光照模型、陰影、幀緩存、拾取、文字、用戶界面、體渲染、透明和通用計算等內(nèi)容。讀者掌握這些之后,就可以自由地設計和編寫中等規(guī)模的三維圖形程序,并且能夠渲染百萬數(shù)量級頂點的模型。本書相關內(nèi)容將在Github上持續(xù)更新,讀者可參閱更多資料。
本書適用于熟悉C、C 、C#或Java等任何面向對象編程語言的讀者,本書會對這些相關的基礎內(nèi)容進行必要的介紹。讀者只需認真實踐,完全可以掌握本書內(nèi)容。
大部分講解OpenGL的書都是用C\\C 編寫代碼的,但本書全部使用C#編寫OpenGL程序。這是因為,與C\\C 等語言相比,C#需要的配置*少,運行環(huán)境*簡單,調試環(huán)境*方便,*適合用來學習復雜的OpenGL。本書所有代碼均可下載,方便讀者學習。
本書將以C#為工具介紹OpenGL的相關知識。如果讀者不太了解C#或面向對象程序設計,可參考本書最后的附錄。
本書由淺入深地講解OpenGL的概念和用法,通過一個個簡單的實例讓讀者一目了然地認識OpenGL的各個知識點。本書包括渲染管道(Pipeline)、著色器(Shader)、緩存(Buffer)、紋理(Texture)、矩陣(Matrix)、光照模型(Lighting)、陰影(Shadow)、幀緩存(Framebuffer)、拾取(Picking)、文字(Text)、用戶界面(UI)、體渲染(Volume Rendering)、透明(Transparency)和通用計算(Compute Shader)等內(nèi)容。讀者掌握這些內(nèi)容后,就可以自由設計、編寫中等規(guī)模的三維圖形程序了,并且能夠渲染百萬數(shù)量級頂點的模型。
本書的網(wǎng)絡資料包含了書中所有的完整代碼,讀者可以從北航出版社網(wǎng)站(www.buaapress.com.cn)的下載專區(qū)的相關頁面獲取。另外,讀者也可以在CSharpGL托管頁面(https://github.com/bitzhuwei/CSharpGL)找到本書的全部代碼。如果讀者對本書內(nèi)容有任何疑問、指錯或想進一步深入討論,還可以在托管頁面進行提問、討論。本書最后的附錄也提供了簡單的Github入門教程。
感謝北京航空航天大學出版社提供的機會與平臺,感謝家人以及業(yè)界的朋友在本書編寫的過程中給予的支持和幫助,這里還要特別感謝編輯劇艷婕在本書出版的過程中提出的寶貴意見。希望本書能夠幫助讀者打開計算機圖形學的大門。
作者畢業(yè)于北京理工大學軟件工程專業(yè),熱愛編程,潛心研究OpenGL和圖形學多年,自行設計編寫了CSharpGL開源庫。期望本書能將作者的感悟傳播給更多的同道中人。
第1章Hello OpenGL1
1.1從這里開始認識1
1.2OpenGL是什么1
1.3如何使用OpenGL2
1.4Hello
OpenGL6
1.5輔助工具22
1.6不含位置屬性的頂點29
1.7總結31
1.8問題31
第2章紋理33
2.1二維紋理33
2.2其他類型的紋理40
2.3多個紋理43
2.4多個渲染方法46
2.5總結48
2.6問題48
第3章空間和矩陣50
3.1如何理解矩陣50
3.2空間和矩陣的關系52
3.3Pipeline中的空間60
3.4實例化渲染61
3.5總結63
3.6問題63
第4章幾何著色器64
4.1介紹64
4.2示例:渲染法線66
4.3總結69
4.4問題69
第5章光照70
5.1BlinnPhong光照模型70
5.2光源70
5.3反射光70
5.4BlinnPhong算法75
5.5同時使用多個光源77
5.6陰影80
5.7凹凸映射80
5.8噪聲84
5.9總結88
5.10問題88
第6章幀緩存89
6.1名詞術語90
6.2附著點90
6.3將Texture附著到Framebuffer91
6.4附著Renderbuffer95
6.5示例:Render to Texture95
6.6總結99
6.7問題100
第7章陰影101
7.2Shadow
Volume110
7.3模板緩存的初始化122
7.4多光源下的陰影123
7.5總結124
7.6問題124
第8章拾取125
8.1基礎125
8.2在DrawArraysCmd命令下的拾取140
8.3在DrawElementsCmd命令下的拾取146
8.4拖拽頂點157
8.5總結162
8.6問題163
第9章文字164
9.1固定尺寸且始終面向Camera164
9.2字形信息169
9.3三維世界的文字174
9.4總結177
9.5問題177
第10章簡單的用戶界面178
10.1指定區(qū)域的貼圖178
10.2控件的布局機制179
10.3控件的事件機制188
10.4CtrlImage193
10.5CtrlLabel196
10.6CtrlButton200
10.7總結202
10.8問題202
第11章軌跡球203
11.1軌跡球203
11.2使用204
11.3設計205
11.4四元數(shù)209
11.5總結210
11.6問題210
第12章體渲染211
12.1什么是體渲染211
12.2靜態(tài)切片212
12.3動態(tài)切片215
12.4Raycasting217
12.5總結223
12.6問題224
第13章半透明渲染225
13.1跳躍著色法225
13.2與順序無關的半透明渲染226
13.3Front
to Back Peeling235
13.4總結240
13.5問題240
第14章Transform Feedback Object241
14.1Transform
Feedback如何工作241
14.2使用Transform Feedback Object244
14.3輪流更新245
14.4粒子系統(tǒng)251
14.5總結254
14.6問題254
第15章Compute Shader255
15.1Compute
Shader簡介255
15.2圖像處理257
15.3粒子系統(tǒng)261
15.4總結262
15.5問題263
附錄264
附錄AGithub入門264
附錄BC#和面向對象入門277
附錄C解析簡單的wavefront(*.obj)文件格式298
附錄D自制體數(shù)據(jù)的2種方法302