2013-10-01 30 views
3

我想渲染具有特定摄像机参数的场景,其中分辨率非常高(比如20,000 x 20,000像素),但实际上我只对图像平面的640x480小部分感兴趣。在OpenGL中渲染裁剪后的图像

我不一定只想放大该部分并改变相机指向的位置。我想让相机保持指向相同的方向,我只想渲染一小部分场景。

我附上一张照片,试图证明什么,我讲:如何我可以设置使用OpenGL的摄像头矩阵呼吁妥善这样的事情 Uploaded image

任何提示?

+0

我非常怀疑你会发现一个OpenGL实现能够渲染成20000×200帧缓冲区(你可能需要将渲染任务拆分成瓷砖来完成这个任务)。但是你可能会考虑的一件事就是所谓的剪刀盒,它允许你将光栅化裁剪到视口的一个子矩形中。与修改实际的视口映射不同,这不会修改您的投影特性。有关更多详细信息,请参阅:“glScissor(...)”。 –

+0

但是,这是一个光栅操作,因此设置剪刀矩形不会帮助您在原始装配期间剪切几何图形。您可能需要为此实现额外的裁剪逻辑。 –

+0

我不一定需要20,000x20,000帧缓冲区,我只想保留原始相机,但只渲染该图像平面的一小部分。到目前为止,我所看到的将涉及修改实际相机以查看该位置。即使我使用剪刀盒,这又能如何帮助我解决这个事实:我仍然需要巨大的帧缓冲来保存我感兴趣的区域的细节水平? –

回答

1

我认为libtr会做你想做的。

+0

很酷,我会试试看,谢谢! –

2

您只需要选择不同的投影矩阵。为glFrustum老参考页描述了如何创建这样一个矩阵:

projection matrix

的左,右,上,下的参数指定圆台的边缘(如图所示在画面中)。制作一个“正常”的投影矩阵,左=右,顶=底。将它们设置为不同的值可以限制视图。例如,如果在保持右侧和底部不变的情况下设置left = 0和top = 0,则会在图片中显示与红色区域相似的投影。

如果你计算出你当前使用的值,应该很简单地调整它们以产生你想要的结果。

+0

很酷,我实际上正在考虑走这条路,只是不太清楚如何开始,感谢您的帮助! –