我有一个与three.js相关的webgl问题。我想将信息附加到一个对象。例如,当我点击一个对象时,我想检索一些与该对象绑定的信息,如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是如何工作的,或者足够了解如何将任何信息绑定到对象以便以后可以调用它。
答案 0 :(得分:24)
实际上,您可以将自定义用户数据设置为Three.js中的对象。这里的关键是Object3D,它是所有场景图形对象的基础。文档有一个名为
的属性Object3D.userData;
这可以使用您选择的对象加载,当Raycaster类检索您的相交时,您可以直接在该点访问它。
初始化或运行时的Setter
Object3D.userData = { URL: "http://myurl.com" };
碰撞碰撞
window.location = intersects[0].object.userData.URL;