Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Geometry3D
Eredita: Object
Fornisce metodi per alcune operazioni geometriche 3D comuni.
Descrizione
Fornisce una serie di funzioni di supporto per creare forme geometriche, calcolare intersezioni tra forme ed elaborare varie altre operazioni geometriche in 3D.
Metodi
Descrizioni dei metodi
Array[Plane] build_box_planes(extents: Vector3) 🔗
Restituisce un array con 6 Plane che descrivono i lati di un riquadro centrato sull'origine. Le dimensioni del riquadro sono definite da extents, che rappresenta un angolo (positivo) del riquadro (ovvero la metà delle sue dimensioni effettive).
Array[Plane] build_capsule_planes(radius: float, height: float, sides: int, lats: int, axis: Axis = 2) 🔗
Restituisce un array di Plane che delimitano da vicino una capsula sfaccettata centrata sull'origine con raggio radius e altezza height. Il parametro sides definisce quanti piani saranno generati per la parte laterale della capsula, mentre lats fornisce il numero di gradini latitudinali nella parte inferiore e superiore della capsula. Il parametro axis descrive l'asse lungo il quale è orientata la capsula (0 per X, 1 per Y, 2 per Z).
Array[Plane] build_cylinder_planes(radius: float, height: float, sides: int, axis: Axis = 2) 🔗
Restituisce un array di Plane che delimitano da vicino un cilindro sfaccettato centrato sull'origine con raggio radius e altezza height. Il parametro sides definisce quanti piani saranno generati per la parte rotonda del cilindro. Il parametro axis descrive l'asse lungo il quale è orientato il cilindro (0 per X, 1 per Y, 2 per Z).
PackedVector3Array clip_polygon(points: PackedVector3Array, plane: Plane) 🔗
Ritaglia il poligono definito dai punti in points rispetto al piano plane e restituisce i punti del poligono ritagliato.
PackedVector3Array compute_convex_mesh_points(planes: Array[Plane]) 🔗
Calcola e restituisce tutti i vertici di una forma convessa definita da un array di piani (planes).
Vector3 get_closest_point_to_segment(point: Vector3, s1: Vector3, s2: Vector3) 🔗
Restituisce il punto 3D sul segmento 3D (s1, s2) che è più vicino a point. Il punto restituito sarà sempre all'interno del segmento specificato.
Vector3 get_closest_point_to_segment_uncapped(point: Vector3, s1: Vector3, s2: Vector3) 🔗
Restituisce il punto 3D sulla linea 3D definita da (s1, s2) che è più vicino a point. Il punto restituito può essere all'interno del segmento (s1, s2) o all'esterno di esso, ovvero da qualche parte sulla linea che si estende dal segmento.
PackedVector3Array get_closest_points_between_segments(p1: Vector3, p2: Vector3, q1: Vector3, q2: Vector3) 🔗
Forniti i due segmenti 3D (p1, q1) e (p2, q2), trova quei due punti sui due segmenti più vicini tra loro. Restituisce un PackedVector3Array che contiene questo punto su (p1, q1) e il punto corrispondente su (p2, q2).
Vector3 get_triangle_barycentric_coords(point: Vector3, a: Vector3, b: Vector3, c: Vector3) 🔗
Restituisce un Vector3 contenente pesi basati su quanto una posizione 3D (point) è vicina ai diversi vertici di un triangolo (a, b e c). Questo è utile per l'interpolazione tra i dati di diversi vertici in un triangolo. Un esempio di caso d'uso di questo metodo è per ruotare in modo fluido su una mesh invece di affidarsi esclusivamente alle normali delle facce.
Ecco una spiegazione più dettagliata delle coordinate baricentriche.
Variant ray_intersects_triangle(from: Vector3, dir: Vector3, a: Vector3, b: Vector3, c: Vector3) 🔗
Verifica se il raggio 3D che inizia da from con la direzione di dir interseca il triangolo specificato da a, b e c. Se sì, restituisce il punto di intersezione come Vector3. Se non si verifica alcuna intersezione, restituisce null.
PackedVector3Array segment_intersects_convex(from: Vector3, to: Vector3, planes: Array[Plane]) 🔗
Dato un hull convesso definito tramite i Plane nell'array planes, verifica se il segmento (from, to) interseca tale hull. Se viene trovata un'intersezione, restituisce un PackedVector3Array contenente il punto di intersezione e la normale dell'hull. Altrimenti, restituisce un array vuoto.
PackedVector3Array segment_intersects_cylinder(from: Vector3, to: Vector3, height: float, radius: float) 🔗
Verifica se il segmento (from, to) interseca il cilindro con altezza height che è centrato nell'origine e ha raggio radius. Se no, restituisce un PackedVector3Array vuoto. Se si verifica un'intersezione, l'array restituito contiene il punto di intersezione e la normale del cilindro nel punto di intersezione.
PackedVector3Array segment_intersects_sphere(from: Vector3, to: Vector3, sphere_position: Vector3, sphere_radius: float) 🔗
Verifica se il segmento (from, to) interseca la sfera che si trova in sphere_position e ha raggio sphere_radius. Se no, restituisce un PackedVector3Array vuoto. Altrimenti, restituisce un PackedVector3Array contenente il punto di intersezione e la normale della sfera nel punto di intersezione.
Variant segment_intersects_triangle(from: Vector3, to: Vector3, a: Vector3, b: Vector3, c: Vector3) 🔗
Verifica se il segmento (from, to) interseca il triangolo a, b, c. Se sì, restituisce il punto di intersezione come Vector3. Se non si verifica alcuna intersezione, restituisce null.
PackedInt32Array tetrahedralize_delaunay(points: PackedVector3Array) 🔗
Tetraedralizza il volume specificato da una serie discreto di punti (points) nello spazio 3D, assicurando che nessun punto si trovi all'interno della circumsfera di alcun tetraedro risultante. Il metodo restituisce un PackedInt32Array in cui ogni tetraedro è costituito da quattro indici di punti consecutivi nell'array points (che risulta in un array con n * 4 elementi, dove n è il numero di tetraedri trovati). Se la tetraedralizzazione non riesce, viene restituito un PackedInt32Array vuoto.