在 Three.js 中将事件侦听器添加到 3D Object 的特定部分
Add an event listener to a particular part of a 3D Object in Three.js
我有一个人 body object,我想要的是每当我单击任何指定的 body 部分(例如眼睛)时,我的代码应该打开一个弹出窗口,鼻子、手臂等。 object 是一个编译后的 .obj 文件,我无法弄清楚我应该如何将事件侦听器附加到多个 body 部分。非常感谢任何形式的帮助!
PS: - 我也在使用轨道控件来处理 object 的缩放和旋转。
提前致谢..
要解决此问题,有必要设计您的模型,使手臂、眼睛等各个组件成为独立的 3D 对象,组合在一起以构建更复杂的资产。这是您在设计阶段必须使用 Blender 等工具确保的事情。
在下一步导出到 glTF 而不是 OBJ 时,使用 THREE.GLTFLoader
将模型加载到您的应用程序中,然后通过以下方式对整个资产执行递归光线投射:
raycaster.intersectObject( gltf.scene, true, intersects );
通过在 pointermove
或 pointerdown
事件侦听器中执行此代码,您可以了解用户是否与模型交互。
请注意,three.js
没有直接将事件侦听器分配给 3D 对象的系统。为此,您必须使用不同的解决方案,例如光线投射。
我有一个人 body object,我想要的是每当我单击任何指定的 body 部分(例如眼睛)时,我的代码应该打开一个弹出窗口,鼻子、手臂等。 object 是一个编译后的 .obj 文件,我无法弄清楚我应该如何将事件侦听器附加到多个 body 部分。非常感谢任何形式的帮助!
PS: - 我也在使用轨道控件来处理 object 的缩放和旋转。
提前致谢..
要解决此问题,有必要设计您的模型,使手臂、眼睛等各个组件成为独立的 3D 对象,组合在一起以构建更复杂的资产。这是您在设计阶段必须使用 Blender 等工具确保的事情。
在下一步导出到 glTF 而不是 OBJ 时,使用 THREE.GLTFLoader
将模型加载到您的应用程序中,然后通过以下方式对整个资产执行递归光线投射:
raycaster.intersectObject( gltf.scene, true, intersects );
通过在 pointermove
或 pointerdown
事件侦听器中执行此代码,您可以了解用户是否与模型交互。
请注意,three.js
没有直接将事件侦听器分配给 3D 对象的系统。为此,您必须使用不同的解决方案,例如光线投射。