C++ 如何在OpenGL中找到屏幕上给定像素对应的原语或顶点

C++ 如何在OpenGL中找到屏幕上给定像素对应的原语或顶点,c++,opengl,C++,Opengl,假设一个球体是使用OpenGL计算和绘制的,例如它就是这样做的 我对学习感兴趣,如何找到与屏幕上任意给定像素(x,y)对应的特定顶点? 但是,我已经读过光线投射和选择缓冲区,因为我需要迭代大量像素(比如说>10k)并找到所有对应的顶点,这些解决方案似乎不适合这种情况 理想情况下,我希望找到一种既快速又现代的方法,即现代OpenGL意义上的方法 是否有“开箱即用”的解决方案,或者我需要编写着色器?无论哪种情况,您能提供的任何细节都将不胜感激 添加一个整数“面ID”顶点属性,使给定三角形的每个顶点都

假设一个球体是使用OpenGL计算和绘制的,例如它就是这样做的

我对学习感兴趣,如何找到与屏幕上任意给定像素(x,y)对应的特定顶点?

但是,我已经读过光线投射和选择缓冲区,因为我需要迭代大量像素(比如说>10k)并找到所有对应的顶点,这些解决方案似乎不适合这种情况

理想情况下,我希望找到一种既快速又现代的方法,即现代OpenGL意义上的方法

是否有“开箱即用”的解决方案,或者我需要编写着色器?无论哪种情况,您能提供的任何细节都将不胜感激

  • 添加一个整数“面ID”顶点属性,使给定三角形的每个顶点都相同
  • 通过VS将面ID传递给FS并将其写入整数FBO
  • 在所需位置读回FBO像素(使用PBO进行异步FBO读回),给出每个点的面ID

  • 实际上,你需要迭代的像素最多,最合适的是选择缓冲区(至少在我看来是这样),因为你在这个缓冲区中使用了大量的计算信息,为什么不合适呢?谢谢你的回复@Guiroux。我已经读到,选择缓冲区已经过时,甚至可能不再被一些现代图形芯片所支持(作为opengl的初学者,我无法真正验证这一点)。关于如何使用这个用例的选择缓冲区,您手头有好的资源吗?谢谢@genpfault,我将尝试一下并报告。