Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript THREE.JS Raycaster和JS“对象”而不是网格_Javascript_3d_Three.js_Raycasting - Fatal编程技术网

Javascript THREE.JS Raycaster和JS“对象”而不是网格

Javascript THREE.JS Raycaster和JS“对象”而不是网格,javascript,3d,three.js,raycasting,Javascript,3d,Three.js,Raycasting,我有一个关于Raycaster模型的问题。我理解它与网格相交的想法和事实,我可以对其进行变换,但例如,如果我创建的JS对象具有内部的THREE.Object3D,用于为其UI对网格进行分组,我如何知道何时单击了对象的对应实例 想象一个按钮。这个按钮有几个特点和一个内部的_模型,它保存着它的3.js图形形式,比如说构建这个按钮的boxGeometry和textGeometry。将按钮添加到场景时,它会将其buttonInstance.getModel添加到场景中,并将自身添加到对象存储库中以保留对

我有一个关于Raycaster模型的问题。我理解它与网格相交的想法和事实,我可以对其进行变换,但例如,如果我创建的JS对象具有内部的THREE.Object3D,用于为其UI对网格进行分组,我如何知道何时单击了对象的对应实例

想象一个按钮。这个按钮有几个特点和一个内部的_模型,它保存着它的3.js图形形式,比如说构建这个按钮的boxGeometry和textGeometry。将按钮添加到场景时,它会将其buttonInstance.getModel添加到场景中,并将自身添加到对象存储库中以保留对其的引用

如果我想单击此按钮,我将创建一个光线投射器,并从表示此对象的三维按钮对象或网格数组中获取相交对象

但是如何触发事件或与按钮实例本身交互?我有网格,但不知道如何将其与实例本身链接

有什么线索吗?我在三个方面搜索了很多关于光线投射的内容,但是所有的例子都与更改网格的颜色或位置有关

    _raycaster.setFromCamera(new THREE.Vector2(0,0), _camera);
    _activeBtns = _raycaster.intersectObjects(_buttons, true);
    _activeBtns[0].object.parent.position.set(curPos.x, curPos.y, curPos.z-.2); // alter position of the Object3D that holds textMesh and BoxMesh
但是,如果所有按钮都有两个网格,并且一旦它们出现在场景中,我看不到一种识别它们的方法,那么我怎么知道哪个按钮被“点击”了呢

谢谢


乌哈拉,韦斯特兰利。最后,我选择通过网格在场景中拥有的uuid“绑定”它们,因为抽象对象也可以访问网格。

在将网格添加到场景网格之前,可以向网格添加名称、类型或任何其他字段。名称='button'或网格类型='text',然后检查.name=='button'@uhara不会覆盖three.js对象的type属性。改为使用userData:mesh.userData.type='text'。diekus See@WestLangley感谢您的更正,很遗憾我不能再编辑我的评论了。