OpenGL 程式設計

歡迎來到OpenGL 程式設計書籍。OpenGL 是一個用於繪製 3D 圖形的 API。OpenGL 不是一種程式語言;OpenGL 應用程式通常是用 C 或 C++ 編寫的。OpenGL 使您能夠輕鬆地繪製具有吸引力和逼真的 3D 圖形。該 API 通常用於與 GPU 互動,以實現硬體加速渲染。
您可以自由地共享和貢獻到這個華夏公益教科書:它是以免費文件的精神撰寫的,屬於全人類。您可以自由地複製、在學校或專業課程中教授它、改進文字、撰寫評論甚至新部分。
我們正在尋找貢獻者。如果您瞭解 OpenGL,請隨時留下評論、擴充套件 TODO 部分並撰寫新的部分!
- 在 GNU/Linux 上安裝
- 在 Macintosh 上安裝
- 在 Windows 上使用 Code::Blocks 安裝
- 為 Android NDK 開發安裝
- 使用 類似 GLUT 的包裝器 來執行練習
- 為 iPhone 開發安裝
- 安裝 GLUT
"現代" 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 | 迷你傳送門最佳化:使用剪刀進行最佳化 |
本系列展示瞭如何渲染類似於我的世界的基於體素的世界。
| 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 (ES) 3.x / 4.x。它引入了新的著色器型別:幾何、細分控制和細分評估,以及計算。
| 01 | 教程 01:使用幾何著色器動態修改和建立頂點 | 02 | 教程 02:使用細分進行動態網格質量 |
以及許多其他功能。
| 01 | 除錯:幫助除錯您的 OpenGL 程式碼的技巧 | 02 | 效能:衡量和提高應用程式效能。 |
- OpenGL ES 2.0 概述:OpenGL ES 2.0(嵌入式系統 OpenGL 2.0)概念及其與普通 OpenGL 的區別
- 從 1.x 遷移到 2.x:如何升級您的程式碼以使用現代 OpenGL
- 詞彙表:所有這些新奇奇怪的詞語是什麼意思?
- API、庫和縮寫:所有縮略詞之間的關係
- OpenGL 著色語言:GLSL 程式設計的要素
- 著色器參考:輸入和輸出變數列表
- 團隊:本華夏公益教科書的貢獻者
- 下載程式碼:wikibooks-opengl 程式碼庫
"舊版" OpenGL 指的是 OpenGL 1.x 和 OpenGL ES 1.x,具有固定流水線,沒有著色器。
- 在 Windows 上設定程式設計環境

- 在程式設計環境中設定 OpenGL

- 繪製圖元

- 立即模式
- 顯示列表
- 頂點陣列
- 基本變換

- 平移
- 旋轉
- 縮放
- 自定義變換
- 座標變換
- 理解變換矩陣
- OpenGL 庫參考。 gl.h glu.h 和 glut.h 的函式和型別參考
- 為什麼存在 OpenGL 以及它擅長什麼
- 從 1.x 遷移到 2.x:如何升級您的程式碼以使用現代 OpenGL
相關華夏公益教科書
- GLSL 程式設計 : 關於在 Unity 3 和 Blender 2.5 中使用 OpenGL 著色語言 (GLSL) 的華夏公益教科書,其中包含大量關於光照和紋理的資訊
- Blender 3D:新手到專家: 關於使用 Blender 3D 建模環境的綜合書籍
- 一個開源的跨平臺 IDE,用於探索使用 GLSL 在 GPU 上進行基於畫素的圖形
以下網站提供教程到其他程式語言或平臺的轉換
- 官方程式碼倉庫 包含主要的 SDL2 版本,以及 GLUT 和 WebGL 移植版本
- 移植到輕量級 Java 遊戲庫 (LWJGL) (部落格)
- 這不是真正的移植,而是作者在學習教程時添加了註釋,並逐步更新了教程程式碼
- OpenGL ES 2.0 參考頁面: 官方參考手冊頁面,SGI 免費軟體 B 許可證
- 學習現代 3D 圖形程式設計: 另一個現代 OpenGL 教程,需要 v3.3 或更高版本,MIT 許可證 (原始碼倉庫)
- 學習 OpenGL ES: 詳細的,分步驟的 OpenGL ES 教程,使用 Java 語言編寫,適用於 Android 平臺,以及一些 WebGL 內容,CC BY-SA 3.0 許可證 (原始碼倉庫 − Apache 許可證 2.0)
- OpenGL 示例包: 使用 C++ 語言編寫,基於“核心配置檔案”規範,旨在簡化對新 OpenGL 版本和功能的升級,MIT 許可證 (原始碼倉庫)
- OpenGL 3.3 的介紹和示例
Template:Fix/category[失效連結]: GFDL 許可證
- 現代 OpenGL 常見問題解答: GFDL 許可證
- OpenGLContext Python 教程: 使用 PyOpenGL 的基礎教程 (BSD 風格的許可證)
- Paul 的專案: OpenGL 1.x,兩個關於陰影對映和凹凸對映的教程,程式碼在 MIT 許可證下發布
- WebGL
- Gregg Tavares 的 WebGL 文章: 詳細的二維和三維基礎知識,重點關注矩陣運算;大量圖表和互動式動畫 (原始碼 − MIT 許可證)
- Mozilla 開發者網路上的 WebGL: WebGL 概述,包括嵌入影片;文章採用 CC BY-SA 許可證,原始碼採用 MIT 許可證和公有領域許可證
- three.js: 使用 three.js WebGL 框架的演示集合;原始碼 採用 MIT 許可證,但模型/資料可能是非自由的
- NeHe 的 OpenGL 教程: OpenGL 1.x
- 使用 C++ 和 Windows API 的 OpenGL 基礎教程合集: OpenGL 1.x
- ZeusCMD OpenGL 教程: OpenGL 1.x
- OpenGL 程式設計示例: OpenGL 1.x,
- 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









































