什么是 NeHe 教程?
NeHe 教程是由 Jeff Molofee(网名 NeHe)在 1999 年左右创建的一系列 OpenGL 编程教程,它最初发布在 GameDev.net 网站上,因其通俗易懂、循序渐进、代码完整的特点,迅速风靡全球,成为了全世界无数 OpenGL 开发者的“圣经”。

核心特点:
- 语言: 主要使用 C++ 语言(早期是 C 语言)。
- 平台: 主要基于 Windows 平台,使用 GLUT(OpenGL Utility Toolkit)库来简化窗口创建和事件处理。
- 风格: 非常“手把手”的教学方式,每一步都解释得非常清楚,代码注释详尽。
- 从最基础的创建窗口、绘制三角形,到后来的光照、纹理、混合、粒子系统等高级主题,覆盖了 OpenGL 1.x 版本的核心功能。
NeHe 教程的地位与影响
- 时代的产物: NeHe 教程是为 OpenGL 固定功能管线 设计的,这个管线在 OpenGL 2.0 及更高版本中被可编程管线所取代。
- 入门的经典: 即使在今天,NeHe 教程对于理解计算机图形学的基本概念(如顶点、图元、光照模型、纹理映射等)仍然具有不可替代的价值,它像一本“图形学入门”的实践手册。
- 思想的传承: NeHe 教程的教学思路影响了后来的许多图形学教程,它教会了学习者如何“动手”,如何将理论转化为代码。
NeHe 教程的现代意义(为什么今天还要学?)
很多人会问:“现在都 OpenGL 4.x 了,学 NeHe 还有用吗?”
答案是:非常有用,但需要有选择地学。
学 NeHe 的好处:

- 打好基础: 你会深刻理解 OpenGL 的核心状态机工作方式、各种渲染状态(如光照、混合、深度测试)是如何工作的,这些概念在现代 OpenGL 中依然存在,只是实现方式不同。
- 理解图形学原理: 教程中的光照、纹理、混合等章节是学习现代图形学着色器编程的绝佳铺垫,你会知道为什么要在着色器里写那些光照计算公式,因为 NeHe 教程已经用固定功能管线实现了一遍。
- 快速上手: 对于完全没有图形学背景的初学者,NeHe 的 GLUT 环境配置非常简单,可以让你专注于 OpenGL API 的学习,而不是被复杂的窗口系统和构建环境所困扰。
需要注意的局限性:
- API 过时: 使用的是已废弃的
glBegin()/glEnd()方式来绘制图形,而不是现代 OpenGL 推荐的顶点缓冲对象。 - 管线过时: 使用的是固定功能管线,而不是现代 OpenGL 的核心——可编程管线。
- 库过时: 依赖的 GLUT 库在现代开发中已不常用,通常会使用 GLFW 或 SDL 来创建窗口。
如何获取 NeHe 教程?
NeHe 教程的原始网站已经不再维护,但内容被完整地保存在互联网档案馆和一些镜像网站上。
主要资源:
-
GameDev.net 镜像(推荐): 这是最完整和权威的镜像。
(图片来源网络,侵删)- 链接: https://nehe.gamedev.net/
- 这个网站包含了所有 48 个教程,以及大量的用户贡献的翻译和移植版本(C#、Java、Python 甚至现代 C++ 和 OpenGL 3/4 的版本)。
-
互联网档案馆: 可以查看原始的网页快照。
-
GitHub 上的开源项目: 搜索 "NeHe OpenGL Tutorials",可以找到很多人整理好的代码仓库。
学习路径建议
对于现代学习者,我建议采用“NeHe + 现代”的混合学习路径。
使用 NeHe 理解基础(可选,但推荐)
这个阶段的目标是理解概念,而不是直接用于生产。
-
工具准备:
- 编译器: Visual Studio (Windows) 或 GCC (Linux/macOS)。
- 库: 下载
freeglut或GLUT的库文件,将头文件和库文件正确配置到你的开发环境中。 - 学习环境: 搭建一个简单的 C++ + GLUT 项目。
-
学习顺序(挑选重点):
- Lesson 01 - Lesson 04: 创建窗口、绘制三角形、旋转,理解 OpenGL 的基本渲染流程和坐标系统。
- Lesson 06 - Lesson 09: 颜色、光照、纹理。这是核心! 一定要亲手做一遍,理解
glEnable(GL_LIGHTING)、glLightfv()、glBindTexture()等函数的作用,你会明白光照和纹理是如何被“固定”地应用到物体上的。 - Lesson 10 - Lesson 14: 混合、键盘输入、特殊效果,理解透明度、双缓冲和用户交互。
- Lesson 21 - Lesson 24: 粒子系统、天空盒、凹凸映射,这些是游戏和 3D 应用中常见的效果,能极大地提升你的学习兴趣。
-
学习要点:
- 不要死记 API: 重点理解每个函数调用背后的图形学原理。
glTranslatef是在做什么?它在修改哪个矩阵? - 思考“为什么”: 为什么需要
glEnable(GL_DEPTH_TEST)?关闭它会怎么样?为什么光照效果出不来?检查glEnable(GL_LIGHTING)和glEnable(GL_LIGHT0)是否都调用了。
- 不要死记 API: 重点理解每个函数调用背后的图形学原理。
过渡到现代 OpenGL
在理解了 NeHe 的基础概念后,你应该立刻转向现代 OpenGL。
-
核心转变:
- 从固定管线 -> 可编程管线: 学习使用 GLSL (OpenGL Shading Language) 编写 顶点着色器 和 片段着色器。
- 从
glBegin/glEnd-> VBOs (Vertex Buffer Objects): 学习如何将顶点数据一次性上传到 GPU,并高效地使用。 - 从 GLUT -> GLFW/SDL: 学习使用更现代、更流行的窗口和输入库。
-
推荐的学习资源:
- LearnOpenGL-CN (强烈推荐): https://learnopengl-cn.github.io/
这是目前最优秀、最全面的现代 OpenGL 中文教程,它完美地衔接了 NeHe 的基础概念,并用现代的方式重新实现了一遍,它会教你用 GLSL 实现和 NeHe Lesson 7 一样的光照效果。
- OpenGL SuperBible (书籍): 经典的 OpenGL 参考书,有较新的版本覆盖现代 OpenGL。
- OpenGL 4.0 Shading Language Cookbook (书籍): 专注于 GLSL 着色器编程的实践书籍。
- LearnOpenGL-CN (强烈推荐): https://learnopengl-cn.github.io/
| 特性 | NeHe 教程 | 现代 OpenGL (如 LearnOpenGL) |
|---|---|---|
| 目标 | 理解概念 | 用于开发 |
| 管线 | 固定功能管线 | 可编程管线 |
| 核心 API | glBegin, glEnd, glLight* |
VAOs, VBOs, Shaders (GLSL) |
| 窗口库 | GLUT | GLFW / SDL |
| 适用平台 | 主要是 Windows | 跨平台 |
| 现代性 | 低,API 已废弃 | 高,是当前行业标准 |
最终建议:
- 如果你是零基础小白: 可以花 1-2 周时间,跟着 NeHe 的前 10-15 课走一遍,重点感受图形学的基本概念,然后立刻转向 LearnOpenGL-CN。
- 如果你有一定编程基础: 可以直接从 LearnOpenGL-CN 开始,遇到不懂的概念(比如光照、纹理矩阵)时,再回头翻看 NeHe 的对应教程作为补充理解。
NeHe 教程就像一位和蔼的老教练,他教你骑车的原理和基本动作,而现代 OpenGL 教程则为你提供了最新的、更高效的自行车,先跟老教练打好基础,再驾驭新车,是最高效的学习路径。
