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

6 c++ opengl light

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

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

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

Nil*_*nck 14

延迟着色.

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

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

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

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

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


Kor*_*icz 7

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

  • 该教程说:"因此,最好的方法是为不同数量的灯光编译不同的着色器." 嗯...那不是我想要做的事情,因为我可以在世界上移动,有时候可能有100个灯光渲染,有时10个灯光......我不想为可见的每种可能组合写出2000个着色器灯.或者我明白了一些可怕的错误:/ (2认同)