所以我有一个WebGL模型查看器(一个模型由许多不同的对象组成),其中我实现了一个套索/选取框选择框。也就是说,用户可以单击以在屏幕上拖动矩形,并且矩形内的所有内容都被选中。它不仅选择可见对象,还选择模型中矩形范围内的所有内容。
我必须为2种情况做这件事:部分和全部选择。
完整选择:只有矩形内完全的对象才会被选中。
部分选择: 在套索矩形中任何重叠的任何对象都将被选中。
现在,我有完整的选择工作得很好。问题在于部分选择。我所做的一切都太慢了。我没有空间索引/分区(八叉树或BVH等),因此我的下一个测试是创建一个以帮助更快地剔除未被选中的内容。
一般来说,似乎在某些时候,我仍然坚持迭代一个对象的所有三角形,看看它的任何部分是否与屏幕上的套索矩形重叠。在某些情况下,如果将套索选择拖动到足够大,这将非常慢,这样就不会剔除任何对象,并且必须检查所有对象是否与矩形相交。
现在,我正在JS中进行所有矩形/三角形交叉测试(检查对象与矩形交叉的各种方法),并且在着色器中没有进行测试。
所以我并没有真正寻求帮助来加速我现在拥有的东西,我想知道是否有已知的方法来做到这一点,即使对于大量高度详细的对象(网格)也相对较快?在考虑基于着色器的方法时,我似乎创造性地碰壁了。