首页 > 其他分享 >鼠标射线拾取

鼠标射线拾取

时间:2024-09-23 11:12:19浏览次数:7  
标签:raycaster const 鼠标 拾取 射线 坐标系 rect

图例


图1-1

拾取步骤

  • 先把鼠标点击的(X,Y)从屏幕坐标系转成webgl坐标系。
  • 然后再把webgl坐标系通过投影逆变换转成投影坐标系,得到(X,Y)在投影坐标系下的值(Xw,Yw,Zw)。
  • 把(Xw,Yw,Zw)减去相机的坐标得到射线的方向向量(起点是相机的坐标,知道起点和方向就可以得到一条无限长的射线)。
  • 射线先和检测物体的包围和求交。
  • 把上一步检测相交的物体遍历每一个面,检测是否相交。
  • 把相交的物体按照深度(Z)排序,并返回。

拾取代码

event.preventDefault();
const raycaster = new Three.Raycaster();
let intersects;
let mouse = new Three.Vector2();

const rect = this.target.dom.getBoundingClientRect()
const x = event.clientX;
const y = event.clientY;
const array = [(x - rect.left) / rect.width, (y - rect.top) / rect.height]

const point = new Three.Vector2().fromArray(array);

mouse.set((point.x * 2) - 1, - (point.y * 2) + 1)
raycaster.setFromCamera(mouse, this.target.camera);
//获取射线与场景的交点
intersects = raycaster.intersectObjects(this.target.scene.children); 
if (intersects.length > 0) {
 //自定义选中模型逻辑
}

参考文章:

标签:raycaster,const,鼠标,拾取,射线,坐标系,rect
From: https://www.cnblogs.com/rongzhu-blog/p/18426676

相关文章

  • Js中获取鼠标中的某一个点的位置以及getBoundingClientRect
    getBoundingClientRect() 是一个用于获取元素位置和尺寸信息的方法。它返回一个DOMRect对象,其提供了元素的大小及其相对于视口的位置,其中包含了以下属性: x:元素左边界相对于视口的x坐标。y:元素上边界相对于视口的y坐标。width:元素的宽度。height:元素的高度。top:元素......
  • css鼠标常用样式
    在CSS中,你可以通过cursor属性来改变鼠标指针的样式。这个属性可以应用于任何HTML元素上,使得当鼠标悬停在该元素上时,鼠标指针会呈现出不同的样式。这对于提高用户体验和网页的互动性非常有帮助。以下是一些常见的鼠标样式和用法示例:默认样式:.default{cursor:default;/*......
  • X射线智能检测设备使用寿命是多少?
    X射线智能检测设备使用寿命一般3-8年:在线式的检测设备由于使用频率高、运行时间长,使用寿命相对较短,一般在4年以内;离线式的检测设备视客户的检测需求不同使用寿命有所差异。X射线源作为检测的核心消耗部件,使用寿命相对有限,在线型设备的X射线源使用寿命一般在1-3年。以上内容根......
  • 一个黑客的真实收入到底是多少?鼠标一点,轻轻松松到账一个小目标?
    学‮网习‬络安‮并全‬不需要特‮高别‬端的电脑配置,但‮需是‬要保证一定‮性的‬能和资源。以下是一些‮荐推‬的配置:**1、CPU:**建‮采议‬用IntelCorei5或更高‮处的‬理器,AMDRyzen5等‮可也‬以。**2、内存:**建‮至议‬少8GB的内存,这‮可样‬以快速‮行运‬......
  • 十大X射线检测设备制造商
    添加图片注释,不超过140字(可选)工业X射线检测设备市场预计在预测期内的年均复合增长率为10.3%,到2028年市场规模将达到10.3亿美元。近年来,电子、设备制造、工业制造和汽车行业对工业X射线设备的需求很高。各国也积极参与,以应对成品安全和质量问题,从而支持这一市场的增长。此......
  • 合宙Air201模组LuatOS:点点鼠标就搞定的FOTA远程升级,你知道吗?
     你是不是也经常遇到小伙伴吐槽:开发是个苦差事!做项目倒还好,就怕遇到项目升级,那简直让人头大。。。如果你也有这种困惑,就多了解一下合宙的开发工具,简单实用又高效,甚至只需点点鼠标!本期,我们来学习合宙Air201的实用示例——FOTA远程升级 FOTA远程升级 编辑合宙Air201资产定位模组—......
  • QTreeView代理QStyledItemDelegate实现按钮的鼠标hover移动和点击响应
    1.需求描述QStyledItemDelegate实现按钮的点击和响应功能,鼠标移动到按钮上,也会显示tooltip提示信息2.实现方法(1)重写editorEvent函数,根据type类型触发不同的响应函数为了实现按钮的响应,需要重写QStyledItemDelegate类的editorEvent函数,并根据插入时设置进去的type类型,判断是......
  • Ros2 - Moveit2 - Pick And Place(拾取和放置)
    拾取和放置注意:本教程中使用的功能已弃用。要执行拾取和放置操作,应使用MoveIt任务构造器(MTC)(使用MoveIt任务构造器拾取和放置)。 在MoveIt中,抓取是使用MoveGroup接口完成的。为了抓取一个物体,我们需要创建moveit_msgs::Graspmsg,以便定义抓取操作中涉及的各种姿势和姿......
  • CSS中元素将不再响应鼠标事件(如点击、悬停等)。pointer-events: none;
    按钮点击无效pointer-events:none; 是一种CSS样式规则,用于指定元素在用户与之交互时的行为。当应用了 pointer-events:none; 样式时,元素将不再响应鼠标事件(如点击、悬停等),即使用户点击该元素上的内容,也不会触发任何与该元素相关的事件。主要作用:禁用用户交互:当将 p......
  • 在react中利用three.js 渲染模型 让鼠标拖拽是模型转动
    import{OrbitControls}from'three/examples/jsm/controls/OrbitControls';useEffect(()=>{//初始化OrbitControlsconstcontrols=newOrbitControls(camera,renderer.domElement);//设置控制参数controls.enableDamping=true;//平滑化运动c......