作者:(美國)約翰·剋賽尼希(John Kessenich) (美國)格雷厄姆·塞勒斯(Graham Sellers) (美國)戴夫·施萊爾(Dave Shreiner) 譯者:王銳
約翰·剋賽尼希(John Kessenich), 來自Google的資深軟件工程師、SPIR—V的創立者,自1999年以來就廣泛參與到OpenGL和GLSL的Khronos標準開發當中。他是SPIR—V和GLSL標準說明書的主要編寫者,並且開發瞭相關的著色器編譯工具和解析器來考察相關標準的可移植性。
格雷厄姆·塞勒斯(Graham Sellers),來自AMD的軟件架構和工程部門,是Khronos API的領導者之一,負責OpenGL ARB中的AMD功能部分。他對OpenGL和VulkanWJ核心標準和擴展都做齣瞭貢獻,並且持有圖形學和圖像處理方麵的一些專利。
戴夫·施萊爾(Dave Shreiner),一位有著25年經驗的計算機圖形工作者,編寫和教授計算機圖形API相關的課程,並且一直是數本Addison—Wesley齣版的計算機圖形學圖書的核心作者,從事相關寫作已有近10年之久。
推薦語
譯者序
前言
緻謝
第1章OpenGL概述
1.1什麼是OpenGL
1.2初識OpenGL程序
1.3OpenGL語法
1.4OpenGL渲染管綫
1.4.1準備嚮OpenGL傳輸數據
1.4.2將數據傳輸到OpenGL
1.4.3頂點著色
1.4.4細分著色
1.4.5幾何著色
1.4.6圖元裝配
1.4.7剪切
1.4.8光柵化
1.4.9片元著色
1.4.10逐片元的操作
1.5第一個程序:深入分析
1.5.1進入main()函數
1.5.2OpenGL的初始化過程
1.5.3第一次使用OpenGL進行渲染
第2章著色器基礎
2.1著色器與OpenGL
2.2OpenGL的可編程管綫
2.3OpenGL著色語言概述
2.3.1使用GLSL構建著色器
2.3.2存儲限製符
2.3.3語句
2.3.4計算的不變性
2.3.5著色器的預處理器
2.3.6編譯器的控製
2.3.7全局著色器編譯選項
2.4數據塊接口
2.4.1uniform塊
2.4.2指定著色器中的uniform塊
2.4.3從應用程序中訪問uniform塊
2.4.4buffer塊
2.4.5in/out塊、位置和分量
2.5著色器的編譯
2.6著色器子程序
2.6.1GLSL的子程序設置
2.6.2選擇著色器於程序
2.7獨立的著色器對象
2.8SPIR—V
2.8.1選擇SPIR—V的理由
2.8.2SPIR—V與ODenGL
2.8.3使用GLSL在OpenGL中生成SPIR—V
2.8.4Glslang
2.8.5SPIR—V中包含瞭什麼
第3章OpenGL繪製方式
3.1OpenGL圖元
3.1.1點
3.1.2綫、條帶與循環綫
3.1.3三角形、條帶與扇麵
3.2OpenGL緩存數據
3.2.1創建與分配緩存
3.2.2嚮緩存輸入和輸齣數據
3.2.3訪問緩存的內容
3.2.4丟棄緩存數據
3.3頂點規範
3.3.1深入討論VertexAttribPointer
3.3.2靜態頂點屬性的規範
3.4OpenGL的繪製命令
3.4.1圖元的重啓動
3.4.2多實例渲染
第4章顔色、像素和片元
4.2緩存及其用途
4.2.1緩存的清除
4.2.2緩存的掩碼
4.3顔色與OpenGL
4.3.1顔色的錶達與OpenGL
4.3.2平滑數據插值
4.4片元的測試與操作
4.4.1剪切測試
4.4.2多重采樣的片元操作
4.4.3模闆測試
4.4.4模闆的例子
4.4.5深度測試
4.4.6融混
4.4.7邏輯操作
4.4.8遮擋查詢
4.4.9條件渲染
4.5多重采樣
4.6逐圖元的反走樣
4.6.1綫段的反走樣
4.6.2多邊形的反走樣
4.7像素數據的讀取和拷貝
4.8拷貝像素矩形
第5章視口變換、裁減、剪切與反饋
5.1觀察視圖
5.1.1視圖模型
5.1.2相機模型
5.1.3正交視圖模型
5.2用戶變換
5.2.1矩陣乘法的迴顧
5.2.2齊次坐標
5.2.3綫性變換與矩陣
5.2.4法綫變換
5.2.5OpenGL矩陣
5.3OpenGL變換
5.3.1高級技巧:用戶裁減和剪切
5.3.2OpenGL變換的控製
5.4transformfeedbaCk
5.4.1transformfeedback對象
5.4.2transformfeedback緩存
5.4.3配置transformfeedback的變量
5.4.4transformfeedback的啓動和停止
5.4.5transformfeedback的示例:粒子係統
第6章紋理與幀緩存
6.1紋理綜述
6.2基本紋理類型
6.3創建並初始化紋理
6.4指定紋理數據
6.4.1顯式設置紋理數據
6.4.2從緩存中加載紋理
6.4.3從文件加載圖像
6.4.4獲取紋理數據
6.4.5紋理數據的排列布局
6.5紋理格式
6.5.1內部格式
6.5.2外部格式
6.6壓縮紋理
6.7采樣器對象
6.8紋理的使用
6.8.1紋理坐標
6.8.2排列紋理數據
6.8.3使用多重紋理
6.9復雜紋理類型
6.9.13D紋理
6.9.2紋理數組
6.9.3立方體映射紋理
6.9.4陰影采樣器
6.9.5深度—模闆紋理
6.9.6緩存紋理
6.10紋理視圖
6.11濾波方式
6.11.1綫性濾波
6.11.2使用和生成mipmap
6.11.3計算mipmap層次
6.11.4mipmap細節層次的控製
6.12高級紋理查詢函數
6.12.1顯式的細節層次控製
6.12.2顯式的梯度設置
6.12.3帶有偏移參數的紋理獲取函數
6.12.4投影紋理
6.12.5在著色器中執行紋理查詢
6.12.6紋素收集
6.12.7組閤功能的特殊函數
6.13無綁定紋理
6.13.1紋理句柄
6.13.2紋理駐留
6.13.3采樣無綁定紋理
6.14稀疏紋理
6.14.1稀疏紋理的數據提交
6.14.2稀疏紋理的頁麵
6.15點精靈
6.15.1紋理點精靈
6.15.2控製點的顯示
6.16幀緩存對象
6.17渲染到紋理貼圖
6.17.1拋棄渲染數據
6.17.2渲染緩存
6.17.3創建渲染緩存的存儲空間
6.17.4幀緩存附件
6.17.5幀緩存的完整性
6.17.6幀緩存的無效化
6.17.7多重渲染緩存的同步寫入
6.17.8選擇顔色緩存來進行讀寫操作
6.17.9雙源融混
6.18本章總結
6.18.1紋理迴顧
6.18.2紋理的佳實踐
第7章光照與陰影
7.1光照介紹
7.2經典光照模型
7.2.1不同光源類型的片元著色器
7.2.2將計算移到頂點著色器
7.2.3多個光源和材質
7.2.4光照坐標係統
7.2.5經典光照模型的局限
7.3光照模型進階
7.3.1半球光照
7.3.2基於圖像的光照
7.3.3球麵光照
7.4陰影映射
7.4.1創建一張陰影貼圖
7.4.2使用陰影貼圖
第8章程序式紋理
8.1程序式紋理
8.1.1規則的花紋
8.1.2玩具球
8.1.3晶格
8.1.4程序式著色方法的總結
8.2凹凸貼圖映射
8.2.1應用程序設置
8.2.2頂點著色器
8.2.3片元著色器
8.2.4法綫貼圖
8.3程序式紋理的反走樣
8.3.1走樣的來源
8.3.2避免走樣問題
8.3.3提高分辨率
8.3.4高頻率的反走樣
8.3.5頻率截斷
8.3.6程序式反走樣的總結
8.4噪聲
8.4.1噪聲的定義
8.4.2噪聲紋理
8.4.3權衡
8.4.4一個簡單的噪聲著色器
8.4.5湍流
8.4.6大理石
8.4.7黃崗岩
8.4.8木紋
8.4.9噪聲的總結
8.5更多信息
……
第9章細分著色器
第10章幾何著色器
第11章內存
第12章計算著色器
附錄A第三方支持庫
附錄BpenGLES與WebGL
附錄C內置GLSL變量與函數
附錄D狀態變量
附錄E齊次坐標與變換矩陣
附錄F紋理、幀緩存與渲染緩存的浮點格式
附錄GOpenGL程序的調試與優化
附錄H緩存對象的布局
術語錶
· · · · · · (
收起)
評分
☆☆☆☆☆
这本书感觉还是要配合蓝宝书看 其实翻译的也不算差, 至少比那本 OpenGL Shading language 翻译的要好 而且这本书不应该只看一遍, 应该看多编, 每个例子代码都要自己去编译修改才能运用得上
評分
☆☆☆☆☆
感觉大量内容是机翻的,读起来超级不顺。书有问题就算了,然而官网配套的示例代码,也太不完善了。如果书里面每一个小结都能找到正确的可运行代码(实际上,只能找到部分,而且bug超多,我只改通了一部分),我就可以结合代码来阅读这书了。目前看到第六章,还是打算改看SuperB...
評分
☆☆☆☆☆
这本书感觉还是要配合蓝宝书看 其实翻译的也不算差, 至少比那本 OpenGL Shading language 翻译的要好 而且这本书不应该只看一遍, 应该看多编, 每个例子代码都要自己去编译修改才能运用得上
評分
☆☆☆☆☆
OpenGL的API更新好快,现在是2013年1月8日,我可以负责任的说第七版已经是累赘了,第八版号称1月中旬就上市了。 这本书不像别的书,很多书旧版还很有价值,这本书本身就像是一个man page的集合,很多API都已经弃用了,参考这本书你会发现你辛苦弄懂的东西原来已经被弃用了。。...
評分
☆☆☆☆☆
When you read about "In OpenGL Version 3.1, all of the techniques and functions described in this chapter were removed through deprecation. Even though some of this functionality is part of the GLU library, it relies on functionality that has been removed ...