2011-10-27 123 views
1

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

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

我该如何解决这个问题?我需要改变相机还是有任何巧妙的技巧来做到这一点?我使用Coin/OpenInventor,因此任何针对这些框架的提示都非常受欢迎。

回答

1

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

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

对于视口的给定最大值和最小值,在完整视口为(-1,-1)和(1,1)的情况下,按(max + min)/ 2进行转换,并按(max - min )/ 2.

+0

我最终使用[SbViewVolume :: narrow](http://doc.coin3d.org/Coin/classSbViewVolume.html#a10f0ca68486f3dc6fa9253e705573d5a)调整视图体积以缩小渲染的“窗口”。 – larsmoa

0

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

+0

这不会让我产生大于“GL_MAX_VIEWPORT_DIMS”的图像,这是必不可少的。 – larsmoa

+0

这取决于你想让他们变得多大。这可以达到特定的视觉效果。 – Sean