Files
godot-docs-l10n/classes/uk/class_geometry3d.rst

255 lines
25 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:github_url: hide
.. _class_Geometry3D:
Geometry3D
==========
**Успадковує:** :ref:`Object<class_Object>`
Забезпечує методи для деяких поширених геометричних операцій 3D.
.. rst-class:: classref-introduction-group
Опис
--------
Забезпечує набір допоміжних функцій для створення геометричних форм, складних перехрестя між формами та процесом різних інших геометричних операцій в 3D.
.. rst-class:: classref-reftable-group
Методи
------------
.. table::
:widths: auto
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\] | :ref:`build_box_planes<class_Geometry3D_method_build_box_planes>`\ (\ extents\: :ref:`Vector3<class_Vector3>`\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\] | :ref:`build_capsule_planes<class_Geometry3D_method_build_capsule_planes>`\ (\ radius\: :ref:`float<class_float>`, height\: :ref:`float<class_float>`, sides\: :ref:`int<class_int>`, lats\: :ref:`int<class_int>`, axis\: :ref:`Axis<enum_Vector3_Axis>` = 2\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\] | :ref:`build_cylinder_planes<class_Geometry3D_method_build_cylinder_planes>`\ (\ radius\: :ref:`float<class_float>`, height\: :ref:`float<class_float>`, sides\: :ref:`int<class_int>`, axis\: :ref:`Axis<enum_Vector3_Axis>` = 2\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedVector3Array<class_PackedVector3Array>` | :ref:`clip_polygon<class_Geometry3D_method_clip_polygon>`\ (\ points\: :ref:`PackedVector3Array<class_PackedVector3Array>`, plane\: :ref:`Plane<class_Plane>`\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedVector3Array<class_PackedVector3Array>` | :ref:`compute_convex_mesh_points<class_Geometry3D_method_compute_convex_mesh_points>`\ (\ planes\: :ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\]\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Vector3<class_Vector3>` | :ref:`get_closest_point_to_segment<class_Geometry3D_method_get_closest_point_to_segment>`\ (\ point\: :ref:`Vector3<class_Vector3>`, s1\: :ref:`Vector3<class_Vector3>`, s2\: :ref:`Vector3<class_Vector3>`\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Vector3<class_Vector3>` | :ref:`get_closest_point_to_segment_uncapped<class_Geometry3D_method_get_closest_point_to_segment_uncapped>`\ (\ point\: :ref:`Vector3<class_Vector3>`, s1\: :ref:`Vector3<class_Vector3>`, s2\: :ref:`Vector3<class_Vector3>`\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedVector3Array<class_PackedVector3Array>` | :ref:`get_closest_points_between_segments<class_Geometry3D_method_get_closest_points_between_segments>`\ (\ p1\: :ref:`Vector3<class_Vector3>`, p2\: :ref:`Vector3<class_Vector3>`, q1\: :ref:`Vector3<class_Vector3>`, q2\: :ref:`Vector3<class_Vector3>`\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Vector3<class_Vector3>` | :ref:`get_triangle_barycentric_coords<class_Geometry3D_method_get_triangle_barycentric_coords>`\ (\ point\: :ref:`Vector3<class_Vector3>`, a\: :ref:`Vector3<class_Vector3>`, b\: :ref:`Vector3<class_Vector3>`, c\: :ref:`Vector3<class_Vector3>`\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Variant<class_Variant>` | :ref:`ray_intersects_triangle<class_Geometry3D_method_ray_intersects_triangle>`\ (\ from\: :ref:`Vector3<class_Vector3>`, dir\: :ref:`Vector3<class_Vector3>`, a\: :ref:`Vector3<class_Vector3>`, b\: :ref:`Vector3<class_Vector3>`, c\: :ref:`Vector3<class_Vector3>`\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedVector3Array<class_PackedVector3Array>` | :ref:`segment_intersects_convex<class_Geometry3D_method_segment_intersects_convex>`\ (\ from\: :ref:`Vector3<class_Vector3>`, to\: :ref:`Vector3<class_Vector3>`, planes\: :ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\]\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedVector3Array<class_PackedVector3Array>` | :ref:`segment_intersects_cylinder<class_Geometry3D_method_segment_intersects_cylinder>`\ (\ from\: :ref:`Vector3<class_Vector3>`, to\: :ref:`Vector3<class_Vector3>`, height\: :ref:`float<class_float>`, radius\: :ref:`float<class_float>`\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedVector3Array<class_PackedVector3Array>` | :ref:`segment_intersects_sphere<class_Geometry3D_method_segment_intersects_sphere>`\ (\ from\: :ref:`Vector3<class_Vector3>`, to\: :ref:`Vector3<class_Vector3>`, sphere_position\: :ref:`Vector3<class_Vector3>`, sphere_radius\: :ref:`float<class_float>`\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Variant<class_Variant>` | :ref:`segment_intersects_triangle<class_Geometry3D_method_segment_intersects_triangle>`\ (\ from\: :ref:`Vector3<class_Vector3>`, to\: :ref:`Vector3<class_Vector3>`, a\: :ref:`Vector3<class_Vector3>`, b\: :ref:`Vector3<class_Vector3>`, c\: :ref:`Vector3<class_Vector3>`\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedInt32Array<class_PackedInt32Array>` | :ref:`tetrahedralize_delaunay<class_Geometry3D_method_tetrahedralize_delaunay>`\ (\ points\: :ref:`PackedVector3Array<class_PackedVector3Array>`\ ) |
+--------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
Описи методів
--------------------------
.. _class_Geometry3D_method_build_box_planes:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\] **build_box_planes**\ (\ extents\: :ref:`Vector3<class_Vector3>`\ ) :ref:`🔗<class_Geometry3D_method_build_box_planes>`
Повертає масив із 6 площинами :ref:`Plane<class_Plane>`, що описують сторони прямокутника з центром у початку координат. Розмір блоку визначається параметром ``extents``, який представляє один (додатний) кут блоку (тобто половину його фактичного розміру).
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_build_capsule_planes:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\] **build_capsule_planes**\ (\ radius\: :ref:`float<class_float>`, height\: :ref:`float<class_float>`, sides\: :ref:`int<class_int>`, lats\: :ref:`int<class_int>`, axis\: :ref:`Axis<enum_Vector3_Axis>` = 2\ ) :ref:`🔗<class_Geometry3D_method_build_capsule_planes>`
Повертає масив :ref:`Plane<class_Plane>`, тісно пов'язану капсулою, розташованої на поході з радіусом ``radius`` і висотою ``height``. Параметри ``sides`` визначає, як будуть створюватися багато площин для бічної частини капсули, в той час як ``lats`` дає кількість випрямлених кроків внизу і верхньої частини капсули. Текст ``axis`` описує вісь, по якій капсула орієнтована (0 для X, 1 для Y, 2 для Z).
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_build_cylinder_planes:
.. rst-class:: classref-method
:ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\] **build_cylinder_planes**\ (\ radius\: :ref:`float<class_float>`, height\: :ref:`float<class_float>`, sides\: :ref:`int<class_int>`, axis\: :ref:`Axis<enum_Vector3_Axis>` = 2\ ) :ref:`🔗<class_Geometry3D_method_build_cylinder_planes>`
Повертає масив :ref:`Plane<class_Plane>`, тісно пов'язаний з циліндром, розташованим на виході з радіусом ``radius`` і висотою ``height``. Для круглої частини циліндра буде створено параметр ``sides``. Текст ``axis`` описує вісь, по якій циліндр орієнтований (0 для X, 1 для Y, 2 для Z).
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_clip_polygon:
.. rst-class:: classref-method
:ref:`PackedVector3Array<class_PackedVector3Array>` **clip_polygon**\ (\ points\: :ref:`PackedVector3Array<class_PackedVector3Array>`, plane\: :ref:`Plane<class_Plane>`\ ) :ref:`🔗<class_Geometry3D_method_clip_polygon>`
Обрізає багатокутник, визначений точками в ``points``, відносно ``plane`` та повертає точки обрізаного багатокутника.
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_compute_convex_mesh_points:
.. rst-class:: classref-method
:ref:`PackedVector3Array<class_PackedVector3Array>` **compute_convex_mesh_points**\ (\ planes\: :ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\]\ ) :ref:`🔗<class_Geometry3D_method_compute_convex_mesh_points>`
Обчислює та повертає всі вершинні точки опуклої фігури, визначеної масивом ``planes``.
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_get_closest_point_to_segment:
.. rst-class:: classref-method
:ref:`Vector3<class_Vector3>` **get_closest_point_to_segment**\ (\ point\: :ref:`Vector3<class_Vector3>`, s1\: :ref:`Vector3<class_Vector3>`, s2\: :ref:`Vector3<class_Vector3>`\ ) :ref:`🔗<class_Geometry3D_method_get_closest_point_to_segment>`
Повертаємо точку 3D на сегмент 3D (``s1``, ``s2``), який найближчий до ``point``. Повернутий пункт завжди буде всередині зазначеного сегмента.
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_get_closest_point_to_segment_uncapped:
.. rst-class:: classref-method
:ref:`Vector3<class_Vector3>` **get_closest_point_to_segment_uncapped**\ (\ point\: :ref:`Vector3<class_Vector3>`, s1\: :ref:`Vector3<class_Vector3>`, s2\: :ref:`Vector3<class_Vector3>`\ ) :ref:`🔗<class_Geometry3D_method_get_closest_point_to_segment_uncapped>`
Повертає точку 3D на лінію 3D, визначену (``s1``, ``s2``), що найближче до ``point``. Повернутий пункт може бути всередині сегмента (``s1``, ``s2``) або зовні нього, тобто десь на лінії, що поширюється від сегмента.
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_get_closest_points_between_segments:
.. rst-class:: classref-method
:ref:`PackedVector3Array<class_PackedVector3Array>` **get_closest_points_between_segments**\ (\ p1\: :ref:`Vector3<class_Vector3>`, p2\: :ref:`Vector3<class_Vector3>`, q1\: :ref:`Vector3<class_Vector3>`, q2\: :ref:`Vector3<class_Vector3>`\ ) :ref:`🔗<class_Geometry3D_method_get_closest_points_between_segments>`
З огляду на два сегменти 3D (``p1``, ``p2``) і (``q1``, ``q2``), знаходить дві точки на два сегменти, які близькі один одному. Повернутися до :ref:`PackedVector3Array<class_PackedVector3Array>`, який містить цю точку на ``p1``, ``p2``, а також точка супроводження (``q1``, ``q2``).
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_get_triangle_barycentric_coords:
.. rst-class:: classref-method
:ref:`Vector3<class_Vector3>` **get_triangle_barycentric_coords**\ (\ point\: :ref:`Vector3<class_Vector3>`, a\: :ref:`Vector3<class_Vector3>`, b\: :ref:`Vector3<class_Vector3>`, c\: :ref:`Vector3<class_Vector3>`\ ) :ref:`🔗<class_Geometry3D_method_get_triangle_barycentric_coords>`
Повернення :ref:`Vector3<class_Vector3>`, що містить вагу на основі того, як закрити позицію 3D (``point``) до різних вершин трикутника (``a``, ``b`` і ``c``). Це корисно для міжпокриття даних різних вершин трикутника. Один приклад використовується чохол, щоб плавно обертати сіточку замість перекриття підошви на поверхні обличчя.
\ ` Детальне пояснення барицентричних координат <https://en.wikipedia.org/wiki/Barycentric_coкоординат_system>`__
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_ray_intersects_triangle:
.. rst-class:: classref-method
:ref:`Variant<class_Variant>` **ray_intersects_triangle**\ (\ from\: :ref:`Vector3<class_Vector3>`, dir\: :ref:`Vector3<class_Vector3>`, a\: :ref:`Vector3<class_Vector3>`, b\: :ref:`Vector3<class_Vector3>`, c\: :ref:`Vector3<class_Vector3>`\ ) :ref:`🔗<class_Geometry3D_method_ray_intersects_triangle>`
Тести, якщо промен 3D від ``dir`` з напрямком ``dir`` перетинає трикутник, вказаний ``a``, ``b`` і ``c``. Якщо так, повертає точку перетину як :ref:`Vector3<class_Vector3>`. Якщо не відбувається перетин, повертає ``null``.
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_segment_intersects_convex:
.. rst-class:: classref-method
:ref:`PackedVector3Array<class_PackedVector3Array>` **segment_intersects_convex**\ (\ from\: :ref:`Vector3<class_Vector3>`, to\: :ref:`Vector3<class_Vector3>`, planes\: :ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\]\ ) :ref:`🔗<class_Geometry3D_method_segment_intersects_convex>`
З огляду на конвекційний корпус, визначений хоча :ref:`Plane<class_Plane>` в масиві ``параметрові площини``, тести, якщо сегмент (``з``, ``to``) intersects з цим корпусом. Якщо виявлений перетин, повертає :ref:`PackedVector3Array<class_PackedVector3Array>`, що містить точку перетину і нормалу корпусу. В іншому випадку повертає порожній масив.
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_segment_intersects_cylinder:
.. rst-class:: classref-method
:ref:`PackedVector3Array<class_PackedVector3Array>` **segment_intersects_cylinder**\ (\ from\: :ref:`Vector3<class_Vector3>`, to\: :ref:`Vector3<class_Vector3>`, height\: :ref:`float<class_float>`, radius\: :ref:`float<class_float>`\ ) :ref:`🔗<class_Geometry3D_method_segment_intersects_cylinder>`
Перевіряє, якщо відрізок (``from``, ``to``) перетинає циліндр з висотою ``height``, який знаходиться на місці і має радіус ``radius``. Якщо ні, повертає порожній :ref:`PackedVector3Array<class_PackedVector3Array>`. Якщо відбувається перехрестя, повернутий масив містить точку перетину і нормаль циліндра на місці перетину.
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_segment_intersects_sphere:
.. rst-class:: classref-method
:ref:`PackedVector3Array<class_PackedVector3Array>` **segment_intersects_sphere**\ (\ from\: :ref:`Vector3<class_Vector3>`, to\: :ref:`Vector3<class_Vector3>`, sphere_position\: :ref:`Vector3<class_Vector3>`, sphere_radius\: :ref:`float<class_float>`\ ) :ref:`🔗<class_Geometry3D_method_segment_intersects_sphere>`
Перевіряє, чи перетинає відрізок (``from``, ``to``) сферу, розташовану в точці ``sphere_position``, та чи має радіус ``sphere_radius``. Якщо ні, повертає порожній :ref:`PackedVector3Array<class_PackedVector3Array>`. Якщо так, повертає :ref:`PackedVector3Array<class_PackedVector3Array>`, що містить точку перетину та нормаль сфери в точці перетину.
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_segment_intersects_triangle:
.. rst-class:: classref-method
:ref:`Variant<class_Variant>` **segment_intersects_triangle**\ (\ from\: :ref:`Vector3<class_Vector3>`, to\: :ref:`Vector3<class_Vector3>`, a\: :ref:`Vector3<class_Vector3>`, b\: :ref:`Vector3<class_Vector3>`, c\: :ref:`Vector3<class_Vector3>`\ ) :ref:`🔗<class_Geometry3D_method_segment_intersects_triangle>`
Тести, якщо сегмент (``з``, ``to``) перетинає трикутник ``a``, ``b``, ``c``. Якщо так, повертає точку перетину як :ref:`Vector3<class_Vector3>`. Якщо не відбувається перехрестя, повертає ``null``.
.. rst-class:: classref-item-separator
----
.. _class_Geometry3D_method_tetrahedralize_delaunay:
.. rst-class:: classref-method
:ref:`PackedInt32Array<class_PackedInt32Array>` **tetrahedralize_delaunay**\ (\ points\: :ref:`PackedVector3Array<class_PackedVector3Array>`\ ) :ref:`🔗<class_Geometry3D_method_tetrahedralize_delaunay>`
Тетраедризує об'єм, заданий дискретним набором ``точок параметрів`` у 3D-просторі, гарантуючи, що жодна точка не лежить в межах сфери, описаної навколо будь-якого результуючого тетраедра. Метод повертає :ref:`PackedInt32Array<class_PackedInt32Array>`, де кожен тетраедр складається з чотирьох послідовних точкових індексів у масиві ``points`` (в результаті отримується масив з елементами ``n * 4``, де ``n`` кількість знайдених тетраедрів). Якщо тетраедралізація невдала, повертається порожній :ref:`PackedInt32Array<class_PackedInt32Array>`.
.. |virtual| replace:: :abbr:`virtual (Зазвичай, цей метод перевизначається користувачем, щоб він мав вплив.)`
.. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)`
.. |const| replace:: :abbr:`const (Цей метод не має побічних ефектів. Не змінює ніяку змінну екземпляра об'єкта.)`
.. |vararg| replace:: :abbr:`vararg (Цей метод приймає будь-яке число аргументів після описаних тут.)`
.. |constructor| replace:: :abbr:`constructor (Цей метод використовується для побудови типів.)`
.. |static| replace:: :abbr:`static (Цей метод не потребує екземпляра для виклику, його можна викликати безпосередньо за допомогою назви класу.)`
.. |operator| replace:: :abbr:`operator (Цей метод описує дійсний оператор для взаємодії з цим типом як з лівим операндом.)`
.. |bitfield| replace:: :abbr:`BitField (Це значення є цілим числом, складеним у вигляді бітової маски з наступних прапорів.)`
.. |void| replace:: :abbr:`void (Значення не повертається.)`