我正在使用 glDrawElements 绘制三角形网格,并且希望能够使用鼠标单击来拾取/选择三角形。三角形的网格可以很大。
在固定功能 OpenGL 中,可以使用 GL_SELECT:http://content.gpwiki.org/index.php/OpenGL:教程:挑选 http://content.gpwiki.org/index.php/OpenGL:Tutorials:Picking..但是我只对使用 OpenGL 核心配置文件感兴趣。
另一种可能性是使用“颜色编码”:
http://www.lighthouse3d.com/opengl/picking/index.php?color1 http://www.lighthouse3d.com/opengl/picking/index.php?color1
http://www.opengl.org/resources/faq/technical/selection.htm http://www.opengl.org/resources/faq/technical/selection.htm
..但据我所知,在使用 glDrawElements 时还不可能指示每个三角形信息?
最后,我可以通过通过鼠标位置发射拾取射线来进行基于 CPU 的拾取,但这会非常慢,因为我想我必须在 CPU 上变换三角形,所以我更喜欢基于 GPU 的解决方案。
有人对在 OpenGL 核心配置文件中使用 glDrawElements 时选择的最佳方法有什么建议吗?
关于“颜色编码”方法,您可以使用gl_PrimitiveID http://www.opengl.org/sdk/docs/manglsl/xhtml/gl_PrimitiveID.xml要使用适当的片段着色器填充颜色编码缓冲区,这基本上会给您所绘制三角形的索引。
关于基于 CPU 的拾取,您可以使用现有的库来处理加速结构和光线网格相交,例如Bullet http://bulletphysics.org/wordpress/ or Opcode http://www.codercorner.com/Opcode.htm.
最适合您的选择取决于您的用例,很难说。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)