extends Node3D @export var sub_viewport: SubViewport @onready var quad_cartello = $%QuadSign @onready var coll_shape = $%CollisionShape3D func _ready() -> void: sub_viewport.transparent_bg = true var mat = StandardMaterial3D.new() mat.albedo_texture = sub_viewport.get_texture() mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA #fix color #sub_viewport.use_hdr_2d = false #mat.albedo_texture_force_srgb = true #mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED #mat.albedo_color = Color(0.85, 0.85, 0.85, 1.0) quad_cartello.material_override = mat coll_shape.shape.size = Vector3(2.0, 2.0, 2.0) coll_shape.position.z = 0.0 func _on_area_3d_input_event(camera: Node, event: InputEvent, event_position: Vector3, normal: Vector3, shape_idx: int) -> void: if event is InputEventMouse: var local_cam = quad_cartello.to_local(camera.global_position) var local_hit = quad_cartello.to_local(event_position) var ray_dir = (local_hit - local_cam).normalized() if abs(ray_dir.z) < 0.0001: return var t = -local_cam.z / ray_dir.z var exact_pos = local_cam + ray_dir * t var uv_x = exact_pos.x + 0.5 var uv_y = 0.5 - exact_pos.y if uv_x < 0 or uv_x > 1 or uv_y < 0 or uv_y > 1: return var viewport_pos = Vector2(uv_x * sub_viewport.size.x, uv_y * sub_viewport.size.y) var ev2d = event.duplicate() ev2d.position = viewport_pos ev2d.global_position = viewport_pos sub_viewport.push_input(ev2d)