Three.js: 区域挑选

创建于 2012-04-27  ·  5评论  ·  资料来源: mrdoob/three.js

嗨,首先,我很抱歉如果这不是我要问的一般问题吗?

是否有一个“区域拾取”多个3D对象的示例? 那就是用鼠标拖动框架并选择其中的所有对象?

我一直在玩THREE.Ray对象,它是一个相交方法,但是没有循环遍历并跟踪每个XY坐标来找到我有点迷失的所有相交。

我已经遍及整个网络,遍历github和堆栈溢出,但没有找到任何帮助。
任何帮助,不胜感激。

提前致谢
朱尔兹

Question

最有用的评论

我使用基于屏幕矩形构造的子截锥体将Three.js拾取示例调整为区域选择。 单击并拖动以选择。 它感觉不如将所有3D对象投影到2D屏幕空间然后与屏幕矩形相交那么准确,但是它工作得很好,而且我认为它更快。

堆栈溢出时的相关问题:
THREE.js如何检测2d正方形和3d obj的交集
THREE.js如何选择区域中的所有对象

所有5条评论

最好在场景中跟踪对象,然后遍历每个XY坐标。 在这种情况下,您将无法使用THREE.Ray,并且必须实现自定义逻辑来确定对象是否在框架内。 我相信这种方法将大大加快代码的速度。

嗯,这是一个有趣的问题。

我认为屏幕上的矩形应该对应于相机的一些子视锥。 如果您可以为此视锥构建矩阵,则可以尝试像对视锥剔除一样进行相同的检查。

是的,这很有道理。
我对3D坐标或复杂矩阵的要求不高,
如果我通过传递矩形顶点(鼠标拖动)和近端到Matrix4.makeFrustum方法来定义THREE.Matrix4。
然后可以通过将Matrix4传递到Frustum.setFromMatrix方法中来创建THREE.Frustum吗?
然后使用Frustum.contains方法检测对象是否在其中?

这听起来像是对工作地狱充满了希望吗?

鼠标坐标是否与任何3D世界坐标相关? 如鼠标相对于相机在飞机附近或类似位置的位置?

抱歉,如果我只是一个n00b,我真的需要一个答案。

您需要将鼠标坐标投影到3D世界。 看一下这个例子:
http://mrdoob.github.com/three.js/examples/webgl_interactive_cubes.html

我使用基于屏幕矩形构造的子截锥体将Three.js拾取示例调整为区域选择。 单击并拖动以选择。 它感觉不如将所有3D对象投影到2D屏幕空间然后与屏幕矩形相交那么准确,但是它工作得很好,而且我认为它更快。

堆栈溢出时的相关问题:
THREE.js如何检测2d正方形和3d obj的交集
THREE.js如何选择区域中的所有对象

此页面是否有帮助?
0 / 5 - 0 等级