1

我正在尝试构建一个拾取射线来查看我在 three.js 中的 3D 身体是否已被点击。目前它不起作用,我按照这些Three.js raycast 产生空的相交数组和这些three.js Raycaster intersectObjects提示。

我目前的代码是这样的:

function checkClick() {
                // On every click, check for body hit
                clickInfo.x = event.clientX;
                clickInfo.y = event.clientY;

                var x = ( clickInfo.x / window.innerWidth ) * 2 - 1;
                var y = -( clickInfo.y / window.innerHeight ) * 2 + 1;

                var objects = [];
                objects.push(model);
                var raycaster = projector.pickingRay(directionVector.clone(),camera);
                var intersects = raycaster.intersectObjects(scene.children);
                if (intersects.length) {
                     alert("found something");
                }
                else {
                     alert("found nothing");
                }
           }

我现在了解到,projector.pickingRay 为我节省了很多工作,因为在上面的第二个链接示例中,用户之前需要单独计算所有这些。但它不起作用。我没有收到任何 JS 错误,只有“一无所获”消息(相交数组为空)。我在场景(模型)中确实有一个对象,我将其添加到对象中,因为我知道 raycaster.intersectObjects 需要一个数组作为其参数。它仍然不起作用。然后我按照第一个链接示例中的提示使用了scene.children。尽管如此,它总是给出“一无所获”。为什么?我究竟做错了什么?

非常感谢您的帮助。

4

1 回答 1

-1

这是一个工作示例的链接,其中 3D 对象在鼠标悬停在其上时会改变颜色。也许这段代码可以适应您的需要?

http://stemkoski.github.io/Three.js/Mouse-Over.html

希望能帮助到你!

于 2013-06-11T16:12:38.553 回答