OpenGL,延迟着色,点光源和模板通过的边界体积,光衰减

时间:2013-08-17 12:03:57

标签: opengl lighting stencil-buffer deferred-shading bounding-volume

目前我正在尝试在我的引擎中实现延迟着色。我主要基于在web上创建的一个教程(由于链接限制我不粘贴链接:)) 但我也使用其他来源,我知道延迟着色是如何工作的。我目前的实现基于计算所有灯光类型的全屏四边形上的灯光。为了获得更高的速度,我想使用带有模板通道的点光源的边界球,但是我遇到了一些问题。

第一个也是最大的一个是当我希望渲染球体在光通过时只计算受光影响的像素。当我在模板传递中绘制球体然后在全屏四边形上计算光时我认为一切都按照它应该工作(我只有不好的球体尺寸,但它仅用于测试): image

但是当我试图将它渲染到我在模板传递中使用的相同球体上时,我得到了奇怪的结果,这可能是由于纹理坐标造成的。当我不使用它们时,我的一切都是黑色的。当我使用它们时,我有this

在教程中,我看到人们只渲染只包含顶点位置的球体,一切正常,所以我不知道出了什么问题。

我还必须对来自

的教程中提供的代码进行一些更改
glStencilOpSeparate(GL_BACK, GL_KEEP, GL_INCR, GL_KEEP);
glStencilOpSeparate(GL_FRONT, GL_KEEP, GL_DECR, GL_KEEP);

glStencilOpSeparate(GL_BACK, GL_KEEP, GL_INCR_WRAP, GL_KEEP);
glStencilOpSeparate(GL_FRONT, GL_KEEP, GL_DECR_WRAP, GL_KEEP);

而且我也想知道为什么当我在球体之外时,这种变化可以帮助mi解决另一个问题(我相信你知道问题是什么,我不需要解释)。

我想问的最后一个问题是,根据光功率(浮动数)计算球体尺寸和光衰减的最佳公式是什么?

0 个答案:

没有答案