优化渲染到纹理过程

Optimizing a render-to-texture process

本文关键字:纹理 过程 优化      更新时间:2023-10-16

我正在开发一个渲染到纹理的过程,该过程涉及使用多个摄像机来渲染整个几何体场景。 然后,这些摄像机的输出被组合并直接映射到屏幕上,方法是将每个几何体的顶点坐标转换为顶点着色器中的屏幕坐标(我在这里使用 GLSL)。

这个过程工作正常,但我意识到一个小问题:我创建的每个RTT摄像机都会创建一个与屏幕输出尺寸相同的纹理。 也就是说,如果我的视口大小为 1024x1024,即使几何体占据屏幕的 256x256 部分,每个 RTT 摄像机也会以 1024x1024 纹理渲染 256x256 几何体。

解决方案似乎相当简单 - 调整 RTT 相机纹理大小以匹配几何图形占用的实际屏幕区域,但我不确定如何做到这一点。 也就是说,我如何(例如)确定几何体占据了屏幕的 256x256 区域,以便我可以相应地将 RTT 摄像机的输出纹理设置为 256x256 像素?

我使用的API(OpenSceneGraph)使用轴对齐的边界框,所以我在那里不走运。

思潮?

为什么不走运? 不能使用轴对齐的边界框来计算面积吗?

我的想法:

  • 获取边界框的 8 个角点,并将它们投影到相机的图像平面上。
  • 对于图像平面上生成的 2D 点,您可以再次确定轴对齐的 2D 边界框

这应该是几何图形可以占用的空间的正确上限。