如何将着色器中的值传递给 CPU?

How to pass a value in shader to CPU?

我正在构建一个点云查看器,我需要能够select 手动点云注册的点。

我知道可以将鼠标位置传递给片段着色器 select 一个点。但是如何将结果发送回 CPU?我认为 uniform 是一个很好的方法,但 google 搜索结果显示它在 GPU 端是只读的。

许多方框 selection 示例都在使用 CPU 侧面碰撞检查,在我的情况下由于要显示的点数非常多,所以不希望这样做。

一种可能的解决方案是使用快速邻居搜索,例如八叉树。但我现阶段不考虑这个选项。

您可以使用 SSBO 着色器存储缓冲区对象 。你可以用它进行读写操作。

参考文献:

  1. https://www.khronos.org/opengl/wiki/Shader_Storage_Buffer_Object
  2. https://www.geeks3d.com/20140704/tutorial-introduction-to-opengl-4-3-shader-storage-buffers-objects-ssbo-demo/