跳到内容

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 编程

浏览并下载 完整代码


华夏公益教科书