《華章 OpenGL ES 3.0編程指南(原書第2版)》由資深OpenGL技術(shù)專家親筆撰寫,全面介紹OpenGL ES 3.0的各種特性及新增功能, ,通過大量已經(jīng)編譯和測試過的實(shí)例,詳細(xì)講解OpenGL ES 3.0中的應(yīng)用程序接口(API)和圖形管線,既涵蓋簡單圖形的渲染方法,又深入介紹逐像素照明和粒子系統(tǒng)等高級渲染技術(shù),并且包含大量有效使用API和硬件的實(shí)用技巧,為手持設(shè)備的各種高性能3D應(yīng)用開發(fā)提供翔實(shí)指導(dǎo)。
《華章 OpenGL ES 3.0編程指南(原書第2版)》共16章:第1章簡單介紹OpenGL ES ,并概述OpenGL ES 3.0圖形管線;第2章通過繪制一個三角形的簡單OpenGL ES 3.0示例程序,講解一些API概念,并說明如何構(gòu)建和運(yùn)行OpenGL ES示例程序;第3章講述為OpenGL ES 3.0創(chuàng)建表面和渲染上下文的API——EGL;第4章討論創(chuàng)建著色器對象、編譯著色器和檢查編譯錯誤的方法;第5章講解編寫著色器所需的著色語言基本知識;第6章詳細(xì)介紹幾何形狀輸入圖形管線的方法,包含對頂點(diǎn)屬性、頂點(diǎn)數(shù)組和緩沖區(qū)對象的討論;第7章討論幾何形狀如何裝配成圖元,介紹OpenGL ES 3.0中所有可用圖元類型,包括點(diǎn)精靈、直線、三角形、三角形條帶和三角扇形;第8章概述頂點(diǎn)著色器如何融入管線,以及OpenGL ES 著色語言中可用于頂點(diǎn)著色器的特殊變量;第9章和第10章介紹片段著色器,包括多重紋理、霧化、Alpha測試和用戶裁剪平面等;第11章討論片段操作,包括剪裁測試、模板測試、深度測試、多重采樣、混合和抖動;第12章介紹使用幀緩沖區(qū)對象渲染屏幕外表面;第13章討論同步對象和柵欄的使用方法;第14章介紹OpenGL ES 3.0高級編程,包含使用法線貼圖的逐像素照明、環(huán)境貼圖、粒子系統(tǒng)、圖像后處理、程序紋理、陰影貼圖、地形渲染和投影紋理等渲染技術(shù)。;第15章提供OpenGL ES 3.0中各種可用狀態(tài)查詢的參考;第16章討論如何為iOS 7、Android 4.3 NDK、Android 4.3 SDK、Windows和Linux構(gòu)建OpenGL ES樣板代碼。
《華章 OpenGL ES 3.0編程指南(原書第2版)》由資深OpenGL技術(shù)專家親筆撰寫,全面介紹OpenGL ES 3.0的各種特性及新增功能;
通過大量已經(jīng)編譯和測試過的實(shí)例,詳細(xì)講解OpenGL ES 3.0中的應(yīng)用程序接口(API)和圖形管線,既涵蓋簡單圖形的渲染方法,又深入介紹逐像素照明和粒子系統(tǒng)等高級渲染技術(shù),并且包含大量有效使用API和硬件的實(shí)用技巧,為手持設(shè)備的各種高性能3D應(yīng)用開發(fā)提供翔實(shí)指導(dǎo)。
Dan Ginsburg,Upsample Software公司創(chuàng)始人,該軟件公司提供3D圖形和GPU計(jì)算的咨詢服務(wù)。Dan參與撰寫了多部著作,包括《OpenCL 編程指南》和《OpenGL Shading Language》(第3版)。在過去的工作中,Dan曾經(jīng)開發(fā)OpenGL驅(qū)動程序、桌面和手持3D演示、GPU開發(fā)人員工具、3D醫(yī)學(xué)顯示和游戲。
Budirijanto Purnomo,AMD公司高級軟件架構(gòu)師,領(lǐng)導(dǎo)跨越多個AMD軟件棧的GPU調(diào)試和剖析技術(shù)的軟件實(shí)現(xiàn)工作。他與多位AMD的軟件和硬件架構(gòu)師協(xié)作,定義用于調(diào)試和剖析GPU應(yīng)用的未來硬件架構(gòu)。他曾在國際會議上發(fā)表過許多與計(jì)算機(jī)圖形技術(shù)相關(guān)的論文。
Dave Shreiner,ARM公司圖形與GPU計(jì)算部門主管,自從OpenGL誕生之日起就積極地參與到它的開發(fā)當(dāng)中。他創(chuàng)建了OpenGL的第一個商業(yè)培訓(xùn)課程,并且擁有超過20年的OpenGL編程教學(xué)經(jīng)驗(yàn)。
本書贊譽(yù)
譯者序
序
前言
致謝
第1章 OpenGL ES 3.0簡介
1.1 OpenGL ES 3.0
1.1.1 頂點(diǎn)著色器
1.1.2 圖元裝配
1.1.3 光柵化
1.1.4 片段著色器
1.1.5 逐片段操作
1.2 OpenGL ES 3.0新功能
1.2.1 紋理
1.2.2 著色器
1.2.3 幾何形狀
1.2.4 緩沖區(qū)對象
1.2.5 幀緩沖區(qū)
1.3 OpenGL ES 3.0和向后兼容性
1.4 EGL
1.4.1 使用OpenGL ES 3.0編程
1.4.2 庫和包含文件
1.5 EGL命令語法
1.6 OpenGL ES命令語法
1.7 錯誤處理
1.8 基本狀態(tài)管理
1.9 延伸閱讀
第2章 你好,三角形:一個OpenGL ES 3.0示例
2.1 代碼框架
2.2 示例下載位置
2.3 "你好,三角形"(Hello Triangle)示例
2.4 使用OpenGL ES 3.0框架
2.5 創(chuàng)建簡單的頂點(diǎn)和片段著色器
2.6 編譯和加載著色器
2.7 創(chuàng)建一個程序?qū)ο蟛㈡溄又?br />
2.8 設(shè)置視口和清除顏色緩沖區(qū)
2.9 加載幾何形狀和繪制圖元
2.10 顯示后臺緩沖區(qū)
2.11 小結(jié)
第3章 EGL簡介
3.1 與窗口系統(tǒng)通信
3.2 檢查錯誤
3.3 初始化EGL
3.4 確定可用表面配置
3.5 查詢EGLConf?ig屬性
3.6 讓EGL選擇配置
3.7 創(chuàng)建屏幕上的渲染區(qū)域:EGL窗口
3.8 創(chuàng)建屏幕外渲染區(qū)域:EGL Pbuffer
3.9 創(chuàng)建一個渲染上下文
3.10 指定某個EGLContext為當(dāng)前上下文
3.11 結(jié)合所有EGL知識
3.12 同步渲染
3.13 小結(jié)
第4章 著色器和程序
4.1 著色器和程序
4.1.1 創(chuàng)建和編譯一個著色器
4.1.2 創(chuàng)建和鏈接程序
4.2 統(tǒng)一變量和屬性
4.2.1 獲取和設(shè)置統(tǒng)一變量
4.2.2 統(tǒng)一變量緩沖區(qū)對象
4.2.3 獲取和設(shè)置屬性
4.3 著色器編譯器
4.4 程序二進(jìn)制碼
4.5 小結(jié)
第5章 OpenGL ES著色語言
5.1 OpenGL ES著色語言基礎(chǔ)知識
5.2 著色器版本規(guī)范
5.3 變量和變量類型
5.4 變量構(gòu)造器
5.5 向量和矩陣分量
5.6 常量
5.7 結(jié)構(gòu)
5.8 數(shù)組
5.9 運(yùn)算符
5.10 函數(shù)
5.11 內(nèi)建函數(shù)
5.12 控制流語句
5.13 統(tǒng)一變量
5.14 統(tǒng)一變量塊
5.15 頂點(diǎn)和片段著色器輸入/輸出
5.16 插值限定符
5.17 預(yù)處理器和指令
5.18 統(tǒng)一變量和插值器打包
5.19 精度限定符
5.20 不變性
5.21 小結(jié)
第6章 頂點(diǎn)屬性、頂點(diǎn)數(shù)組和緩沖區(qū)對象
6.1 指定頂點(diǎn)屬性數(shù)據(jù)
6.1.1 常量頂點(diǎn)屬性
6.1.2 頂點(diǎn)數(shù)組
6.2 在頂點(diǎn)著色器中聲明頂點(diǎn)屬性變量
6.3 頂點(diǎn)緩沖區(qū)對象
6.4 頂點(diǎn)數(shù)組對象
6.5 映射緩沖區(qū)對象
6.6 復(fù)制緩沖區(qū)對象
6.7 小結(jié)
第7章 圖元裝配和光柵化
7.1 圖元
7.1.1 三角形
7.1.2 直線
7.1.3 點(diǎn)精靈
7.2 繪制圖元
7.2.1 圖元重啟
7.2.2 驅(qū)動頂點(diǎn)
7.2.3 幾何形狀實(shí)例化
7.2.4 性能提示
7.3 圖元裝配
7.3.1 坐標(biāo)系統(tǒng)
7.3.2 透視分割
7.3.3 視口變換
7.4 光柵化
7.4.1 剔除
7.4.2 多邊形偏移
7.5 遮擋查詢
7.6 小結(jié)
第8章 頂點(diǎn)著色器
8.1 頂點(diǎn)著色器概述
8.1.1 頂點(diǎn)著色器內(nèi)建變量
8.1.2 精度限定符
8.1.3 頂點(diǎn)著色器中的統(tǒng)一變量限制數(shù)量
8.2 頂點(diǎn)著色器示例
8.2.1 矩陣變換
8.2.2 頂點(diǎn)著色器中的照明
8.3 生成紋理坐標(biāo)
8.4 頂點(diǎn)蒙皮
8.5 變換反饋
8.6 頂點(diǎn)紋理
8.7 將OpenGL ES 1.1頂點(diǎn)管線作為ES 3.0頂點(diǎn)著色器
8.8 小結(jié)
第9章 紋理
9.1 紋理基礎(chǔ)
9.1.1 2D紋理
9.1.2 立方圖紋理
9.1.3 3D紋理
9.1.4 2D紋理數(shù)組
9.1.5 紋理對象和紋理的加載
9.1.6 紋理過濾和mip貼圖
9.1.7 自動mip貼圖生成
9.1.8 紋理坐標(biāo)包裝
9.1.9 紋理調(diào)配
9.1.10 紋理細(xì)節(jié)級別
9.1.11 深度紋理對比(百分比漸進(jìn)過濾)
9.1.12 紋理格式
9.1.13 在著色器中使用紋理
9.1.14 使用立方圖紋理的示例
9.1.15 加載3D紋理和2D紋理數(shù)組
9.2 壓縮紋理
9.3 紋理子圖像規(guī)范
9.4 從顏色緩沖區(qū)復(fù)制紋理數(shù)據(jù)
9.5 采樣器對象
9.6 不可變紋理
9.7 像素解包緩沖區(qū)對象
9.8 小結(jié)
第10章 片段著色器
10.1 固定功能片段著色器
10.2 片段著色器概述
10.2.1 內(nèi)建特殊變量
10.2.2 內(nèi)建常量
10.2.3 精度限定符
10.3 用著色器實(shí)現(xiàn)固定功能技術(shù)
10.3.1 多重紋理
10.3.2 霧化
10.3.3 Alpha測試(使用Discard)
10.3.4 用戶裁剪平面
10.4 小結(jié)
第11章 片段操作
11.1 緩沖區(qū)
11.1.1 請求更多緩沖區(qū)
11.1.2 清除緩沖區(qū)
11.1.3 用掩碼控制幀緩沖區(qū)的寫入
11.2 片段測試和操作
11.2.1 使用剪裁測試
11.2.2 模板緩沖區(qū)測試
11.3 混合
11.4 抖動
11.5 多重采樣抗鋸齒
11.6 在幀緩沖區(qū)讀取和寫入像素
11.7 多重渲染目標(biāo)
11.8 小結(jié)
第12章 幀緩沖區(qū)對象
12.1 為什么使用幀緩沖區(qū)對象
12.2 幀緩沖區(qū)和渲染緩沖區(qū)對象
12.2.1 選擇渲染緩沖區(qū)與紋理作為幀緩沖區(qū)附著的對比
12.2.2 幀緩沖區(qū)對象與EGL表面的對比
12.3 創(chuàng)建幀緩沖區(qū)和渲染緩沖區(qū)對象
12.4 使用幀緩沖區(qū)對象
12.4.1 多重采樣渲染緩沖區(qū)
12.4.2 渲染緩沖區(qū)格式
12.5 使用幀緩沖區(qū)對象
12.5.1 連接渲染緩沖區(qū)作為幀緩沖區(qū)附著
12.5.2 連接一個2D紋理作為幀緩沖區(qū)附著
12.5.3 連接3D紋理的一個圖像作為幀緩沖區(qū)附著
12.5.4 檢查幀緩沖區(qū)完整性
12.6 幀緩沖區(qū)位塊傳送
12.7 幀緩沖區(qū)失效
12.8 刪除幀緩沖區(qū)和渲染緩沖區(qū)對象
12.9 刪除用作幀緩沖區(qū)附著的渲染緩沖區(qū)對象
12.10 示例
12.11 性能提示和技巧
12.12 小結(jié)
第13章 同步對象和柵欄
13.1 刷新和結(jié)束
13.2 為什么使用同步對象
13.3 創(chuàng)建和刪除同步對象
13.4 等待和向同步對象發(fā)送信號
13.5 示例
13.6 小結(jié)
第14章 OpenGL ES 3.0高級編程
14.1 逐片段照明
14.1.1 使用法線貼圖的照明
14.1.2 照明著色器
14.1.3 照明方程式
14.2 環(huán)境貼圖
14.3 使用點(diǎn)精靈的粒子系統(tǒng)
14.3.1 粒子系統(tǒng)設(shè)置
14.3.2 粒子系統(tǒng)頂點(diǎn)著色器
14.3.3 粒子系統(tǒng)片段著色器
14.4 使用變換反饋的粒子系統(tǒng)
14.4.1 粒子系統(tǒng)渲染算法
14.4.2 使用變換反饋發(fā)射粒子
14.4.3 渲染粒子
14.5 圖像后處理
14.5.1 渲染到紋理設(shè)置
14.5.2 模糊片段著色器
14.5.3 眩光
14.6 投影紋理
14.6.1 投影紋理基礎(chǔ)
14.6.2 投影紋理所用的矩陣
14.6.3 投影聚光燈著色器
14.7 使用3D紋理的噪聲
14.7.1 生成噪聲
14.7.2 使用噪聲
14.8 過程紋理
14.8.1 過程紋理示例
14.8.2 過程紋理的抗鋸齒
14.8.3 關(guān)于過程紋理的延伸閱讀
14.9 用頂點(diǎn)紋理讀取渲染地形
14.9.1 生成一個正方形的地形網(wǎng)格
14.9.2 在頂點(diǎn)著色器中計(jì)算頂點(diǎn)法線并讀取高度值
14.9.3 大型地形渲染的延伸閱讀
14.10 使用深度紋理的陰影
14.10.1 從光源位置渲染到深度紋理
14.10.2 從眼睛位置用深度紋理渲染
14.11 小結(jié)
第15章 狀態(tài)查詢
15.1 OpenGL ES 3.0實(shí)現(xiàn)字符串查詢
15.2 查詢OpenGL ES實(shí)現(xiàn)決定的限制
15.3 查詢OpenGL ES狀態(tài)
15.4 提示
15.5 實(shí)體名稱查詢
15.6 不可編程操作控制和查詢
15.7 著色器和程序狀態(tài)查詢
15.8 頂點(diǎn)屬性查詢
15.9 紋理狀態(tài)查詢
15.10 采樣器查詢
15.11 異步對象查詢
15.12 同步對象查詢
15.13 頂點(diǎn)緩沖區(qū)查詢
15.14 渲染緩沖區(qū)和幀緩沖區(qū)狀態(tài)查詢
15.15 小結(jié)
第16章 OpenGL ES平臺
16.1 在包含Visual Studio的Microsoft Windows上構(gòu)建
16.2 在Ubuntu Linux上構(gòu)建
16.3 在Android 4.3+ NDK (C++)上構(gòu)建
16.3.1 先決條件
16.3.2 用Android NDK構(gòu)建示例代碼
16.4 在Android 4.3+ SDK上構(gòu)建(Java)
16.5 在iOS 7上構(gòu)建
16.5.1 先決條件
16.5.2 用Xcode 5構(gòu)建示例代碼
16.6 小結(jié)
附錄A GL_HALF_FLOAT
附錄B 內(nèi) 建 函 數(shù)
附錄C ES框架API