OpenGL可以这样做吗?

时间:2010-07-28 00:14:33

标签: c++ c opengl

我正在制作一个绘制形状的应用程序,我使用相机在其他地方绘制。基本上,假设我有一个4x3矩形,并希望使用glgetpixels来获取1024x768的所有像素,但我的显示器可能不支持该分辨率。如何渲染比监视器更大的东西。我这样做,所以我可以让用户以任意分辨率保存形状的图片。使用glviewport会延伸到框架之外,那么我可以做glgetpixels吗?

由于

4 个答案:

答案 0 :(得分:3)

您可以通过定义FBO(帧缓冲区对象)并将纹理附加到它来进行RTT(渲染到纹理)。检查glBindFramebufferEXT()。

绘制场景后,您可以执行glGetTexImage()并为其检索像素。

RTT是一种非常成熟的文档化技术。

答案 1 :(得分:2)

我不是OpenGL开发人员,但你绝对可以对纹理进行渲染,而这些纹理的尺寸可能大于屏幕。

谷歌搜索给了我这个,也许它很有用:http://developer.nvidia.com/attach/6725

答案 2 :(得分:2)

这不是一个彻底的答案,但它应该是有用的。你在做RTT,渲染到纹理。您将设置一个新的渲染缓冲区,将其设置为渲染目标,然后使用glGetPixels获取其值。用以下内容制作渲染缓冲区时:

void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);

您可以设置其尺寸,该尺寸不必与您的屏幕相匹配。希望这有帮助!

答案 3 :(得分:0)

实际上,这取决于。我认为FBO不会解决你的问题(但它会有所帮助)。

我怀疑你正在尝试创建3D场景的高分辨率版本,例如以300dpi打印它。您可能需要超过最大FBO分辨率(4096 * 4096在体面的图形卡上),因此您必须使用平铺渲染。

我们的想法是将您的最终图像渲染为一组子图像(图块)

Mesa3d的作者编写了一个很好的库,TR。用法很简单。