[Godot] 3D拾取

CollisionObject3D文档
Camera3D文档

CollisionObject3D有个信号_input_event,可以用于处理3D拾取。

Camera3D也有project_position用于将屏幕空间坐标投影到3D空间。

gdscript 复制代码
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 = $mark

func _on_a_mouse_entered() -> void:
	print("entered")
	mark.visible = true

func _on_a_mouse_exited() -> void:
	print("exited")
	mark.visible = false

func _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 = str
	
	if event is InputEventMouseButton:
		if event.button_index == MOUSE_BUTTON_LEFT:
			if event.pressed:
				selected = true
			else:
				selected = false
	
	elif 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)
相关推荐
云飞云共享云桌面16 分钟前
非标自动化设备工厂如何2台服务器带动20个SolidWorks设计
运维·服务器·人工智能·3d·自动化·制造
Yyq130208696821 小时前
KTH5701 系列低功耗、高精度 3D 霍尔传感器,农业灌溉,旋钮 & 摇杆,线性位置检测,3D位置角度检测, 非接触磁场测量,低功耗磁编
3d·小杨杨13020869682
向量引擎小橙1 小时前
万字硬核:从 3D VAE 到 DiT,深度解构 AI 视频生成的“时空建模”之殇与工程化突围
人工智能·3d·音视频
feasibility.13 小时前
混元3D-dit-v2-mv-turbo生成3D模型初体验(ComfyUI)
人工智能·3d·aigc·三维建模·comfyui
地球资源数据云21 小时前
从 DEM 到 3D 渲染:R 语言 rayshader 地形可视化全指南
3d·数据分析·r语言
换日线°21 小时前
前端3D炫酷展开效果
前端·3d
Funny_AI_LAB1 天前
RAD基准重新定义多视角异常检测,传统2D方法为何战胜前沿3D与VLM?
人工智能·目标检测·3d·ai
新启航光学频率梳1 天前
储能电池极柱深孔孔深光学3D轮廓测量-激光频率梳3D轮廓技术
科技·3d·制造
军军君012 天前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three
CG_MAGIC2 天前
Substance Painter 高效出图:贴图导出与后期优化技巧
3d·贴图·maya·substance painter·渲云渲染·3d软件