-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

OpenGL編程指南(原書第8版)

( 簡體 字)
作者:(美)Dave Shreiner,Graham Sellers,John Kessenich,Bill Licea-Kane 著類別:1. -> 多媒體 -> OpenGL
譯者:
出版社:機械工業出版社OpenGL編程指南(原書第8版) 3dWoo書號: 40015
詢問書籍請說出此書號!

缺書
NT售價: 645

出版日:11/1/2014
頁數:651
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111481133
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

GL圖形系統是圖形硬件的一種軟件接口(GL表示Graphics Library,即圖形庫)。它使得用戶可以創建交互式的程序以產生運動的3維對象的顏色圖像。通過OpenGL,我們可以使用計算機圖形學技術來產生逼真的圖像,或者通過一些虛構的方式產生虛擬的圖像。這本指南將告訴你如何使用OpenGL圖形系統進行編程,得到你所期望的視覺效果。

本書的主要內容

本書包含以下一些章節:

第1章對OpenGL可以完成的工作進行了概覽。它還提供了一個簡單的OpenGL程序并解釋了一些本質性的編程細節,它們可能會用于后繼的章節中。

第2章討論了OpenGL中最主要的特性—可編程著色器,并介紹了它們在應用程序中的初始化和使用方法。

第3章介紹了使用OpenGL進行幾何體繪制的各種方法,以及一些可以讓渲染更為高效的優化手段。

第4章解釋了OpenGL對于顏色的處理過程,包括像素的處理、緩存的管理,以及像素處理相關的渲染技術。

第5章給出了將3維場景在一個2維計算機屏幕上表現的操作細節,包括各種幾何投影類型的數學原理和著色器操作。

第6章討論了將幾何模型與圖像結合來創建真實的、高質量的3維模型的方法。

第7章介紹了計算機圖形的光照效果模擬方法,主要是這類方法在可編程著色器中的實現。

第8章介紹了使用可編程著色器生成紋理和其他表面效果的方法細節,從而增強真實感和其他的渲染特效。

第9章解釋了OpenGL管理和細分幾何表面的著色器功能。

第10章介紹了一個在OpenGL渲染流水線中使用著色器進行幾何體圖元修改的特別技術。

第11章介紹了使用OpenGL幀緩存和緩存內存實現高級渲染技術和非圖形學應用的相關方法。

第12章介紹了最新的著色器階段,將通用計算的方法融合到OpenGL的渲染流水線當中。

此外,我們也提供了一系列作為參考的附錄內容。

附錄A介紹了OpenGL Utility Toolkit這個專用于窗口系統操作的庫。GLUT是可移植的,它可以用來實現更簡短也更加可讀的代碼案例。

附錄B介紹了OpenGL體系中的其他API,包括用于嵌入式和移動平臺系統的OpenGL ES,以及用于Web瀏覽器內的交互式3D應用程序的WebGL。

附錄C提供了有關OpenGL著色語言的詳細參考文檔。

附錄D列出了OpenGL維護的所有狀態變量,并介紹了獲取其數值的方法。

附錄E介紹了與矩陣變換相關的一些數學方法。

附錄F介紹了不同的窗口系統相關的各種庫,它們提供了各種綁定例程,以支持OpenGL渲染到本地窗口當中。

附錄G對于OpenGL中所用到的浮點數格式做出了概述。

附錄H介紹了OpenGL中最新的調試特性。

附錄I給出了有關uniform緩存的使用的參考文檔,其中使用了OpenGL定義的標準內存布局。

本版新增內容

本書的內容是顛覆性的!對于那些已經閱讀過本書以前版本的讀者來說,這一版完全根據OpenGL應用程序開發的最新方法和技術進行了重寫。本書將經典紅寶書的以函數為中心的方法,與《OpenGL著色語言》(通常也稱作“橘皮書”)一書中的著色技術進行了融合。

在這一版中,作者團隊中也納入了OpenGL開發的一些主要貢獻者,以及OpenGL著色語言標準的編者。因此,這一版將會涵蓋OpenGL的最新版本,也就是版本4.3,其中包括了計算著色器的內容。本書還介紹了可編程渲染管線的每個階段。我們衷心地希望你能夠從本書中找到實用的以及有教育價值的內容。

你需要在閱讀本書之前掌握的知識

本書假設你已經了解了使用C語言進行編程的方法(我們將使用少量的C++程序,不過你應該會比較容易理解它們),并且具有一定的數學背景(幾何、三角學、線性代數、微積分,以及微分幾何)。即使你對于計算機圖形學技術沒有太多的經驗或者一無所知,你也可以學習和理解本書中討論的大部分內容。當然,計算機圖形學是一個不斷延展的學科,因此你也許還需要閱讀以下的補充內容來提升自己的知識。

《Computer Graphics: Principles and Practice》第3版,John F. Hughes等著(Addison-Wesley,2013):這本書是有關計算機圖形學的一本百科全書。它包含了大量有價值的信息,不過在閱讀它之前,你最好已經對這門學科有了一定的了解。

《3D Computer Graphics》,Andrew S. Glassner著(The Lyons Press,1994):這本書是有關計算機圖形學的非技術性的、適度的介紹。它注重于可以實現的可視化效果本身,而不是實現這些效果所需的技術。

另一個可以有組織地進行系統學習的地方就是OpenGL網站。該網站包含了軟件、示例程序、文檔、FAQ、討論版,以及新聞頁面。如果你想要搜索OpenGL相關問題的答案,那么這里是一個好的開始:

http://www.opengl.org/

此外,OpenGL的官方網站中還包含了OpenGL的最新版本對應的所有函數和著色語言語法的完整文檔。這些網頁內容完整地涵蓋了《OpenGL Reference Manual》一書的內容,后者由OpenGL Architecture Review Board和Addison-Wesley出版。

OpenGL是一個與硬件密切相關的編程接口標準,我們可能會在某一類特定的硬件上使用一個特定的OpenGL實現。本書將會介紹如何使用任意的OpenGL實現進行編程。但是,因為這些實現之間會存在細微的差異—包括性能上的差異,以及額外的特性支持—你可能需要閱讀自己所用的特定設備實現所對應的補充文檔。此外,某個特定實現的供應商網站上,也可能也會提供一些OpenGL相關的實用工具、工具包、編程和調試支持、窗口組件、示例代碼,以及示例程序。

如何獲取示例代碼

本書包含很多示例程序,它們演示了特定OpenGL編程技術的用法。本書的讀者群體在計算機圖形學和OpenGL方面可能有著巨大的經驗差異,有的人是新手,而有的人是多年的老手,因此這些章節里給出的案例都會使用最簡單的方法去實現一個特定的渲染形式,并且全部使用OpenGL 4.3版本的接口。這樣的做法主要是為了確保那些剛開始學習OpenGL的讀者也能夠順利地閱讀相關的內容。對于那些已經有了足夠的經驗,只是希望了解最新的API特性實現的讀者,我們首先感謝你能夠耐心閱讀本書前面的內容,之后你可以訪問我們的網站:

http://www.opengl-redbook.com/

在這里你將會找到本書中所有示例的源代碼,它們均使用最新的特性進行實現,而后文的討論中也會涉及從一個OpenGL版本移植到另一個版本所需的修改。

本書中所有的程序都使用了OpenGL Utility Toolkit(GLUT),它的原作者為Mark Kilgard。在這一版中,我們將使用GLUT接口的開源版本,它來自freeglut工程。這個工程對Mark的原始工程(在作者的著作《OpenGL Programming for the X Window System》中進行了詳細介紹, Addison-Wesley,1997)進行了加強。你可以在下面的地址里找到開源的工程頁面:

http://freeglut.sourceforge.net/

你可以在這個網站中找到相應的代碼和二進制程序。

本書還介紹了有關GLUT庫的信息。可以在OpenGL網站的資源頁面找到更多幫助你學習和使用OpenGL與GLUT的資源。

http://www.opengl.org/resources/

OpenGL的很多實現也包含了一些系統相關的代碼示例。這些源代碼可能是你實現程序時最好的資源,因為它們已經針對系統進行了優化。你可以閱讀與自己的系統相關的OpenGL文檔來了解如何獲取這些代碼示例。

勘誤

遺憾的是,這本書中一定也存在著錯誤。此外,即使在本書出版的期間,OpenGL也是不斷更新的:有一些錯誤被修正,并且標準文檔中也做出了澄清,同時還有新的標準被發布。我們將在網站http://www.opengl-redbook.com/上維護一個錯誤和更新列表,同時我們也會提供一些功能讓用戶提交自己發現的錯誤。如果你發現了本書中的錯誤,我們首先向你鄭重道歉,并且非常感謝你的報告。我們將盡快對其進行更正。
內容簡介:

簡介
本書是由Khronos小組編寫的官方指南,是OpenGL領域的權威著作,素有“OpenGL紅寶書”的美譽。第8版針對OpenGL 4.3版本全方位闡釋OpenGL的各種技術細節、方法和最佳實踐,幫助程序員走上OpenGL專家之路。
本書共12章:第1章概述OpenGL主要特性和功能;第2章討論OpenGL中最主要的特性——可編程著色器;第3章介紹使用OpenGL進行幾何體繪制的各種方法,以及一些可以讓渲染更為高效的優化手段;第4章闡釋OpenGL對于顏色的處理過程,包括像素的處理、緩存的管理以及像素處理相關的渲染技術;第5章介紹在一個二維計算機屏幕上表現三維場景的操作細節;第6章討論將幾何模型與圖像結合來創建真實的、高質量的三維模型的方法;第7章介紹計算機圖形的光照效果模擬方法;第8章介紹使用可編程著色器生成紋理和其他表面效果的方法細節;第9章解釋OpenGL管理和細分幾何表面的著色器功能;第10章介紹在OpenGL渲染管線中使用著色器進行幾何體圖元修改的特別技術;第11章介紹使用OpenGL幀緩存和緩存內存實現高級渲染技術和非圖形學應用的相關方法;第12章介紹了最新的著色器階段,將通用計算的方法融合到OpenGL的渲染管線當中。
目錄:

推薦語

譯者序

前 言

第1章 OpenGL概述 1

1.1 什么是OpenGL 1

1.2 初識OpenGL程序 2

1.3 OpenGL語法 6

1.4 OpenGL渲染管線 7

1.4.1 準備向OpenGL傳輸數據 8

1.4.2 將數據傳輸到OpenGL 8

1.4.3 頂點著色 9

1.4.4 細分著色 9

1.4.5 幾何著色 9

1.4.6  圖元裝配 9

1.4.7 剪切 9

1.4.8 光柵化 9

1.4.9 片元著色 10

1.4.10 逐片元的操作 10

1.5 第一個程序:深入分析 10

1.5.1 進入main()函數 10

1.5.2 OpenGL的初始化過程 12

1.5.3 第一次使用OpenGL進行渲染 21

第2章 著色器基礎 25

2.1 著色器與OpenGL 26

2.2 OpenGL的可編程管線 26

2.3 OpenGL著色語言概述 28

2.3.1 使用GLSL構建著色器 28

2.3.2 存儲限制符 34

2.3.3 語句 37

2.3.4 計算的不變性 41

2.3.5 著色器的預處理器 43

2.3.6 編譯器的控制 45

2.3.7 全局著色器編譯選項 45

2.4 數據塊接口 46

2.4.1 uniform塊 46

2.4.2 指定著色器中的uniform塊 47

2.4.3 從應用程序中訪問uniform塊 48

2.4.4 buffer塊 53

2.4.5 in/out塊 54

2.5 著色器的編譯 54

2.5.1 我們的LoadShaders()函數 58

2.6 著色器子程序 58

2.6.1 GLSL的子程序設置 59

2.6.2 選擇著色器子程序 60

2.7 獨立的著色器對象 62

第3章 OpenGL繪制方式 64

3.1 OpenGL圖元 64

3.1.1 點 65

3.1.2 線、條帶與循環線 66

3.1.3 三角形、條帶與扇面 66

3.2 OpenGL緩存數據 69

3.2.1 創建與分配緩存 69

3.2.2 向緩存輸入和輸出數據 71

3.2.3 訪問緩存的內容 75

3.2.4 丟棄緩存數據 80

3.3 頂點規范 80

3.3.1 深入討論VertexAttrib-Pointer 81

3.3.2  靜態頂點屬性的規范 84

3.4 OpenGL的繪制命令 86

3.4.1 圖元的重啟動 92

3.5 多實例渲染 96

3.5.1 多實例的頂點屬性 97

3.5.2 在著色器中使用實例計數器 102

3.5.3 多實例方法的回顧 104

第4章 顏色、像素和幀緩存 105

4.1 基本顏色理論 106

4.2 緩存及其用途 107

4.2.1 緩存的清除 109

4.2.2 緩存的掩碼 110

4.3 顏色與OpenGL 110

4.3.1 顏色的表達與OpenGL 111

4.3.2 頂點顏色 112

4.3.3 光柵化 114

4.4 多重采樣 115

4.4.1 采樣著色 116

4.5 片元的測試與操作 117

4.5.1 剪切測試 118

4.5.2 多重采樣的片元操作 118

4.5.3 模板測試 119

4.5.4 模板的例子 120

4.5.5 深度測試 122

4.5.6 融混 124

4.5.7 融混參數 125

4.5.8 控制融混的參數 125

4.5.9 融混方程 127

4.5.10 抖動 128

4.5.11 邏輯操作 128

4.5.12 遮擋查詢 129

4.5.13 條件渲染 132

4.6 逐圖元的反走樣 133

4.6.1 線段的反走樣 134

4.6.2 多邊形的反走樣 135

4.7 幀緩存對象 135

4.7.1 渲染緩存 137

4.7.2 創建渲染緩存的存儲空間 138

4.7.3 幀緩存附件 140

4.7.4 幀緩存的完整性 142

4.7.5 幀緩存的無效化 144

4.8 多重渲染緩存的同步寫入 145

4.8.1 選擇顏色緩存來進行讀寫操作 146

4.8.2 雙源融混 148

4.9 像素數據的讀取和拷貝 150

4.10 拷貝像素矩形 152

第5章 視口變換、剪切與反饋 153

5.1 觀察視圖 154

5.1.1 視圖模型 154

5.1.2 相機模型 154

5.1.3 正交視圖模型 157

5.2 用戶變換 158

5.2.1 矩陣乘法的回顧 159

5.2.2 齊次坐標 161

5.2.3 線性變換與矩陣 163

5.2.4  法線變換 173

5.2.5 OpenGL矩陣 174

5.3 OpenGL變換 177

5.3.1 高級技巧:用戶剪切 178

5.4 transform feedback 179

5.4.1 transform feedback對象 180

5.4.2 transform feedback緩存 181

5.4.3 配置transform feedback的變量 183

5.4.4 transform feedback的啟動和停止 187

5.4.5 transform feedback的示例:粒子系統 189

第6章 紋理 195

6.1 紋理映射 196

6.2 基本紋理類型 197

6.3 創建和初始化紋理 198

6.3.1 紋理格式 202

6.4 代理紋理 207

6.5 設置紋理數據 208

6.5.1 顯式設置紋理數據 208

6.5.2 使用Pixel Unpack緩存 210

6.5.3 從幀緩存拷貝數據 211

6.5.4 從文件加載圖像 212

6.5.5 查詢紋理數據 215

6.5.6 紋理數據布局 215

6.6 采樣器對象 219

6.6.1 采樣器參數 220

6.7 使用紋理 221

6.7.1 紋理坐標 223

6.7.2 組織紋理數據 226

6.7.3 使用多重紋理 227

6.8 復雜紋理類型 229

6.8.1 3維紋理 229

6.8.2 數組紋理 231

6.8.3 立方體映射紋理 231

6.8.4 陰影采樣器 237

6.8.5 深度模板紋理 238

6.8.6 緩存紋理 238

6.9 紋理視圖 240

6.10 壓縮紋理 243

6.11 濾波 245

6.11.1 線性濾波 245

6.11.2 使用和生成mipmap 247

6.11.3 計算mipmap級別 251

6.11.4 mipmap細節層次控制 252

6.12 高級紋理查詢函數 252

6.12.1 顯式細節層次 252

6.12.2 顯式梯度設置 253

6.12.3 偏移后的紋理獲取 253

6.12.4 投影紋理 254

6.12.5 著色器中的紋理查詢 254

6.12.6 收集紋素 256

6.12.7 合并特殊函數 256

6.13 點精靈 257

6.13.1 帶紋理的點精靈 257

6.13.2 控制點的外觀 259

6.14 渲染到紋理貼圖 260

6.14.1 丟棄已渲染數據 263

6.15 本章總結 264

6.15.1 紋理回顧 264

6.15.2 紋理的最好實踐 265

第7章 光照與陰影 266

7.1 光照介紹 267

7.2 經典光照模型 267

7.2.1 不同光源類型的片元著色器 268

7.2.2 將計算移到頂點著色器 277

7.2.3 多個光源和材質 279

7.2.4 光照坐標系統 285

7.2.5 經典光照模型的局限 285

7.3 光照模型進階 286

7.3.1 半球光照 286

7.3.2 基于圖像的光照 289

7.3.3 球面光照 293

7.4 陰影映射 296

7.4.1 創建一張陰影貼圖 297

7.4.2 使用陰影貼圖 299

第8章 程序式紋理 303

8.1 程序式紋理 303

8.1.1 規則的花紋 305

8.1.2 玩具球 311

8.1.3 晶格 318

8.1.4 程序式著色方法的總結 319

8.2 凹凸貼圖映射 319

8.2.1 應用程序設置 321

8.2.2 頂點著色器 323

8.2.3 片元著色器 324

8.2.4 法線貼圖 326

8.3 程序式紋理的反走樣 326

8.3.1 走樣的來源 327

8.3.2 避免走樣問題 328

8.3.3 提高分辨率 329

8.3.4 高頻率的反走樣 330

8.3.5 頻率截斷 337

8.3.6 程序式反走樣的總結 339

8.4 噪聲 339

8.4.1 噪聲的定義 341

8.4.2 噪聲紋理 345

8.4.3 權衡 348

8.4.4 一個簡單的噪聲著色器 349

8.4.5 湍流 351

8.4.6 大理石 353

8.4.7 花崗巖 353

8.4.8 木紋 354

8.4.9 噪聲的總結 357

8.5 更多信息 357

第9章 細分著色器 359

9.1 細分著色器 359

9.2 細分面片 360

9.3 細分控制著色器 361

9.3.1 生成輸出面片的頂點 362

9.3.2 細分控制著色器的變量 362

9.3.3 細分的控制 363

9.4 細分計算著色器 367

9.4.1 設置圖元生成域 368

9.4.2 設置生成圖元的面朝向 368

9.4.3 設置細分坐標的間隔 368

9.4.4 更多的細分計算著色器layout選項 368

9.4.5 設置頂點的位置 369

9.4.6 細分計算著色器的變量 369

9.5 細分實例:茶壺 370

9.5.1 處理面片輸入頂點 370

9.5.2 計算茶壺的細分坐標 371

9.6 更多的細分技術 373

9.6.1 視口相關的細分 373

9.6.2 細分的共享邊與裂縫 375

9.6.3 置換貼圖映射 376

第10章 幾何著色器 377

10.1 創建幾何著色器 378

10.2 幾何著色器的輸入和輸出 380

10.2.1 幾何著色器的輸入 380

10.2.2 特殊的幾何著色器圖元 383

10.2.3 幾何著色器的輸出 387

10.3 產生圖元 389

10.3.1 幾何體的裁減 389

10.3.2 幾何體的擴充 390

10.4 transform feedback高級篇 394

10.4.1 多重輸出流 395

10.4.2 圖元查詢 399

10.4.3 使用transform feedback的結果 400

10.5 幾何著色器的多實例化 408

10.6 多視口與分層渲染 409

10.6.1 視口索引 409

10.6.2 分層渲染 414

10.7 本章小結 417

10.7.1 幾何著色器回顧 417

10.7.2 幾何著色器的經驗談 418

第11章 內存 420

11.1 使用紋理存儲通用數據 420

11.1.1 將紋理綁定到圖像單元 425

11.1.2 圖像數據的讀取和寫入 427

11.2 著色器存儲緩存對象 430

11.2.1 寫入結構化數據 431

11.3 原子操作和同步 431

11.3.1 圖像的原子操作 431

11.3.2 緩存的原子操作 439

11.3.3 同步對象 440

11.3.4 圖像限定符和屏障 444

11.3.5 高性能的原子計數器 452

11.4 示例 455

11.4.1 順序無關的透明 455

第12章 計算著色器 466

12.1 概述 466

12.2 工作組及其執行 467

12.2.1 知道工作組的位置 471

12.3 通信與同步 472

12.3.1 通信 473

12.3.2 同步 474

12.4 示例 475

12.4.1 物理模擬 476

12.4.2 圖像處理 481

12.5 本章總結 485

12.5.1 計算著色器回顧 485

12.5.2 計算著色器的最佳實踐 485

附錄A GLUT基礎知識 487

附錄B OpenGL ES與WebGL 493

附錄C 內置GLSL變量與函數 504

附錄D 狀態變量 552

附錄E 齊次坐標與變換矩陣 591

附錄F OpenGL與窗口系統 596

附錄G 紋理、幀緩存與渲染緩存的浮點格式 612

附錄H OpenGL程序的調試與優化 618

附錄I 緩存對象的布局 632

術語表 635
序: