3D图形采摘 - 这种情况的最佳方法是什么

时间:2013-08-16 10:02:27

标签: 3d directx gpu-programming picking ray-picking

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

基本上我们有一个场景,至少有100个物体(它们是低聚物,但至少由12-15个三角形组成),最多约1000-2000个物体。

并非所有对象都可以选择"在任何时候都是因为某些物体会遮挡其他物体,因此可以选择"物体可能落在800-1500之间(取决于场景的复杂程度)。

当一个物体被选中时#34;我们希望它以某种方式突出显示,这意味着以不同的方式呈现它,这是微不足道的,但我们希望不仅可以单次点击而且还可以选择拖动 - 这意味着我们希望在短距离内运行拣选算法时间理想情况下,当用户仍处于"拖动时,用户会看到突出显示的对象。操作 - (意味着拾取应该异步完成,以免滞后于主渲染?)。

我尝试过简单的光线追踪,但是当我们遍历场景中的所有三角形来找到对象时,这显然很慢。

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

我是否还有其他可能的尝试来尝试获得我想要的性能和功能?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

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

以下链接应为您提供八叉树的基础及其设置方式:Introduction to Octrees

虽然该链接仅为您提供了基础,但八叉树的使用仅仅是为了减少必要的检查,因此根据您的问题判断,您似乎已经掌握了执行实际操作所需的知识采摘。