优化渲染到纹理的过程

时间:2012-06-03 20:18:39

标签: c++ 3d glsl

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

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

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

我使用的API(OpenSceneGraph)使用轴对齐的边界框,所以我运气不好..

思想?

1 个答案:

答案 0 :(得分:0)

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

我的想法:

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

这应该是几何体可以占据的空间的正确上限。