【发布时间】:2011-05-05 07:06:42
【问题描述】:
我正在使用单独的帧缓冲区对象在 opengl 中拾色 2d 对象。我很好奇它是否可以只绘制到帧缓冲区并在需要时读取颜色。
我现在正在做的是在主渲染循环中,我将场景绘制到主帧缓冲区,然后仅将可选对象渲染到“拾取”帧缓冲区。
当用户单击鼠标时,它会绑定“拾取”帧缓冲区并读取像素,我知道选择了哪个对象。这样做的问题是,当用户单击鼠标时,我只需要“挑选”帧缓冲区,因此每帧都这样做效率低下。
当用户单击鼠标然后直接读取时,我尝试渲染到“拾取”帧缓冲区,但我得到的只是白色(背景颜色而不是告诉我它是哪个对象的颜色)。绘制“拾取”帧缓冲区只是将整个事物显示为白色,就像根本没有实际渲染它一样。
渲染到“拾取”帧缓冲区时是否需要停止在主循环中绘制?还是我缺少一些东西可以使这成为可能?
编辑:我尝试在渲染到拾取帧缓冲区时不在主循环中绘图,但这也不起作用。
【问题讨论】:
-
您在抽奖和阅读之间是否
glFlush()? -
我愿意。我认为“否”的答案可能是正确的。
-
你是同时做的吗?
-
不。我尝试了所有我知道的顺序方式,唯一有效的方式是在渲染正常帧缓冲区的同时渲染拾取 fbo,这在现代硬件上并不是什么大问题(可能是 5%),但在旧的东西上它可能更接近约 30-40% 的性能损失。
-
如果您不在多线程应用程序中,并且只有一个上下文,那应该可以。检查为什么您的 FBO 渲染必须在正常渲染之后进行。 (矩阵,纹理,...)
标签: opengl colors framebuffer picking