我正在开发一个允许用户在场景中选择 3d 对象的项目,我想知道每个人都认为处理这个特定场景的最佳方法是什么。
基本上我们有一个包含至少 100 个对象的场景(它们是低多边形,但由至少 ~12-15 个三角形组成)和最多约 1000-2000 个对象。
并非所有对象始终都是“可拾取”的,因为某些对象会遮挡其他对象,因此“可拾取”对象可能落在 800-1500 之间(取决于场景的复杂性)。
当一个对象被“拾取”时,我们希望它以某种方式突出显示,因此这意味着以不同的方式渲染它,这很简单,但我们希望不仅通过单击而且拖动来完成拾取 - 这意味着我们想要运行拾取在很短的时间内算法很多。理想情况下,用户会在对象仍处于“拖动”操作时看到突出显示的对象 - (这意味着应该异步完成拾取,以免滞后于主渲染?)。
我尝试过简单的光线追踪拾取,但这显然很慢,因为我们循环遍历场景中的所有三角形以找到对象。
我还尝试过基于 GPU 的拾取 - 使用像素缓冲区渲染场景,为每个对象提供独特的颜色,但通过拖动操作,这意味着多次渲染和 GPU 到 CPU 的数据传输,性能不佳。
我是否可以探索其他可能性来尝试获得我想要的性能和功能?
谢谢你的时间。