2

我正在开发一个允许用户在场景中选择 3d 对象的项目,我想知道每个人都认为处理这个特定场景的最佳方法是什么。

基本上我们有一个包含至少 100 个对象的场景(它们是低多边形,但由至少 ~12-15 个三角形组成)和最多约 1000-2000 个对象。

并非所有对象始终都是“可拾取”的,因为某些对象会遮挡其他对象,因此“可拾取”对象可能落在 800-1500 之间(取决于场景的复杂性)。

当一个对象被“拾取”时,我们希望它以某种方式突出显示,因此这意味着以不同的方式渲染它,这很简单,但我们希望不仅通过单击而且拖动来完成拾取 - 这意味着我们想要运行拾取在很短的时间内算法很多。理想情况下,用户会在对象仍处于“拖动”操作时看到突出显示的对象 - (这意味着应该异步完成拾取,以免滞后于主渲染?)。

我尝试过简单的光线追踪拾取,但这显然很慢,因为我们循环遍历场景中的所有三角形以找到对象。

我还尝试过基于 GPU 的拾取 - 使用像素缓冲区渲染场景,为每个对象提供独特的颜色,但通过拖动操作,这意味着多次渲染和 GPU 到 CPU 的数据传输,性能不佳。

我是否可以探索其他可能性来尝试获得我想要的性能和功能?

谢谢你的时间。

4

1 回答 1

1

我以前用过八叉树来做这种事情,这似乎是我最好的选择。每个对象都可以放在相应的节点中,并通过通常的八叉树协议进行测试。真正的好处来自在当前节点为空时将光线投射偏移到空间节点的末尾。与暴力破解相比,这肯定会给您带来显着的收益。

以下链接应该为您提供Octree的基础以及它的设置方式:Octrees 简介

虽然链接只是给你一个基础,八叉树的使用只是为了减少必要的检查,所以从你的问题来看,你似乎已经具备执行实际采摘所需的知识。

于 2013-08-16T10:19:17.597 回答