C++ OpenGL能做到这一点吗?
我正在制作一个绘制形状的应用程序,我用相机在其他地方绘制。基本上,假设我有一个4x3矩形,并希望使用glgetpixels获取1024x768的所有像素,但我的显示器可能不支持该分辨率。如何渲染比显示器更大的内容。我这样做是为了让用户以任意分辨率保存形状的图片。使用glviewport是否会扩展到帧之外,然后我就可以执行glgetpixels了C++ OpenGL能做到这一点吗?,c++,c,opengl,C++,C,Opengl,我正在制作一个绘制形状的应用程序,我用相机在其他地方绘制。基本上,假设我有一个4x3矩形,并希望使用glgetpixels获取1024x768的所有像素,但我的显示器可能不支持该分辨率。如何渲染比显示器更大的内容。我这样做是为了让用户以任意分辨率保存形状的图片。使用glviewport是否会扩展到帧之外,然后我就可以执行glgetpixels了 谢谢我不是OpenGL开发人员,但你绝对可以对比屏幕尺寸更大的纹理进行渲染 谷歌搜索给了我这个答案,也许它很有用:这不是一个彻底的答案,但它应该是有用的
谢谢我不是OpenGL开发人员,但你绝对可以对比屏幕尺寸更大的纹理进行渲染
谷歌搜索给了我这个答案,也许它很有用:这不是一个彻底的答案,但它应该是有用的。你在做RTT,渲染到纹理。您将设置一个新的renderbuffer,将其设置为渲染目标,然后使用glGetPixels获取其值。使用以下命令创建渲染缓冲时:
void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
您可以设置它的大小,而不必与屏幕的大小相匹配。希望这有帮助 可以通过定义FBO(帧缓冲区对象)并将纹理附加到它来RTT(渲染到纹理)。选中glBindFramebufferEXT()
绘制场景后,您可以执行glGetTexImage()并为其检索像素
RTT是一种非常成熟且有文档记录的技术。实际上,这取决于具体情况。我认为FBO不会解决你的问题(不过会有帮助) 我怀疑您正在尝试创建高分辨率的3D场景,例如以300dpi打印。您可能需要超过最大FBO分辨率(4096*4096在一张像样的图形卡上),因此您必须使用平铺渲染 其思想是将最终图像渲染为一组子图像(平铺)
Mesa3d的作者编写了一个很好的库来实现这一点。用法非常简单。我已经在Windows下完成了。IIRC,基本上将渲染上下文(RC)设置为屏幕外位图(任意尺寸)。