在我的 OpenGL 应用程序中,我有很多球体(超过 100.000 个),我愿意实现一种高效的光线拾取算法。
到目前为止,我的方法是幼稚的:
计算与鼠标指针对应的射线(在对象空间中),然后将我拥有的每个球体与射线相交。虽然这种方法对于我的应用程序来说可能足够快(球体的实际渲染可能比用射线拾取它们要慢......),但我想知道哪种方法是这种情况下最好的方法。
我特别担心这些球体可能具有任意半径这一事实,我不知道如何在八叉树等空间分区结构中考虑到这一点。
你有什么建议吗?
我将添加更多细节:
有问题的应用程序是一个分子查看器,其中原子表示为球体,如下图所示:
球体可以部分或完全重叠。场景可以是动态的(您可以进行分子模拟),但您通常不想在动画期间选择任何东西。
理想情况下,我想找到一个将来也可以扩展到气缸的解决方案。