重绘旧缓冲区问题

发布于 2024-11-30 02:02:12 字数 320 浏览 1 评论 0原文

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

我尝试只调用presentFramebuffer而不调用setFramebuffer,但这会保留从先前帧绘制的每个GL_LINES - 这是我不想要的。如何保留部分帧缓冲区并删除其他部分?

My main scene is composed of GL_POINTS in 3D space. What I would like to do is be able to draw a single GL_LINES line (2d overlay) on top of the scene as the user moves his finger across the screen while retaining the underlaying 3D GL_POINTS state. I am having trouble understanding if this is possible. Do I need 2 framebuffers? How do I save the previous framebuffer data of GL_POINTS and re-render that in subsequent frames? Do I need to mix framebuffers - one for the GL_LINE layer and one for the GL_POINTS data?

I tried only calling presentFramebuffer without calling setFramebuffer but that is retaining each GL_LINES drawn from previous frames - which I do not want. How do I retain parts of the framebuffer and remove other parts?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烟花易冷人易散 2024-12-07 02:02:12
  1. 你根本不需要 2 个帧缓冲区

    • 帧缓冲区是您的屏幕内存
    • 只需在您拥有的那个上渲染所有内容即可
  2. 如果你的意思是帧缓冲区VBO(VertexBufferObject),那么它们是不一样的完全没有

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

    • 如果渲染不同的数据

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

    • 剪裁、更改视口、用四边形覆盖边框...
    • 绘制到纹理等等......还有很多选项
  1. you do not need a 2 frame-buffers at all

    • frame buffer is your screen memory
    • just render all stuff on that one you have
  2. if you mean by frame-buffer VBO (VertexBufferObject) then they are not the same at all

    • if you render the same data (vertexes)
    • then you need just 1x VBO
    • and call glDrawArrays/glDrawElements twice
    • once with GL_POINTS and once with GL_LINES/GL_LINE_LOOP or whatever

    • if you render different data

    • then you need 2x VBO
    • or if there are only few Lines then you can still use glBegin/glEnd for them instead.
  3. if you just need separate areas of view then you can use

    • clipping, change view-port, overwrite borders by quads, ...
    • draw to texture, and so on ... there is a lot of options more there
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文