视图的平铺渲染大于GL_MAX_VIEWPORT_DIMS

时间:2011-10-27 11:34:38

标签: c++ qt opengl 3d openinventor

我正在创建一个采用OpenGL场景图并使用QGLFrameBufferObject呈现结果的类。为了支持(几乎)无限大小我正在使用平铺来提取许多小图像,这些小图像可以在渲染所有图块后组合成一个大图像。

我通过为整个图像设置视口(glViewport),然后使用glScissor在图块之后“剪切”图块来进行平铺。这适用于最高GL_MAX_VIEWPORT_DIMS的分辨率,但会导致超出此限制的空图块。

我该如何处理这个问题?我需要更换相机还是有任何巧妙的技巧来做到这一点?我正在使用Coin / OpenInventor,因此非常欢迎任何特定于这些框架的提示。

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

改变相机并不像你想象的那么难,除了修改顶点着色器之外,它是我能看到的唯一解决方案。

通过沿x和y轴缩放和平移投影矩阵,您可以轻松获得普通相机视图的任何子区域。

对于视口的给定最大值和最小值,其中完整视口为(-1,-1)和(1,1),平移(max + min)/ 2,并缩放(max - min) / 2。

答案 2 :(得分:0)

您可以尝试缩放整个世界,间接使viewport max帐户获得更大的细节。或者基本上,您可以缩小图像和视口,并具有相同的视觉效果。