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