我的主场景由 3D 空间中的 GL_POINTS 组成。我想做的是当用户在屏幕上移动手指时能够在场景顶部绘制一条 GL_LINES 线(2d 叠加层),同时保持底层 3D GL_POINTS 状态。如果可能的话,我很难理解。我需要 2 个帧缓冲区吗?如何保存 GL_POINTS 的先前帧缓冲区数据并在后续帧中重新渲染?我是否需要混合帧缓冲区 - 一个用于 GL_LINE 层,一个用于 GL_POINTS 数据?
我试过只调用 presentFramebuffer 而没有调用 setFramebuffer,但这会保留从之前的帧绘制的每个 GL_LINES - 我不希望这样。如何保留部分帧缓冲区并移除其他部分?
最佳答案
你根本不需要 2 个帧缓冲区
- 帧缓冲区是您的屏幕内存
- 只渲染你拥有的那个上的所有东西
如果您指的是帧缓冲区 VBO (VertexBufferObject),那么它们完全不同
- 如果你渲染相同的数据(顶点)
- 那么你只需要 1x VBO
- 并调用 glDrawArrays/glDrawElements 两次
一次使用 GL_POINTS,一次使用 GL_LINES/GL_LINE_LOOP 或其他
如果你渲染不同的数据
- 那么你需要 2x VBO
- 或者如果只有几行,那么您仍然可以为它们使用 glBegin/glEnd。
如果您只需要单独的 View 区域,那么您可以使用
- 裁剪、更改视口(viewport)、用四边形覆盖边框、...
- 绘制到纹理,等等......还有很多选择
关于objective-c - 重绘旧缓冲区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7085103/