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

[Godot] 3D拾取

CollisionObject3D文档
Camera3D文档

CollisionObject3D有个信号_input_event,可以用于处理3D拾取。
Camera3D也有project_position用于将屏幕空间坐标投影到3D空间。

extends Node3D#是否处于选中状态
var selected : bool = false
#摄像机的前向量
var front : Vector3 = Vector3(0.0, 0.0, -1.0)
#待拾取的对象
@onready var a : CollisionObject3D = $a
#标记,表示在3D物体上的位置
@onready var mark : MeshInstance3D = $markfunc _on_a_mouse_entered() -> void:print("entered")mark.visible = truefunc _on_a_mouse_exited() -> void:print("exited")mark.visible = falsefunc _on_a_input_event(camera: Node, event: InputEvent, position: Vector3, normal: Vector3, shape_idx: int) -> void:var str = \"camera: " + str(camera) + "\n" + \"event: " + str(event) + "\n" + \"position: " + str(position) + "\n" + \"normal: " + str(normal) + "\n" + \"shape_idx: " + str(shape_idx) + "\n" + \"a.position: " + str(a.position)$mark.position = position$label.text = strif event is InputEventMouseButton:if event.button_index == MOUSE_BUTTON_LEFT:if event.pressed:selected = trueelse:selected = falseelif event is InputEventMouseMotion:if selected:var c : Camera3D = camera as Camera3D#由相机指向物体的向量var dir : Vector3 = a.position - c.position#dir投影到front上所得的长度var dis : float = front.dot(dir)#将位置投影到3D空间a.position = c.project_position(event.position, dis)

相关文章:

  • Typora for Mac/Win:让Markdown编辑更高效,创作更自由
  • MFC 截取对话框生成图片、截取整个屏幕(可取黑白反色或者整体图片取反色)
  • postcss安装和使用
  • Java基础【正则表达式】
  • 分类预测 | Matlab实现CNN-BiLSTM-Mutilhead-Attention卷积双向长短期记忆网络多头注意力机制多特征分类预测
  • 【LeetCode热题100】394. 字符串解码(栈)
  • 保障校园网络安全用堡垒机的几个原因分析
  • 武汉星起航:深化跨境电商理解,一站式服务助力合作伙伴稳健发展
  • Spark部署详细教程
  • python基于django的高校迎新系统 flask新生报到系统
  • c++ 堆栈内存、引用和指针 - 学习总结
  • 网络时间同步设备(时间同步系统)操作及应用方案
  • 用静态工厂方法代替构造器
  • 11.子串简写
  • 【行业颠覆者】桔数安康签约首发,开创养老服务新篇章!
  • CentOS 7 修改主机名
  • Git同步原始仓库到Fork仓库中
  • HomeBrew常规使用教程
  • in typeof instanceof ===这些运算符有什么作用
  • laravel5.5 视图共享数据
  • Linux CTF 逆向入门
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • PAT A1120
  • Redux系列x:源码分析
  • Vue.js 移动端适配之 vw 解决方案
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 百度地图API标注+时间轴组件
  • 不上全站https的网站你们就等着被恶心死吧
  • 聊聊flink的BlobWriter
  • 驱动程序原理
  • 转载:[译] 内容加速黑科技趣谈
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ###项目技术发展史
  • #laravel 通过手动安装依赖PHPExcel#
  • #数学建模# 线性规划问题的Matlab求解
  • (二)windows配置JDK环境
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (转载)利用webkit抓取动态网页和链接
  • 、写入Shellcode到注册表上线
  • .NET : 在VS2008中计算代码度量值
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net mvc 获取url中controller和action
  • .NET 中的轻量级线程安全
  • .NET基础篇——反射的奥妙
  • .net知识和学习方法系列(二十一)CLR-枚举
  • //TODO 注释的作用
  • @JsonSerialize注解的使用
  • @RequestMapping 的作用是什么?
  • []我的函数库
  • [AAuto]给百宝箱增加娱乐功能
  • [AIGC 大数据基础]hive浅谈
  • [Angular] 笔记 18:Angular Router
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [C#]C#学习笔记-CIL和动态程序集