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

Успадковує: Object

Забезпечує методи для деяких поширених геометричних операцій 3D.

Опис

Забезпечує набір допоміжних функцій для створення геометричних форм, складних перехрестя між формами та процесом різних інших геометричних операцій в 3D.

Методи

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)


Описи методів

Array[Plane] build_box_planes(extents: Vector3) 🔗

Повертає масив із 6 площинами Plane, що описують сторони прямокутника з центром у початку координат. Розмір блоку визначається параметром extents, який представляє один (додатний) кут блоку (тобто половину його фактичного розміру).


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). Це корисно для міжпокриття даних різних вершин трикутника. Один приклад використовується чохол, щоб плавно обертати сіточку замість перекриття підошви на поверхні обличчя.

` Детальне пояснення барицентричних координат <https://en.wikipedia.org/wiki/Barycentric_coкоординат_system>`__


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

Тести, якщо промен 3D від dir з напрямком dir перетинає трикутник, вказаний a, b і c. Якщо так, повертає точку перетину як Vector3. Якщо не відбувається перетин, повертає null.


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

З огляду на конвекційний корпус, визначений хоча Plane в масиві параметрові площини, тести, якщо сегмент (з, to) intersects з цим корпусом. Якщо виявлений перетин, повертає 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) сферу, розташовану в точці sphere_position, та чи має радіус sphere_radius. Якщо ні, повертає порожній PackedVector3Array. Якщо так, повертає PackedVector3Array, що містить точку перетину та нормаль сфери в точці перетину.


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

Тести, якщо сегмент (з, to) перетинає трикутник a, b, c. Якщо так, повертає точку перетину як Vector3. Якщо не відбувається перехрестя, повертає null.


PackedInt32Array tetrahedralize_delaunay(points: PackedVector3Array) 🔗

Тетраедризує об'єм, заданий дискретним набором точок параметрів у 3D-просторі, гарантуючи, що жодна точка не лежить в межах сфери, описаної навколо будь-якого результуючого тетраедра. Метод повертає PackedInt32Array, де кожен тетраедр складається з чотирьох послідовних точкових індексів у масиві points (в результаті отримується масив з елементами n * 4, де n – кількість знайдених тетраедрів). Якщо тетраедралізація невдала, повертається порожній PackedInt32Array.