Learn OpenGL:现代图形编程的完整指南

Learn OpenGL, extensive tutorial resource for learning Modern OpenGL

Learn OpenGL:现代图形编程的完整指南

无论你是为了学术研究、职业发展还是单纯的兴趣爱好,Learn OpenGL 都能带你从零基础掌握 Modern OpenGL 的核心与进阶知识。不同于网上大量过时或残缺的教程,这套资源专注于核心配置文件,提供清晰的步骤和实例,让没有图形编程经验的人也能轻松上手。内容涵盖从像素绘制原理到场景遍历、光照效果、自定义模型加载及后期处理等实用技巧,甚至包含一个基于 OpenGL 知识开发小型游戏的实战系列。资源完全免费,既有在线版本,也有精心修订的实体书和免费 PDF 版,是学习图形编程的理想起点。

如果所有上述描述听起来像是你,那就请继续你的旅程吧。
  1. cyber_kinetist

    图形编程的圣经,仅此一部。如果你想开始学习计算机图形学,就把整个网站从头到尾学一遍,逐个完成示例。它使用的是稍显过时的 OpenGL API,但这完全不是问题——你首先要学的是如何渲染东西,而不是那些晦涩难懂的硬件/驱动细节!

    学完之后,如果你想做更底层的 GPU 计算,可以开始学习 CUDA(抱歉,你最好还是买张 NVIDIA 显卡,CUDA 就是那么好用)。或者,如果你只是想制作东西,但想要一个比 OpenGL 更好用的跨平台图形 API,那我推荐 SDL3。(或者,如果你想做 macOS 独占应用,就用 Metal——它其实是个相当不错的 API)

    Vulkan 或 DX12 目前是有缺陷的 API,它们不必要地复杂,甚至已经不再符合当前一代硬件的性能特性了。(参见标题帖:https://www.sebastianaaltonen.com/blog/no-graphics-api)。不过,如果你想从事计算机图形学职业(无论是游戏行业还是其他细分领域),拥有这些 API 的经验会有好处,因为许多生产级应用目前仍被困在这些 API 上——不过说实话,现在的图形学就业市场真的很糟糕。(最大的板块是拥有自研引擎的 3A 游戏公司,但游戏行业现在正在崩溃……)

  2. oumua_don17

    如果你真的想从头开始学习,我推荐写一个不依赖任何图形 API 的软件渲染器。如果你在找课程,看看 [1]。接下来,扩展这个软件渲染器以渲染一个 3D 角色模型(一个 obj 文件就够用了),[1] 里有涵盖,并且全程在 CPU 上使用骨骼动画来让这个 3D 模型动起来。使用 quake 的 md5mesh 和 md5anim 文件来渲染骨骼动画,参考 [2]。这能为你打下清晰的基础,让你了解渲染管线长什么样。

    然后,再去学学 Modern OpenGL,如果你之前下了苦功夫,你就能轻松直觉地理解这个管线中哪些部分是固定的,哪些部分是在专为 3D 设计的硬件上可编程的。碰巧的是,同样的原理也可以复用于计算领域,于是你就掌握了所有 D/ML 的套路。之后,再去读读 GPU 的硬件架构(这方面的文献很少,因为都被厂商锁死了),但《Real-Time Rendering》这类书里有相关章节,你可以从中了解为什么 Vulkan、DX12、Metal 现在这么流行,而 OpenGL 却被弃用了。

    [1] https://pikuma.com/courses/learn-3d-computer-graphics-progra...

    [2] http://tfc.duke.free.fr/coding/md5-specs-en.html

  3. mawadev

    我实在想不出还有什么领域比用 OpenGL 编程更有成就感了,尤其是如果你是在玩游戏长大的话。我指的是那种爱好者级别的引擎开发。对于白天做 Web/云业务的开发者来说,这简直就像是一种心理治疗。

  4. AyanamiKaine

    如果你想应用学到的知识,我推荐使用像 Sokol [0] 这样的库,或者使用 SDL-GPU API [1]。虽然 Sokol 的层级更高,但两者都可以用。否则,Learn OpenGL 确实是个很好的入门教程。

    [0] https://github.com/floooh/sokol

    [1] https://wiki.libsdl.org/SDL3/CategoryGPU

  5. BraveOPotato

    着色器(Shaders)以前对我来说完全不知所云。教程里写个简单的表达式,boom,屏幕上就显示出一堆花里胡哨的东西。

    后来我意识到,你写的代码其实就是在所有像素上顺序执行的。这么一想,就容易理解多了。

  6. leecommamichael

    到了这个地步,GL 已经是一个接口了,实现来来去去,但这个接口却死不了。它依然是入门最简单的方式,而且浏览器(WebGL)也要求针对该 API 编写的代码具备可移植性。

  7. brasswood

    Cem Yuksel 在犹他大学讲授的《交互式计算机图形学》讲座视频是另一个免费且极好的资源。https://www.youtube.com/playlist?list=PLplnkTzzqsZS3R5DjmCQs...

  8. MoltenMan

    天哪,这让我回忆满满!大约 6 或 7 年前,我用 LWJGL(Minecraft 用的同一个框架)在 Java 里写了一个叫 Mindacraft 的 Minecraft 克隆版,用的就是这个教程。我 vividly 记得这个教程是 OpenGL 方面最有用的资源,比其他资源好上不止一个数量级,而且这还是用一种实际上有指针和缓冲区的语言写的!(在 Java 里用 OpenGL 非常奇怪,因为你得通过一堆包装类来使用指针和缓冲区,这让事情变得更奇怪。这就像是在 Rust 里用 unsafe,但 Rust 里甚至还没有 unsafe 这个概念)。

同日更多故事

2026-07-23