2014-02-17 63 views
2

我想实现平铺的延迟渲染方法,现在我卡住了。我正在计算每个tile(32x32)的最小/最大深度并将其存储在纹理中。然后我想要计算场景中每个点光源(球体)的矩形的左下角和右上角坐标框(请参阅我的应用程序中的图片)所代表的屏幕空间边界框(边界方块)。这将与最小/最大深度一起用于检查光线是否影响实际瓷砖。在OpenGL中的屏幕空间边界框计算

问题是我不知道如何做到这一点。任何想法,源代码或准确的数学?

bounding box of light, rendered light volume

更新 Your idea I guess

My attempt

回答

1

屏幕空间基本上是一个二维实体,所以不是一个边框认为边界矩形的。

这里是计算它一个简单的方法:用你的ModelViewProjection矩阵

  • 你的世界空间边界框的

    1. 项目8个角点到屏幕上找到这些点的矩形边框(这是只是点的最小/最大X和Y坐标)

    可以使用更复杂的方法来计算点光源的屏幕空间边界矩形。我们计算出四个穿过摄像机位置的平面,并与光线的照明范围(光半径)相切。每个切平面与图像平面的交点在图像平面上给我们4条线。这条线定义了最终的边界矩形。

    请参阅本文的数学细节:http://www.altdevblogaday.com/2012/03/01/getting-the-projected-extent-of-a-sphere-to-the-near-plane/

  • +0

    这也是可能的解决方案,但我没有计算领域边界框,所以我想建立边界从转换光的位置广场(四)查看空间计算它到屏幕空间。任何想法如何实现这一目标? – mezo

    +0

    @mezo:我已经更新了我的答案。 –

    +0

    你的意思是计算光的平截头体(更确切地说是左,右,上,下平面---与视锥体相近和近似)?我试图计算类似的东西,但并不像看起来那么容易。我已更新我的帖子以显示我的意思。不要在这个或某些源代码上有一些精确的数学链接,以便更好地理解?谢谢 – mezo