objective-c - 重绘旧缓冲区问题

标签 objective-c ios opengl-es framebuffer

我的主场景由 3D 空间中的 GL_POINTS 组成。我想做的是当用户在屏幕上移动手指时能够在场景顶部绘制一条 GL_LINES 线(2d 叠加层),同时保持底层 3D GL_POINTS 状态。如果可能的话,我很难理解。我需要 2 个帧缓冲区吗?如何保存 GL_POINTS 的先前帧缓冲区数据并在后续帧中重新渲染?我是否需要混合帧缓冲区 - 一个用于 GL_LINE 层,一个用于 GL_POINTS 数据?

我试过只调用 presentFramebuffer 而没有调用 setFramebuffer,但这会保留从之前的帧绘制的每个 GL_LINES - 我不希望这样。如何保留部分帧缓冲区并移除其他部分?

最佳答案

  1. 你根本不需要 2 个帧缓冲区

    • 帧缓冲区是您的屏幕内存
    • 只渲染你拥有的那个上的所有东西
  2. 如果您指的是帧缓冲区 VBO (VertexBufferObject),那么它们完全不同

    • 如果你渲染相同的数据(顶点)
    • 那么你只需要 1x VBO
    • 并调用 glDrawArrays/glDrawElements 两次
    • 一次使用 GL_POINTS,一次使用 GL_LINES/GL_LINE_LOOP 或其他

    • 如果你渲染不同的数据

    • 那么你需要 2x VBO
    • 或者如果只有几行,那么您仍然可以为它们使用 glBegin/glEnd。
  3. 如果您只需要单独的 View 区域,那么您可以使用

    • 裁剪、更改视口(viewport)、用四边形覆盖边框、...
    • 绘制到纹理,等等......还有很多选择

关于objective-c - 重绘旧缓冲区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7085103/

相关文章:

ios - 设置按钮标题时,具有淡入淡出效果

ios - shouldReceiveTouch 从未被调用

ios - 将一段十六进制字符串转换为 double

objective-c - 在 NSTableView 中显示二维数组

ios - 调整 UILabel 的字体,使文本适合标签的边界

ios - 如何从本地路径加载图像 ios swift(按路径)

Android:在 SurfaceView 和 OpenGL 之间做出选择(GLSurfaceView)

ios - GLKViewController 中带有 glTexImage2D 的 EXC_BAD_ACCESS

android - 如何检查 OpenGL ES 实现是否支持非 POT 纹理?

ios - 在cocoapods中加载resource_bundle错误