当前位置: 首页 > article >正文

threejs下监听mesh事件与监听3D对象的区别

先说结论

监听mesh时会导致同一mesh下同一个位置,如果重叠着多个3D对象,点击事件会被触发多次。而监听3D对象只有这个对象会触发这个事件一次。

技术架构

  • react
  • threejs
  • @react-three/drei
  • @react-three/fiber

场景

有这样一段代码,一个网格对象(mesh)中有一个平面(Plane),当我在网格上监听鼠标抬起事件时,被触发了三次:

const PerspectiveCameraZ = 500

/**
 * 区域平面
 */
const SrAreaPlane: React.FC<SrAreaPlaneProps> = (props) => {
  const { imageUrl } = props

  const texture = useLoader(TextureLoader, isEmpty(imageUrl) ? defaultImage : imageUrl)
  // 获取纹理的宽度和高度,固定宽度
  const textureWidth = PerspectiveCameraZ
  // 高度等比缩小
  const textureHeight = (texture.image.height * PerspectiveCameraZ) / texture.image.width

  return (
    <mesh
        onPointerUp={(event) => {
          // ...
        }}>
      <Plane args={[textureWidth, textureHeight]}>
        <meshBasicMaterial map={texture} side={DoubleSide} transparent={true} />
      </Plane>
      // 假设这里有更多的内容
    </mesh>
  )

后来排查原因发现:

监听mesh时会导致同一mesh下同一个位置,如果重叠着多个3D对象,点击事件会被触发多次。而监听3D对象只有这个对象会触发这个事件一次。

将事件监听移动到Plane上,问题就得到解决了。

这是个有意思的问题,值得分享。


http://www.kler.cn/a/146919.html

相关文章:

  • 一些常见网络安全术语
  • 华为ensp实验二--mux vlan的应用
  • Oracle 单机及 RAC 环境 归档模式及路径修改
  • Ansible内置模块之known_hosts
  • 《C++设计模式:重塑游戏角色系统类结构的秘籍》
  • 详细分析ip addr show 查看网络配置的命令
  • 28. Spring源码篇依赖注入之Optional
  • 【LeetCode】挑战100天 Day14(热题+面试经典150题)
  • Using Application Engine Meta-SQL 使用应用引擎元SQL
  • Java制作“简易王者荣耀”小游戏
  • MySQL日期函数sysdate()与now()的区别,获取当前时间,日期相关函数
  • 再探Docker:从Docker基础到跨服务器部署
  • 京东平台双11全品类完整销售数据回顾(京东大数据-京东数据采集-京东数据接口)
  • 什么是机器学习
  • 概念理论类: Linux的管道机制
  • 生成EtherCAT从站XML图片信息方法
  • VR全景技术助力政务服务大厅数字化,打造全新政务服务体验
  • Python字典合并
  • Java远程连接本地开源分布式搜索引擎ElasticSearch
  • 部署kafka
  • ZKP11.4 Use CI to instantiate Fiat-Shamir
  • 探索编程在现代社会的无限价值
  • 12 网关实战:Spring Cloud Gateway基础理论
  • Python break用法详解
  • [socket 弹 shell] msg_box3
  • 虹科干货 | 适用于基于FPGA的网络设备的IEEE 1588透明时钟架构