【问题标题】:Screen space bounding box computation in OpenGLOpenGL中的屏幕空间边界框计算
【发布时间】:2014-03-16 18:14:14
【问题描述】:

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

问题是我不知道该怎么做。有什么想法、源代码或精确的数学吗?

更新

【问题讨论】:

    标签: opengl 3d geometry bounding-box deferred-rendering


    【解决方案1】:

    屏幕空间基本上是一个 2D 实体,因此不要考虑边界框,而是考虑边界矩形。

    这是一个简单的计算方法:

    1. 使用 ModelViewProjection 矩阵将世界空间边界框的 8 个角点投影到屏幕上
    2. 找到这些点的边界矩形(这只是点的最小/最大 X 和 Y 坐标)

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

    有关数学详细信息,请参阅本文:http://www.altdevblogaday.com/2012/03/01/getting-the-projected-extent-of-a-sphere-to-the-near-plane/

    【讨论】:

    • 这也是可能的解决方案,但我没有计算世界边界框,所以我想从转换光的位置构建边界正方形(四边形)到查看空间并将其计算到屏幕空间。知道如何实现这一目标吗?
    • 你的意思是计算光的平截头体(更准确地说是左、右、顶和底平面——与视锥体近和远相同)?我试图计算类似的东西,但它并不像看起来那么容易。我已经更新了我的帖子以说明我的意思。难道你没有一些链接到这个或一些源代码的精确数学以便更好地理解?谢谢
    • @mezo:有点。我的意思是,使用灯光的边界球体,然后将其切平面投影到屏幕上。这可能是您想要的数学:altdevblogaday.com/2012/03/01/…
    猜你喜欢
    • 1970-01-01
    • 2015-03-03
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2011-04-10
    • 1970-01-01
    • 2020-04-05
    相关资源
    最近更新 更多