Three.js:无法通过raycaster(.gtlf 3D对象)识别相交的对象

时间:2019-05-23 20:39:43

标签: three.js dom-events

我正在使用three.js和通过THREE.GLTFLoader()导入的.gtlf模型制作场景。我想将属性附加到对象,以后在与这些对象有关的事件发生时与它们一起使用。但是我的问题是,光线投射器返回的交点没有携带添加到对象的属性。此外,我无法确定光线投射器返回了哪个对象(例如,通过我之前附加的obj.name属性,因为返回的相交不再像添加到场景中时那样是3DObject)。

我怎样才能准确地确定光线投射器返回了哪个(gltf)对象?

对于宝石学对象,它工作得很好,并且从光线投射器返回时附加了属性,但是对于已加载的模型(gltf),即使使用了旨在传递信息的“ userData”属性,它也不起作用。此属性为空。

gltfLoader.load('./assets/simple_shelf/scene.gltf', (gltf) => {
    shelf = gltf.scene.children[0];
    shelf.userData.direction = "test string";
    scene.add(shelf);
});
//console.log(shelf.userData.direction) shows it correctly, but returned 
//by raycaster on events (e.g. mousemove), userData is empty

function onMouseMove(event) {
                event.preventDefault();
                var rect = renderer.domElement.getBoundingClientRect();
mouse.x = ( ( event.clientX - rect.left ) / ( rect.width - rect.left ) ) * 2 - 1;
mouse.y = - ( ( event.clientY - rect.top ) / ( rect.bottom - rect.top) ) * 2 + 1;

                raycaster.setFromCamera(mouse,camera);
                var intersects = raycaster.intersectObjects(scene.children, true);
                for (let i = 0; i < intersects.length; i++){
                    console.log(intersects[i]);
                }
            }
window.addEventListener('mousemove', onMouseMove);

我想以某种方式准确地识别raycaster返回的对象,即触发事件。因此,我想添加属性并在事件发生时检索它们。

我在这里做什么错了?

0 个答案:

没有答案