1

我有一个点光阴影贴图程序,但对如何控制多光场景有点迷茫。如何设置多个灯光,每个灯光都有自己的“深度纹理”吗?如果是这样,它们如何组合以最终渲染场景(显然,并非所有灯光都会一直处于活动状态)?

当考虑到这一点时,拥有单独的(小)深度立方体贴图似乎更合乎逻辑,而不是用于整个场景(尤其是用于近距离关卡而不是开放景观),但是实现这样一个系统只是让我盯着屏幕。

谢谢。

4

1 回答 1

1

有很多方法可以完成你想要的。该方法取决于您的确切需求。如果您使用的是 OpenGL 2.1 或更早版本,则可以通过启用多个 OpenGL 灯来设置多个灯:

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, <light 0 settings>);
glEnable(GL_LIGHT1);
glLightfv(GL_LIGHT1, <light 1 settings>);
...etc. with up to GL_MAX_LIGHTS lights

例如,如果您想要超过 GL_MAX_LIGHTS 灯,或者您使用的是 OpenGL 3 或更高版本,则需要将灯光数据作为制服传递到您的着色器程序中。

当我过去处理阴影时,我对每个灯光都使用了深度纹理。

要组合它们,您通常会针对每个灯光测试每个片段。如果片段对灯光可见(即不在阴影中),则添加灯光的贡献。如果片段处于阴影中(对光不可见),那么您不会添加该光的贡献。

如果您需要数百个灯或类似的东西,您还可以查看Deferred Shading。(另请参阅有关延迟着色的 Wikipedia 条目。)

于 2013-02-17T16:26:43.877 回答