我正在创建一个接受OpenGL场景图并使用QGLFrameBufferObject呈现结果的类。为了支持(虚拟)无限大小,我正在使用平铺来提取许多小图像,这些小图像可以在渲染所有平铺之后组合成一个大图像。
我通过为整个图像设置一个视口(glViewport),然后使用glScissor来“剪切”一块又一块的瓦片来做平铺。这对于分辨率高达GL_MAX_VIEWPORT_DIMS的图像效果很好,但会产生超出此限制的空平铺。
我应该如何处理这个问题?我需要改变相机吗,或者有什么巧妙的技巧可以做到这一点?我使用的是Coin/OpenInventor,所以也非常欢迎任何针对这些框架的技巧。
发布于 2011-10-28 02:17:56
改变相机并不像你想象的那么难,除了修改顶点着色器之外,这是我唯一能看到的解决方案。
通过沿x和y轴缩放和平移投影矩阵,您可以轻松获得法线相机视图的任何子区域。
对于给定的视口最大值和最小值,其中完整视口为(-1,-1)和(1,1),平移(max + min) / 2,缩放(max - min) / 2。
发布于 2011-10-27 22:01:43
发布于 2011-10-27 21:48:59
您可以尝试缩小整个世界,间接地使视口的最大值考虑更大的细节。或者基本上,您可以缩小图像和视口,以获得相同的视觉效果。
https://stackoverflow.com/questions/7915279
复制相似问题