OpenGL:渲染超过8个灯,怎么样?

时间:2010-01-03 00:17:49

标签: c++ opengl light

我应该如何在OpenGL中实现8个以上的灯?

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

那么,最好的方法是什么?

2 个答案:

答案 0 :(得分:14)

延迟着色。

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

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

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

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

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

答案 1 :(得分:7)

OpenGL灯是一个简单的系统,据我所知,已经在不推荐使用的列表中。你应该写一个shader来自己处理灯光。看看here