c++ - 优化渲染到纹理过程

标签 c++ 3d glsl

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

该过程运行良好,但我意识到一个小问题:我创建的每个 RTT 相机都会创建一个与屏幕输出尺寸相同的纹理。也就是说,如果我的视口(viewport)大小为 1024x1024,即使几何体占据屏幕的 256x256 部分,每个 RTT 相机也会在 1024x1024 纹理中渲染 256x256 几何体。

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

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

想法?

最佳答案

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

我的想法:

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

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

关于c++ - 优化渲染到纹理过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10873642/

相关文章:

c++ - 使用 C++ 套接字时无法接收到多个消息

c++ - 如何获取存储在 C++ 列表中的类对象?

c++ - 无法将二维字符数组初始化为所有空格

linux - 仅在命令 shell 上安装 blender 2.7 linux(无 X)

c++ - 将笛卡尔(x,y,z)转换为圆柱(ρ,θ,z)坐标2D/3D的代码

c++ - 在现代OpenGL中,使用GL_TRIANGLE奇怪的z轴行为绘制实心圆

ios - GL_APPLE_shader_framebuffer_fetch gl_lastFragData

c++ - 关于将指向数组的指针作为函数参数的困惑

opencv - 2d图像到3d(重建)

c++ - GLSL uniform ivec 未设置并在被询问时具有默认(错误)值