0

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

第一个也是最大的一个是当我希望在光通道中渲染球体以仅计算受光影响的像素。当我在模板通道中绘制球体,然后在全屏四边形上计算光时,我认为一切正常(我只有错误的球体大小,但它仅用于测试)

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

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

我还必须对教程中提供的代码进行一些更改

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);

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

我想问你的最后一个问题是,仅基于光功率(即浮点数)计算球体大小和光衰减的最佳公式是什么?

4

0 回答 0