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
Наследует: Object
Предоставляет методы для некоторых распространенных трехмерных геометрических операций.
Описание
Предоставляет набор вспомогательных функций для создания геометрических фигур, вычисления пересечений между фигурами и обработки различных других геометрических операций в 3D.
Методы
Описания метода
Array[Plane] build_box_planes(extents: Vector3) 🔗
Возвращает массив с 6 Plane, которые описывают стороны коробки с центром в начале координат. Размер коробки определяется extends, который представляет один (положительный) угол коробки (т. е. половину ее фактического размера).
Array[Plane] build_capsule_planes(radius: float, height: float, sides: int, lats: int, axis: Axis = 2) 🔗
Возвращает массив Plane, тесно ограничивающих граненую капсулу с центром в начале координат с радиусом radius и высотой height. Параметр sides определяет, сколько плоскостей будет сгенерировано для боковой части капсулы, тогда как lats задает количество широтных шагов внизу и вверху капсулы. Параметр axis описывает ось, вдоль которой ориентирована капсула (0 для X, 1 для Y, 2 для Z).
Array[Plane] build_cylinder_planes(radius: float, height: float, sides: int, axis: Axis = 2) 🔗
Возвращает массив Plane, тесно ограничивающих граненый цилиндр с центром в начале координат с радиусом radius и высотой height. Параметр sides определяет, сколько плоскостей будет создано для круглой части цилиндра. Параметр axis описывает ось, вдоль которой ориентирован цилиндр (0 для X, 1 для Y, 2 для Z).
PackedVector3Array clip_polygon(points: PackedVector3Array, plane: Plane) 🔗
Обрезает многоугольник, определенный точками в points, относительно plane и возвращает точки обрезанного многоугольника.
PackedVector3Array compute_convex_mesh_points(planes: Array[Plane]) 🔗
Вычисляет и возвращает все вершинные точки выпуклой фигуры, заданной массивом planes.
Vector3 get_closest_point_to_segment(point: Vector3, s1: Vector3, s2: Vector3) 🔗
Возвращает 3D-точку на 3D-сегменте (s1, s2), которая находится ближе всего к point. Возвращаемая точка всегда будет находиться внутри указанного сегмента.
Vector3 get_closest_point_to_segment_uncapped(point: Vector3, s1: Vector3, s2: Vector3) 🔗
Возвращает 3D-точку на 3D-линии, определенной (s1, s2), которая находится ближе всего к point. Возвращаемая точка может находиться внутри сегмента (s1, s2) или за его пределами, т. е. где-то на линии, выходящей из сегмента.
PackedVector3Array get_closest_points_between_segments(p1: Vector3, p2: Vector3, q1: Vector3, q2: Vector3) 🔗
Учитывая два 3D-сегмента (p1, p2) и (q1, q2), находит те две точки на двух сегментах, которые находятся ближе всего друг к другу. Возвращает PackedVector3Array, который содержит эту точку на (p1, p2), а также сопутствующую точку на (q1, q2).
Vector3 get_triangle_barycentric_coords(point: Vector3, a: Vector3, b: Vector3, c: Vector3) 🔗
Возвращает Vector3, содержащий веса, основанные на том, насколько близко 3D-позиция (point) находится к различным вершинам треугольника (a, b и c). Это полезно для интерполяции между данными различных вершин в треугольнике. Одним из примеров использования является использование этого для плавного вращения по сетке вместо того, чтобы полагаться исключительно на нормали граней.
Вот более подробное объяснение барицентрических координат.
Variant ray_intersects_triangle(from: Vector3, dir: Vector3, a: Vector3, b: Vector3, c: Vector3) 🔗
Проверяет, пересекает ли 3D-луч, начинающийся в from с направлением dir, с треугольником, заданным a, b и c. Если да, возвращает точку пересечения как Vector3. Если пересечения не происходит, возвращает null.
PackedVector3Array segment_intersects_convex(from: Vector3, to: Vector3, planes: Array[Plane]) 🔗
Учитывая выпуклую оболочку, определенную через Plane-ы в массиве planes, проверяет, пересекается ли сегмент (from, to) с этой оболочкой. Если пересечение найдено, возвращает PackedVector3Array, содержащий точку пересечения и нормаль оболочки. В противном случае возвращает пустой массив.
PackedVector3Array segment_intersects_cylinder(from: Vector3, to: Vector3, height: float, radius: float) 🔗
Проверяет, пересекает ли сегмент (from, to) цилиндр с высотой height, центрированный в начале координат и имеющий радиус radius. Если нет, возвращает пустой PackedVector3Array. Если пересечение имеет место, возвращаемый массив содержит точку пересечения и нормаль цилиндра в точке пересечения.
PackedVector3Array segment_intersects_sphere(from: Vector3, to: Vector3, sphere_position: Vector3, sphere_radius: float) 🔗
Проверяет, пересекает ли сегмент (from, to) сферу, расположенную в spheric_position и имеющую радиус spheric_radius. Если нет, возвращает пустой PackedVector3Array. Если да, возвращает PackedVector3Array, содержащий точку пересечения и нормаль сферы в точке пересечения.
Variant segment_intersects_triangle(from: Vector3, to: Vector3, a: Vector3, b: Vector3, c: Vector3) 🔗
Проверяет, пересекает ли сегмент (from, to) треугольник a, b, c. Если да, возвращает точку пересечения как Vector3. Если пересечения не происходит, возвращает null.
PackedInt32Array tetrahedralize_delaunay(points: PackedVector3Array) 🔗
Тетраэдрализует объем, заданный дискретным набором points в трехмерном пространстве, гарантируя, что ни одна точка не лежит внутри описанной сферы любого полученного тетраэдра. Метод возвращает PackedInt32Array, где каждый тетраэдр состоит из четырех последовательных индексов точек в массиве points (что приводит к массиву с n * 4 элементами, где n — количество найденных тетраэдров). Если тетраэдрализация не удалась, возвращается пустой PackedInt32Array.