6

我应该如何在 OpenGL 中实现超过 8 个灯?

我想有效地渲染无限量的灯光。

那么,这样做的首选方法是什么?

4

2 回答 2

15

延迟着色。

简而言之,您可以在没有任何灯光的情况下渲染场景。相反,您将法线和世界位置与纹理像素一起存储到多个帧缓冲区(所谓的渲染目标)中。如果您使用多个渲染目标扩展,您甚至可以一次完成此操作。

准备好缓冲区后,您开始渲染一堆全屏四边形,每个四边形都有一个像素着色器程序,用于读取法线和位置并计算一个或多个光源的光。

由于光是相加的,您可以根据需要渲染尽可能多的全屏四边形,并为尽可能多的光源累积光。

最后一步是在您的灯光和未点亮的纹理帧缓冲区之间进行合成。

这或多或少是最先进的方法。不过,使用这样的系统获得雾和透明度是一项挑战。

于 2010-01-03T00:24:55.477 回答
7

OpenGL 灯是一个简单的系统,据我所知,它已经在弃用列表中。您应该通过编写着色器自己处理灯光。看看这里

于 2010-01-03T00:20:16.513 回答