使用glDrawElements时在OpenGL核心配置文件中选取三角形

Wes*_*Dec 4 opengl glsl opengl-3

我使用glDrawElements绘制三角形网格,并希望能够使用鼠标单击选择/选择三角形.三角形的网格可以非常大.

在固定功能OpenGL中,有可能使用GL_SELECT:http://content.gpwiki.org/index.php/OpenGL:Tutorials:Picking ..但是我只对使用OpenGL核心配置文件感兴趣.

另一种可能性是使用'颜色编码':

http://www.lighthouse3d.com/opengl/picking/index.php?color1

http://www.opengl.org/resources/faq/technical/selection.htm

..但据我所知,使用glDrawElements时无法指示每个三角形信息?

最后,我可以通过鼠标位置拍摄拾取光线来进行基于CPU的拾取,但这会非常慢,因为我想我必须转换CPU上的三角形,所以我更喜欢基于GPU的解决方案.

有没有人建议在OpenGL核心配置文件中使用glDrawElements时采摘的最佳方法是什么?

rot*_*lup 5

关于'颜色编码'方法,您可以使用gl_PrimitiveID使用适当的片段着色器填充颜色编码缓冲区,这基本上可以为您提供绘制三角形的索引.

关于基于CPU的拾取,您可以使用处理加速结构的现有库和光线网格交集,例如BulletOpcode.

您的"最佳"选项取决于您的使用案例,很难说清楚.

  • @NicolBolas当然,要处理多个对象/绘制调用,应该添加另一个参数,以便能够将三角形0与两个不同的对象区分开来.与'gl_PrimitiveID`结合的每个对象的统一应该可以解决问题.我错过了什么吗? (2认同)