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.

Geometry3D

Hérite de : Object

Fournit des méthodes pour certaines opérations géométriques 3D communes.

Description

Fournit un ensemble de fonctions d'aide pour créer des formes géométriques, calculer des intersections entre des formes, et traiter différentes autres opérations géométriques en 3D.

Méthodes

Array[Plane]

build_box_planes(extents: Vector3)

Array[Plane]

build_capsule_planes(radius: float, height: float, sides: int, lats: int, axis: Axis = 2)

Array[Plane]

build_cylinder_planes(radius: float, height: float, sides: int, axis: Axis = 2)

PackedVector3Array

clip_polygon(points: PackedVector3Array, plane: Plane)

PackedVector3Array

compute_convex_mesh_points(planes: Array[Plane])

Vector3

get_closest_point_to_segment(point: Vector3, s1: Vector3, s2: Vector3)

Vector3

get_closest_point_to_segment_uncapped(point: Vector3, s1: Vector3, s2: Vector3)

PackedVector3Array

get_closest_points_between_segments(p1: Vector3, p2: Vector3, q1: Vector3, q2: Vector3)

Vector3

get_triangle_barycentric_coords(point: Vector3, a: Vector3, b: Vector3, c: Vector3)

Variant

ray_intersects_triangle(from: Vector3, dir: Vector3, a: Vector3, b: Vector3, c: Vector3)

PackedVector3Array

segment_intersects_convex(from: Vector3, to: Vector3, planes: Array[Plane])

PackedVector3Array

segment_intersects_cylinder(from: Vector3, to: Vector3, height: float, radius: float)

PackedVector3Array

segment_intersects_sphere(from: Vector3, to: Vector3, sphere_position: Vector3, sphere_radius: float)

Variant

segment_intersects_triangle(from: Vector3, to: Vector3, a: Vector3, b: Vector3, c: Vector3)

PackedInt32Array

tetrahedralize_delaunay(points: PackedVector3Array)


Descriptions des méthodes

Array[Plane] build_box_planes(extents: Vector3) 🔗

Renvoie un tableau avec 6 Planes qui décrivent les côtés d'une boîte centrée sur l'origine. La taille de la boîte est définie par ses limites extents, qui représente un coin (positif) de la boîte (c.-à-d. la moitié de sa taille réelle).


Array[Plane] build_capsule_planes(radius: float, height: float, sides: int, lats: int, axis: Axis = 2) 🔗

Renvoie un tableau de Planes qui en-cloisonne le plus proche possible une capsule à facettes centrée à l'origine avec un rayon radius et une hauteur height. Le paramètre sides définit combien de plans seront générés pour la partie latérale de la capsule, alors que lats donne le nombre de pas latitudinaux en bas et en haut de la capsule. Le paramètre axis décrit l'axe le long duquel la capsule est orientée (0 pour X, 1 pour Y, 2 pour Z).


Array[Plane] build_cylinder_planes(radius: float, height: float, sides: int, axis: Axis = 2) 🔗

Renvoie un tableau de Planes qui en-cloisonne le plus proche possible un cylindre à facettes centré à l'origine avec un rayon radius et une hauteur height. Le paramètre sides définit combien de plans seront générés pour la partie ronde du cylindre. Le paramètre axis décrit l'axe le long duquel le cylindre est orienté (0 pour X, 1 pour Y, 2 pour Z).


PackedVector3Array clip_polygon(points: PackedVector3Array, plane: Plane) 🔗

Coupe le polygone défini par les points dans points par le plane et renvoie les points du polygone coupé.


PackedVector3Array compute_convex_mesh_points(planes: Array[Plane]) 🔗

Calcule et renvoie tous les points des sommets d'une forme convexe définie par un tableau de plans planes.


Vector3 get_closest_point_to_segment(point: Vector3, s1: Vector3, s2: Vector3) 🔗

Renvoie le point 3D sur le segment 3D (s1, s2) qui est le plus proche du point point. Le point renvoyé sera toujours à l'intérieur du segment spécifié.


Vector3 get_closest_point_to_segment_uncapped(point: Vector3, s1: Vector3, s2: Vector3) 🔗

Renvoie le point 3D sur la ligne 3D définie par (s1, s2) qui est le plus proche du point point. Le point renvoyé peut être à l'intérieur du segment (s1, s2) ou à l'extérieur, c'est-à-dire quelque part sur la ligne s'étendant du segment.


PackedVector3Array get_closest_points_between_segments(p1: Vector3, p2: Vector3, q1: Vector3, q2: Vector3) 🔗

À partir des deux segments 3D (p1, q1) et (p2, q2), trouve les deux points sur les deux segments qui sont les plus proches l'un de l'autre. Renvoie un PackedVector3Array qui contient un point sur (p1, q1) et le point sur (p2, q2).


Vector3 get_triangle_barycentric_coords(point: Vector3, a: Vector3, b: Vector3, c: Vector3) 🔗

Renvoie un Vector3 contenant des poids basés sur la proximité d'une position 3D (point) vers les différents sommets d'un triangle (a, b et c). Ceci est utile pour interpoler entre les données de différents sommets dans un triangle. Un exemple de cas d'utilisation est d'utiliser cela pour tourner en douceur un maillage au lieu de se fier uniquement aux normales des faces.

Voici une explication plus détaillée des coordonnées barycentriques.


Variant ray_intersects_triangle(from: Vector3, dir: Vector3, a: Vector3, b: Vector3, c: Vector3) 🔗

Teste si le rayon 3D commençant à from avec la direction de dir intersecte le triangle spécifié par a, b et c. Si oui, renvoie le point d'intersection en tant que Vector3. Si aucune intersection n'a lieu, renvoie null.


PackedVector3Array segment_intersects_convex(from: Vector3, to: Vector3, planes: Array[Plane]) 🔗

Étant donné une enveloppe convexe définie par les Planes dans le tableau planes, teste si le segment (from, to) intersecte cette enveloppe. Si une intersection est trouvée, renvoie un PackedVector3Array contenant le point d'intersection et la normale à l'enveloppe. Sinon, renvoie un tableau vide.


PackedVector3Array segment_intersects_cylinder(from: Vector3, to: Vector3, height: float, radius: float) 🔗

Vérifie si le segment (de from à to) intersecte le cylindre avec une hauteur height qui est centré à l'origine et a un rayon radius. Si non, renvoie un PackedVector3Array vide. S'il y a une intersection, le tableau renvoie contient le point d'intersection et la normale du cylindre au point d'intersection.


PackedVector3Array segment_intersects_sphere(from: Vector3, to: Vector3, sphere_position: Vector3, sphere_radius: float) 🔗

Vérifie si le segment (de from à to) intersecte la sphère à la position sphere_position et avec un rayon sphere_radius. Si non, renvoie un PackedVector3Array vide. Si oui, renvoie un PackedVector3Array contenant le point d'intersection la normale de la sphère au point d'intersection.


Variant segment_intersects_triangle(from: Vector3, to: Vector3, a: Vector3, b: Vector3, c: Vector3) 🔗

Teste si le segment (from, to) intersecte le triangle a, b, c. Si oui, renvoie le point d'intersection en tant que Vector3. Si aucune intersection n'a lieu, renvoie null.


PackedInt32Array tetrahedralize_delaunay(points: PackedVector3Array) 🔗

Tétraédrise le volume spécifié par un ensemble discret de points dans l'espace 3D, de sorte qu'aucun point ne soit dans la sphère circonscrite d'au moins un tétraèdre résultant. Cette méthode renvoie un PackedInt32Array où chaque tétraèdre se compose de quatre indices de point consécutifs dans le tableau points (le tableau renvoyé aura n * 4 éléments, où n est le nombre de tétraèdres trouvés). Si la tétraédrisation n'a pas réussi, un PackedInt32Array vide sera renvoyé.