Я работаю над сценой с 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, то есть вызвать события. Поэтому я хочу добавить атрибуты и получить их при возникновении события.
Что я здесь не так делаю?