大于 GL_MAX_VIEWPORT_DIMS 的视口平铺渲染
Posted
技术标签:
【中文标题】大于 GL_MAX_VIEWPORT_DIMS 的视口平铺渲染【英文标题】:Tiled rendering of viewports bigger than GL_MAX_VIEWPORT_DIMS 【发布时间】:2011-10-27 11:34:37 【问题描述】:我正在创建一个采用 OpenGL 场景图并使用 QGLFrameBufferObject
来呈现结果的类。为了支持(实际上)无限大小,我使用平铺来提取许多可以在渲染所有平铺后组合成大图像的小图像。
我通过为整个图像设置视口 (glViewport
) 来进行平铺,然后使用 glScissor
逐个“剪切”平铺。这适用于高达GL_MAX_VIEWPORT_DIMS
的分辨率,但会导致超出此限制的空白图块。
我应该如何解决这个问题?我需要改变相机还是有什么巧妙的技巧可以做到这一点?我正在使用 Coin/OpenInventor,因此也非常欢迎任何针对这些框架的提示。
【问题讨论】:
【参考方案1】:更换相机并不像你想象的那么难,这是我除了修改顶点着色器之外唯一能看到的解决方案。
通过沿 x 和 y 轴缩放和平移投影矩阵,您可以轻松获得普通相机视图的任何子区域。
对于给定的视口最大值和最小值,其中完整视口为 (-1, -1) 和 (1, 1),平移 (max + min) / 2,缩放 (max - min) /2.
【讨论】:
我最终使用SbViewVolume::narrow 调整了视图音量以缩小呈现的“窗口”。【参考方案2】:试试OpenGL Tile Rendering Library。
【讨论】:
【参考方案3】:您可以尝试缩小整个世界,间接地使视口最大值占更大的细节。或者基本上,您可以缩小图像和视口并获得相同的视觉效果。
【讨论】:
这不会让我生成大于GL_MAX_VIEWPORT_DIMS
的图像,这是必不可少的。
这取决于您希望它们多大。这将在一定程度上专门针对 VISUAL 效果。以上是关于大于 GL_MAX_VIEWPORT_DIMS 的视口平铺渲染的主要内容,如果未能解决你的问题,请参考以下文章
请问:等于,不等于,大于,小于,大于等于,小于等于的英文English是啥?
x1+x2+x3+x4=10的整数解的个数有多少 其中x1大于等于3,X2大于等于1,X3大于等于0,X4大于等于5