当前位置: 首页 > 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.子串简写
  • 【行业颠覆者】桔数安康签约首发,开创养老服务新篇章!
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • ECMAScript6(0):ES6简明参考手册
  • golang 发送GET和POST示例
  • Java IO学习笔记一
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • js作用域和this的理解
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Nodejs和JavaWeb协助开发
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • SpringBoot几种定时任务的实现方式
  • 阿里云购买磁盘后挂载
  • 从零搭建Koa2 Server
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 老板让我十分钟上手nx-admin
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • #pragam once 和 #ifndef 预编译头
  • #每日一题合集#牛客JZ23-JZ33
  • $.each()与$(selector).each()
  • ( 10 )MySQL中的外键
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (70min)字节暑假实习二面(已挂)
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C语言)二分查找 超详细
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (四)Controller接口控制器详解(三)
  • (学习日记)2024.01.19
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)为C# Windows服务添加安装程序
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net6Api后台+uniapp导出Excel
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @synthesize和@dynamic分别有什么作用?
  • [1] 平面(Plane)图形的生成算法
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [AutoSar NVM] 存储架构
  • [hive] posexplode函数