跳到內容

OpenGL 程式設計

50% developed
來自華夏公益教科書,開放的書籍,面向開放的世界
OpenGL logo
OpenGL 標誌

歡迎來到OpenGL 程式設計書籍。OpenGL 是一個用於繪製 3D 圖形的 API。OpenGL 不是一種程式語言;OpenGL 應用程式通常是用 C 或 C++ 編寫的。OpenGL 使您能夠輕鬆地繪製具有吸引力和逼真的 3D 圖形。該 API 通常用於與 GPU 互動,以實現硬體加速渲染。

您可以自由地共享貢獻到這個華夏公益教科書:它是以免費文件的精神撰寫的,屬於全人類。您可以自由地複製、在學校或專業課程中教授它、改進文字、撰寫評論甚至新部分。

我們正在尋找貢獻者。如果您瞭解 OpenGL,請隨時留下評論、擴充套件 TODO 部分並撰寫新的部分!

  1. 關於本書
  2. OpenGL 的歷史和演變

設定 OpenGL

[編輯 | 編輯原始碼]

現代 OpenGL

[編輯 | 編輯原始碼]

"現代" OpenGL 指的是 OpenGL 2.1+、OpenGL ES 2.0+ 和 WebGL,它們具有可程式設計管道和著色器。

基礎篇

[編輯 | 編輯原始碼]
01
教程 01:初學者介紹,首次深入著色器 02
教程 02:為我們的程式碼新增更多健壯性,透明度
03
教程 03:將資訊傳遞給著色器:屬性、varying 和 uniform 04
教程 04:變換矩陣:定位和旋轉
05
教程 05:新增第三維:一個立方體,加上一個相機 06
教程 06:紋理:顯示一個木質立方體
07
OBJ 格式:從 Blender 載入 Suzanne 猴子 08
導航:在 3D 空間中導航並操縱我們模型檢視器中的物件

教程草稿:即將釋出的教程的想法和筆記

光照篇

[編輯 | 編輯原始碼]

本系列教程是 GLSL 華夏公益教科書基礎光照教程 的 C++ 移植版。

01
漫反射:關於每頂點漫射光照和不同型別和數量的光源 02
鏡面高光:關於每頂點光照
03
雙面表面(關於雙面每頂點光照) 04
平滑鏡面高光(關於每畫素光照)
05
雙面平滑表面(關於雙面每畫素光照) 06
多個光源(關於用於處理多個光源的 for 迴圈)

本系列教程是 GLSL 華夏公益教科書基礎紋理教程 的 C++ 移植版。

01
紋理球體:關於紋理化球體 02
光照紋理表面:關於漫射光照的紋理
03
光澤紋理:關於光澤對映 04
透明紋理:關於使用 alpha 紋理來丟棄片段、alpha 測試和混合
05
紋理層:關於多紋理

本系列教程是 GLSL 華夏公益教科書關於 3D 紋理教程 的 C++ 移植版。

01
凹凸表面光照:關於法線對映 02
凹凸表面投影:關於視差對映
03
Cookies:關於用於塑造光線的投影紋理對映 04
光衰減:關於光衰減的紋理對映和一般查詢表
05
投影儀:關於用於投影儀的投影紋理對映

GLSL 華夏公益教科書 中還有更多要移植的教程!

科學篇

[編輯 | 編輯原始碼]
01
圖表 01:使用頂點緩衝區物件和點精靈繪製簡單函式 02
圖表 02:繪製來自紋理中資料的圖表
03
圖表 03:繪製邊界和軸線,剪裁 04
圖表 04:繪製三維圖表
05
圖表 05:使用隱藏線消除繪製表面

還有更多內容即將推出。

精選主題

[編輯 | 編輯原始碼]
01
虛擬軌跡球:使用滑鼠直觀地旋轉物件 02
包圍盒:為編輯或除錯目的繪製一個立方體包圍您的物件
03
2D-on-3D:硬體加速 2D 程式設計 04
影片捕捉:使用 apitrace (C++) 或 JavaScript (WebGL) 捕捉您的動畫
05
茶時間:從貝塞爾曲面生成高畫質茶壺 06
模板緩衝區:掩蔽和組合
07
二次曲面:使用一些數學知識建立簡單的形狀 08
基本文字:使用 FreeType 庫渲染文字
09
最佳化文字渲染:使用包含所有字形的紋理圖集 10
物件選擇:使用模板緩衝區反投影座標和物件識別
11
抗鋸齒:平滑線條 12
粒子系統:不同型別的粒子系統

後期處理弧

[編輯 | 編輯原始碼]
01
概念:如何執行全屏後期處理,第一個使用簡單動畫波的示例 02
???:下一個效果待定!

迷你傳送門

[編輯 | 編輯原始碼]

本系列展示瞭如何使用 OpenGL 分步實現類似 Valve 的傳送門的傳送系統。

01
迷你傳送門:第一個可工作的透視傳送門 02
迷你傳送門平滑:平滑過渡,瞭解相機
03
迷你傳送門遞迴:遞迴傳送門 - 在傳送門內顯示傳送門 04
迷你傳送門最佳化:使用剪刀進行最佳化

Glescraft

[編輯 | 編輯原始碼]

本系列展示瞭如何渲染類似於我的世界的基於體素的世界。

01
Glescraft 1:基本的體素渲染 02
Glescraft 2:移除不必要的體素面
03
Glescraft 3:紋理、光照、霧、透明度 04
Glescraft 4:第一人稱相機控制
05
Glescraft 5:僅繪製螢幕上的內容 06
Glescraft 6:新增和移除體素
07
Glescraft 7:使用幾何著色器

使用累積緩衝區

[編輯 | 編輯原始碼]
01
教程 01:運動模糊 02
教程 02:全屏超取樣抗鋸齒
03
教程 03:景深 04
教程 04:與順序無關的透明度

注意:並非所有顯示卡都支援累積緩衝區

前沿 OpenGL

[編輯 | 編輯原始碼]

如果您不針對舊的移動裝置或網頁,可以升級到 OpenGL (ES) 3.x / 4.x。它引入了新的著色器型別:幾何、細分控制和細分評估,以及計算。

01
教程 01:使用幾何著色器動態修改和建立頂點 02
教程 02:使用細分進行動態網格質量

以及許多其他功能。

程式碼質量

[編輯 | 編輯原始碼]
01
除錯:幫助除錯您的 OpenGL 程式碼的技巧 02
效能:衡量和提高應用程式效能。

舊版 OpenGL 1.x

[編輯 | 編輯原始碼]

"舊版" OpenGL 指的是 OpenGL 1.x 和 OpenGL ES 1.x,具有固定流水線,沒有著色器。

入門教程

[編輯 | 編輯原始碼]
  1. 在 Windows 上設定程式設計環境
  2. 在程式設計環境中設定 OpenGL
  3. 繪製圖元
    1. 立即模式
    2. 顯示列表
    3. 頂點陣列
  4. 基本變換
    1. 平移
    2. 旋轉
    3. 縮放
    4. 自定義變換
  1. 典型 OpenGL 應用程式的結構
  2. 繪製矩形
  3. 繪製線和點
  4. 繪製簡單的二維形狀
  5. OpenGL 命名約定
  6. 使用顏色
  7. 檢視變換
  8. 繪製簡單的三維物件
  9. 透視投影與正交投影
  1. 使用法線平滑多邊形
  2. 新增光照
  3. 使用材質
  4. 使用紋理
  5. 使用mipmap
  6. 使用細分繪製複雜多邊形
  1. 最佳化 OpenGL 程式碼
  2. 繪製陰影
  3. 使用二次曲面繪製
  4. 使用 NURBS 和曲線繪製
  5. 環境光遮蔽
  1. 座標變換
  2. 理解變換矩陣
  3. OpenGL 庫參考。 gl.h glu.h 和 glut.h 的函式和型別參考
  4. 為什麼存在 OpenGL 以及它擅長什麼
  5. 從 1.x 遷移到 2.x:如何升級您的程式碼以使用現代 OpenGL
[編輯 | 編輯原始碼]

華夏公益教科書

[編輯 | 編輯原始碼]

相關華夏公益教科書

  • GLSL 程式設計 : 關於在 Unity 3 和 Blender 2.5 中使用 OpenGL 著色語言 (GLSL) 的華夏公益教科書,其中包含大量關於光照和紋理的資訊
  • Blender 3D:新手到專家: 關於使用 Blender 3D 建模環境的綜合書籍
  • 一個開源的跨平臺 IDE,用於探索使用 GLSL 在 GPU 上進行基於畫素的圖形

以下網站提供教程到其他程式語言或平臺的轉換

免費許可的文件和示例

[編輯 | 編輯原始碼]

Template:Fix/category[失效連結]: GFDL 許可證

非自由許可的文件

[編輯 | 編輯原始碼]

進一步閱讀

[編輯 | 編輯原始碼]
  • OpenGL 架構審查委員會等:《OpenGL 程式設計指南:OpenGL 學習官方指南,第二版,第五版》,Addison-Wesley,ISBN 0-321-33573-2
  • OpenGL 架構審查委員會等:《OpenGL 參考手冊:OpenGL 官方參考文件,1.4 版》,Addison-Wesley,ISBN 0-321-17383-X
  • Wright, Richard S. Jr 和 Lipchak, Benjamin:《OpenGL 超級寶典,第三版》,Sams 出版社,ISBN 0-672-32601-9

< OpenGL 程式設計

瀏覽並下載 完整程式碼


華夏公益教科書