基于慢速变换反馈的拾取

Slow transform feedback-based picking?

本文关键字:于慢速 变换      更新时间:2023-10-16

我正在尝试使用转换反馈来实现拾取例程。目前它工作正常,但问题是速度很低(比GL_SELECT慢)。

现在的工作原理:

  1. 使用偏移量为0的glBindBufferRange()绑定TBO
  2. 使用glBufferSubData()重置内存(TF可变结构的大小)(以确保拾取正确)。主要问题就在这里
  3. 使用检查与拾取光线相交的几何体着色器绘制对象。如果找到了交集,着色器会将其写入TF变化(最初它没有交集,请参见步骤2)
  4. 增加偏移量,然后使用下一个对象转到步骤1

因此,在末尾,我有一个为每个对象拾取数据的数组。

问题是如何避免在每次迭代中调用glBufferSubData()?可能的解决方案(但我不知道如何实现)是:

  • 只写一个变化的TF。所以没有必要重置其他
  • 用任何其他方式重置数据

有什么想法吗?

如果只想清除缓冲区的一个区域,请使用glClearBufferSubData。话虽如此,但尚不清楚为什么需要清除它,而不仅仅是覆盖其中的内容。

仅供参考:拾取最好通过渲染场景、为对象指定不同的"颜色"以及读取感兴趣的像素来实现。你的方法是总是会更慢。