我正在创建一个采用OpenGL场景图并使用QGLFrameBufferObject
呈现结果的类。为了支持(几乎)无限大小我正在使用平铺来提取许多小图像,这些小图像可以在渲染所有图块后组合成一个大图像。
我通过为整个图像设置视口(glViewport
),然后使用glScissor
在图块之后“剪切”图块来进行平铺。这适用于最高GL_MAX_VIEWPORT_DIMS
的分辨率,但会导致超出此限制的空图块。
我该如何处理这个问题?我需要更换相机还是有任何巧妙的技巧来做到这一点?我正在使用Coin / OpenInventor,因此非常欢迎任何特定于这些框架的提示。
答案 0 :(得分:1)
答案 1 :(得分:1)
改变相机并不像你想象的那么难,除了修改顶点着色器之外,它是我能看到的唯一解决方案。
通过沿x和y轴缩放和平移投影矩阵,您可以轻松获得普通相机视图的任何子区域。
对于视口的给定最大值和最小值,其中完整视口为(-1,-1)和(1,1),平移(max + min)/ 2,并缩放(max - min) / 2。
答案 2 :(得分:0)
您可以尝试缩放整个世界,间接使viewport max帐户获得更大的细节。或者基本上,您可以缩小图像和视口,并具有相同的视觉效果。