在3D世界中的获取鼠标的位置

news/2024/11/19 18:27:37/
原理

电脑的鼠标是在屏幕的2D坐标上运动的,而我们要获取的是3D世界中的一个三维坐标,在游戏引擎中的实现原理如下:

  1. 先获取鼠标在屏幕上的2D坐标。
  2. 结合摄像机平面计算出这个点在3D世界中的坐标。
  3. 从这个3D坐标沿着摄像机的视角发射一条射线,让这个射线和3D世界中的对象发生碰撞。
  4. 这样,如果发生了碰撞,我们就可以获取最先和射线碰撞的物体以及发生碰撞的点坐标。

在Godot中可以这样实现,把下面的代码放在摄像机上

extends Cameraconst ray_length : int = 1000func _input(event):if event is InputEventMouseButton and event.pressed and event.button_index == BUTTON_LEFT:var from:Vector3 = project_ray_origin(event.position)var to:Vector3 = from + project_ray_normal(event.position) * ray_lengthvar state:PhysicsDirectSpaceState = get_world().direct_space_statevar result:Dictionary  = state.intersect_ray(from,to)if result:get_tree().call_group("LMB_LISTENER","on_LMB_down",result.position)

注意

  • 上文中的state.intersect_ray(from,to)射线需要和CollisionShape或者Area(默认只有CollisionShape)发生碰撞才会有返回值,所以,必须给所有有效区域都加上CollisionShape或者Area
  • 这个实现中使用了Godot非常好用的Group机制,想要接收鼠标位置的观察者们,只需要在_ready中通过add_to_group("LMB_LISTENER")把自己加入到"LMB_LISTENER"组中,然后再实现一下func on_LMB_down(pos : Vector3)方法就可以了

http://www.ppmy.cn/news/404503.html

相关文章

计算机怎么改鼠标标志,电脑鼠标图标怎么改

你们知道怎么更改电脑的鼠标图案吗,下面是学习啦小编带来的关于电脑鼠标图标怎么改的内容,欢迎阅读! 电脑鼠标图标怎么改? 百度搜索“鼠标指针主题包”或“鼠标指针图标下载“类似的语句。 随便戳进一个网站浏览,找到你喜欢的一款主题包&…

经纬度随鼠标在地图上移动随时显示

在GIS开发中,地图上的位置信息是很重要的,很多时候都想随时知道某一点的具体地理位置信息。 下面的代码用来实现当鼠标在地图上移动时随时将经纬度显示在状态栏上。 /1在事件槽中加入事件/ON_EVENT(CSampView, IDC_MAP, DISPID_MOUSEMOVE,OnMouseMoveI…

点击鼠标切换图标,再次点击图标恢复

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>首页</title><link rel"stylesheet" href"../vendors/font-awesome-4.7.0/css/font-awesome.min.css"><script sr…

鼠标经过图标并显示内容

本篇的目的是实现鼠标经过微信图标&#xff0c;显示微信二维码的功能&#xff0c;总结思路和相关知识点。 思路&#xff1a; 使用img标签&#xff0c;并使用一个href为空的a标签作为img标签的父元素。父元素使用相对定位&#xff0c;img标签为子元素是绝对定位&#xff0c;z轴…

构建全真互联数字地图底座 腾讯地图产业版WeMap重磅升级

前言&#xff1a;伴随着地理信息产业的不断演进&#xff0c;以及LBS、大数据、5G、云、AI等新技术的持续应用&#xff0c;数实融合发展呈现出加速态势&#xff0c;数字地图也从移动互联网时代向产业互联网时代进化。 WeMap腾讯地图产业版重磅升级&#xff01; 12月1日&#xff…

vue-汉字转拼音

目录 插件文档 下载插件 参数 optiions使用 使用 插件文档 GitHub - waterchestnut/pinyin: 把汉字转化为拼音字母&#xff0c;由chinalu/JSPinyin改写&#xff0c;使用新语法并去掉mootools的依赖 下载插件 npm install js-pinyin 参数 optiions使用 pinyin.setOpti…

开战在即!与全球伙伴一起打造你的数据应用,TiDB Future App Hackathon 2023 来啦!

2023 TiDB Future App Hackathon 来啦&#xff01;本届 Hackathon 的主题为&#xff1a;Code, Innovate & Build Amazing Data Applications —— 释放你的创造力、构建突破性的应用、在全球范围内寻找你的队友、体验最新最 in 的 Serverless 技术&#xff0c;更有 总计 $3…