С тэгом. Js, могу ли я прикрепить информацию к объекту, например URL?
У меня есть вопрос webgl, связанный с three.js. Я хотел бы добавить информацию к объекту. Например, когда я нажимаю на объект, я хотел бы получить некоторую информацию, привязанную к объекту, например URL-адрес, а затем запустить функцию, используя эту информацию.
Код, который я использую для поиска объекта:
var vector = new THREE.Vector3((event.clientX / window.innerWidth) * 2 - 1, -(event.clientY / window.innerHeight) * 2 + 1, 0.5);
projector.unprojectVector(vector, camera);
var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
var intersects = raycaster.intersectObjects(objects);
intersects[0].object.material.color.setHex(Math.random() * 0xffffff);
Последняя строка - это то, как я сейчас манипулирую объектом. Массив objects
представляет собой просто массив всех объектов. Проблема в том, что я недостаточно знаю о том, как работает Raycaster или intersectObjects, или достаточно о том, как связать любую информацию с объектом, чтобы ее можно было позже вспомнить.
Ответы
Ответ 1
действительно вы можете установить пользовательские данные для объекта в файле Three.js. Ключ здесь - Object3D, который является основой для всех объектов графа сцены. Документы имеют свойство
Object3D.userData;
Это может быть загружено с помощью объекта по вашему выбору, и когда класс Raycaster получает ваше пересечение, вы можете просто получить к нему доступ непосредственно в этой точке.
Сеттер во время init или runtime
Object3D.userData = { URL: "http://myurl.com" };
Getter on Collision
window.location = intersects[0].object.userData.URL;