如何放大/缩小到一个OpenGL屏幕,而不渲染整个屏幕
How to zoom-in/out to an OpenGL screen without rendering the entire screen again
我正在编写一个程序来显示500万个矩形,使用OpenGL渲染。大约需要。3秒将这些矩形显示在屏幕上。但是,当我尝试放大/缩小或向左/向右平移屏幕时,它也会花费相同的时间。
我想知道是否有一种方法可以将所有内容保存到内存/缓冲区中,因此屏幕不必一遍又一遍地重新绘制。
我也有其他的解决方案。
下面是我的重塑函数:
static void reshape_cb() {
glViewport(0, 0, (GLint) screen_width, (GLint) screen_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D (0.0, DESIGN_SIZE, 0.0, DESIGN_SIZE);
}
我正在写一个程序来显示500万个矩形,用OpenGL渲染。大约需要。3秒时间将这些矩形显示在屏幕上。
这听起来像是你在以一种非常低效的方式发送绘图命令。现代图形处理器每秒可以渲染数亿个三角形。我猜你正在使用立即模式。
我想知道是否有一种方法可以将所有内容保存到内存/缓冲区中,因此屏幕不必一遍又一遍地重新绘制。
缩放通常意味着改变视角或渲染分辨率,因此需要完全重绘。
我也对其他解决方案持开放态度。谢谢你。
你应该优化你的绘图代码。关键字是:
- 顶点数组
- 顶点缓冲对象
- 大图纸批次
我同意画这个场景不应该花3秒钟。
然而,要回答这个问题:Yes, you can do that.
你会渲染到一个屏幕外的帧缓冲区(FBO),你甚至可以在另一个线程上做一个单独的共享上下文,这样它就不会阻塞GUI。然后,GUI将使用最近渲染的FBO进行绘制(您将对这些FBO进行双重缓冲,以便在使用旧的FBO进行显示时可以绘制另一个FBO)。然后你可以在渲染的FBO上以全交互帧率进行平移和缩放。当然,你不能比渲染时上下左右移动得更远,如果你放大太多(超过1.5倍或2倍),画面就会变得模糊。但这是可以做到的。此外,正如另一个答案所指出的,你的视角或几何或阴影不能改变,它就像在一张固定的照片中移动一样。
相关文章:
- OpenGL ES 2.0将纹理绘制到屏幕上是行不通的
- OpenGL - 添加第二个着色器属性会导致空白屏幕
- 如何使用 openGL 在屏幕上显示加载的纹理
- 如何在OpenGL中自动选择屏幕大小
- Qt,openGL,小部件和屏幕外渲染
- OpenGL屏幕坐标到世界坐标
- 当对象在屏幕空间中较小时,OpenGL 更新缓慢
- 如何使用OpenGL在屏幕上显示三角形
- OpenGL多个带有独特着色器的呼叫可提供空白屏幕
- OpenGL 检查屏幕边界
- OpenGL 屏幕外渲染
- OpenGL:MESA3D屏幕上的软件渲染性能问题
- 我试图运行OpenGL,但Glut屏幕只是呈现一个白色屏幕
- QT QML 中的 OpenGL,无法更新屏幕上的图像
- OpenGL在非方形屏幕上绘制线条
- OpenGL 3 Qt 渲染空白屏幕
- OpenGL使用glfw通过HIDDEN窗口进行屏幕外渲染和读取像素值
- OpenGL显示空白屏幕.可能是因为着色器
- 即使没有发生错误,三角形也不会在屏幕openGL上绘制
- 空白屏幕OpenGL