c++ - OpenGL:渲染超过 8 盏灯,怎么样?

标签 c++ opengl light

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

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

那么,执行此操作的首选方法是什么?

最佳答案

延迟着色。

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

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

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

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

这或多或少是最先进的方法。然而,让雾和透明度与这样的系统一起工作是一个挑战。

关于c++ - OpenGL:渲染超过 8 盏灯,怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1993431/

相关文章:

C++,函数指针和成员函数指针之间的等价性?

c++ - "cc1plus: error: bad value (‘tigerlake’ ) 对于 ‘-march=’ 开关"编译错误

linux - 在 Linux 上创建当前 OpenGL 上下文

OpenGL,世界到对象坐标映射? (逆矩阵)

ios - 如何让场景套件中的光节点始终位于人的正上方?

java - java中的光/射线转换?

c++ - 为什么我在 gdb 中收到 ifstream 对象的 <incomplete type> 消息?

c++ - 如何旋转粒子系统使其不绕世界轴旋转

c - SDL+OpenGL 在 linux 下工作但在 windows 下不工作,不是编译器/链接器问题

android - 如何找出Android设备上的屏幕状态?