OpenGL 使用内置照明或使用着色器自定义照明

OpenGL Using built-in lighting or custom one with shaders

我刚刚发现 OpenGL 具有内置照明,可以通过 glEnable(GL_LIGHTING); 启用。为什么教程等使用由着色器制作的自定义教程?必须有一个原因。内置照明在哪些方面做得更差?

OpenGL has built-in lighting

不,不是。所有这些都是 removed from OpenGL in 3.1 and put into the compatibility profile不需要支持。

What does built-in lighting do worse?

一切。它让一切变得更糟。

固定功能光照是逐顶点的,而基于着色器的光照可以是任何你想要的:逐顶点、逐片段等等。固定功能照明不适用于延迟渲染、照明预通道或各种其他渲染技术。固定功能照明无法处理 HDR 或伽玛校正照明。

没有什么是固定功能照明可以做到而用户定义照明不能做到的。虽然用户定义的照明可以做很多固定功能做不到的事情。

现代 OpenGL 教程不教那些过时的垃圾,这很好。