Three.js: Невозможно идентифицировать пересекающиеся объекты с помощью raycaster (.gtlf 3D-объектов) - PullRequest
0 голосов
/ 23 мая 2019

Я работаю над сценой с three.js и импортированными моделями .gtlf через THREE.GLTFLoader (). Я хочу прикрепить атрибуты к объектам, а затем работать с ними всякий раз, когда происходит событие в отношении этих объектов. Но моя проблема в том, что возвращенные пересечения raycaster не несут атрибуты, добавленные к объектам. Кроме того, я не могу определить, какой объект был возвращен raycaster (например, с помощью атрибута obj.name, который я предварительно прикрепил, поскольку возвращаемые пересечения больше не являются объектами 3DObject, как при добавлении в сцену).

Как я могу точно определить, какой (gltf) объект был возвращен raycaster?

Для объектов gemoetry он работает отлично, и атрибуты прикрепляются при возврате из raycaster, но для загруженных моделей (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, то есть вызвать события. Поэтому я хочу добавить атрибуты и получить их при возникновении события.

Что я здесь не так делаю?

...