大家好 我在 JOGL 项目中添加拾取对象时遇到麻烦。 我知道这可以通过选择缓冲区来完成..但我找不到示例 有人吗?
最佳答案
一般来说,您可能知道,JOGL 代码直接从您可能在网络上看到的任何其他 OpenGL 示例进行转换。
基于GL_SELECT
的拣选如今似乎已经非常不受欢迎了;规范中已弃用,并且驱动程序实现不佳。
您可以使用的替代方案是:
使用唯一的颜色渲染每个对象(并禁用所有照明/雾等),以便您可以通过
glReadPixels
确定鼠标位于哪个对象上。 (在拾取阶段后清除缓冲区,以便您可以渲染正常图形)。 OpenGL GL_SELECT or manual collision detection? 中评分最高的答案解释了这种方法。例如。将光线转换到您的几何体中(请参阅下面的选择常见问题解答链接)。这也意味着您不必在调用代码的线程中拥有事件的 gl 上下文,fwiw。
我在同一个应用程序中使用了这两种方法,目前后者取得了良好的结果,但由于该应用程序中的大多数对象都是球体,因此它比任意模型便宜得多。
关于点动拾取示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4485821/