在三个窗口中选择一个对象



我认为问题可能是因为它是一个加载的对象,而不是一个"创建的"几何体,但我希望能够选择一个对象,并显示它被选中,就像在这个例子中。

我加载了多个对象,并跟踪每个对象的索引(所以第一个加载的对象具有objIndex = 0,等等),并且我知道我的代码可以识别何时从控制台中"按下鼠标"。然而,它说这是相交的。Length = 0,因此跳过函数的其余部分。

我也不确定"交集"是什么。长度"实际上取的是。

所以我想我的问题是:

  1. 什么是"交集"。长度"取的长度?"

  2. 为什么我的对象有一个"交集"。长度为0?

  3. 我能做些什么来让物体被识别?

相关代码如下:

function onDocumentMouseDown(event) {
    event.preventDefault();
        // default action of event will not be triggered
    var vector = new THREE.Vector3(mouse.x, mouse.y, 0.5).unproject(camera);
        // used to pass 3D positions and directions
    var raycaster = new THREE.Raycaster(camera.position,
                    vector.sub(camera.position).normalize());
    var intersects = raycaster.intersectObjects(objects);
    console.log('Mouse is down.');
    console.log(intersects.length);
    if (intersects.length > 0) {
        controls.enabled = false;
        SELECTED = intersects[0].object;
        var intersects = raycaster.intersectObjects(plane);
        offset.copy(intersects[0].point).sub(plane.position);
        container.style.cursor = 'move';
        console.log('Clicked object: ' + object.name);
    }
}

如果你想看更多,请告诉我!谢谢你!:)

回答你的问题:

下面是关于光线投射的一篇有趣的文章,有助于澄清光线投射:http://soledadpenades.com/articles/three-js-tutorials/object-picking/

所以光线投射基本上是(真的)投射一个假想的光线。当你"滑下"你的程序,所谓的,将一个直线数组投射到场景中。现在来回答你的问题:

对于问题一(1)和问题二(2):现在当你投射一束光线时,它可能与物体相交,也可能不相交。例如,如果你点击一个空白的空间,射线将不会捕捉到一个物体。然而,顾名思义,光线投射投射了一条光线,它也可能沿途击中多个物体。例如,如果你有一个物体和另一个物体直接位于第一个物体的后面,投射到第一个物体上的光线也会与第二个物体相交。光线投射将"捕捉"两个对象,并将两个对象放入"相交"数组中。因此,命令

if (intersects.length > 0)

声明,如果光线投射"捕获"和对象,执行这些。此外,它继续调用intersects[0]来引用intersects数组中的第一个对象。在这种情况下,光线投射捕获的最前面的物体。您可以通过创建数百个对象来测试我的答案,并声明,对于intersects数组中的每个成员,您将颜色更改为红色(例如)。你会看到,如果光线投射捕捉到多个物体,所有的物体都会变成那种颜色。希望是前两个问题!

我不确定第三个问题你在问什么。你能进一步说明吗?物体被识别的一种方法是将它们放入场景中,并对场景进行光线投射。然而,我不太确定你在问什么,所以我不能给你一个我认为你想要的答案。

最新更新