:github_url: hide .. _class_ArrayMesh: ArrayMesh ========= **Успадковує:** :ref:`Mesh` **<** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` Тип :ref:`Mesh`, який надає утиліту для побудови поверхні з масивів. .. rst-class:: classref-introduction-group Опис -------- **ArrayMesh** використовується для створення :ref:`Mesh` шляхом визначення таких атрибутів, як масиви. Найпростішим прикладом є створення одного трикутника: .. tabs:: .. code-tab:: gdscript var vertices = PackedVector3Array() vertices.push_back(Vector3(0, 1, 0)) vertices.push_back(Vector3(1, 0, 0)) vertices.push_back(Vector3(0, 0, 1)) # Ініціалізація Масивів Мешу. var arr_mesh = ArrayMesh.new() var arrays = [] arrays.resize(Mesh.ARRAY_MAX) arrays[Mesh.ARRAY_VERTEX] = vertices # Створення Мешу. arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays) var m = MeshInstance3D.new() m.mesh = arr_mesh .. code-tab:: csharp var vertices = new Vector3[] { new Vector3(0, 1, 0), new Vector3(1, 0, 0), new Vector3(0, 0, 1), }; // Initialize the ArrayMesh. var arrMesh = new ArrayMesh(); var arrays = new Godot.Collections.Array(); arrays.Resize((int)Mesh.ArrayType.Max); arrays[(int)Mesh.ArrayType.Vertex] = vertices; // Create the Mesh. arrMesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, arrays); var m = new MeshInstance3D(); m.Mesh = arrMesh; \ :ref:`MeshInstance3D` готовий до додавання до :ref:`SceneTree`. Дивіться також :ref:`ImmediateMesh`, :ref:`MeshDataTool` і :ref:`SurfaceTool` для генерації процедурної геометрії. \ **Примітка:** Godot використовує `порядок намотування `__ за годинниковою стрілкою для передніх граней примітивів трикутників. .. rst-class:: classref-introduction-group Посібники ------------------ - :doc:`Процедурна геометрія з використанням ArrayMesh <../tutorials/3d/procedural_geometry/arraymesh>` .. rst-class:: classref-reftable-group Властивості ---------------------- .. table:: :widths: auto +-------------------------------------------------+--------------------------------------------------------------------+----------------------------+ | :ref:`BlendShapeMode` | :ref:`blend_shape_mode` | ``1`` | +-------------------------------------------------+--------------------------------------------------------------------+----------------------------+ | :ref:`AABB` | :ref:`custom_aabb` | ``AABB(0, 0, 0, 0, 0, 0)`` | +-------------------------------------------------+--------------------------------------------------------------------+----------------------------+ | :ref:`ArrayMesh` | :ref:`shadow_mesh` | | +-------------------------------------------------+--------------------------------------------------------------------+----------------------------+ .. rst-class:: classref-reftable-group Методи ------------ .. table:: :widths: auto +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`add_blend_shape`\ (\ name\: :ref:`StringName`\ ) | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`add_surface_from_arrays`\ (\ primitive\: :ref:`PrimitiveType`, arrays\: :ref:`Array`, blend_shapes\: :ref:`Array`\[:ref:`Array`\] = [], lods\: :ref:`Dictionary` = {}, flags\: |bitfield|\[:ref:`ArrayFormat`\] = 0\ ) | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`clear_blend_shapes`\ (\ ) | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`clear_surfaces`\ (\ ) | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`get_blend_shape_count`\ (\ ) |const| | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`StringName` | :ref:`get_blend_shape_name`\ (\ index\: :ref:`int`\ ) |const| | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`lightmap_unwrap`\ (\ transform\: :ref:`Transform3D`, texel_size\: :ref:`float`\ ) | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`regen_normal_maps`\ (\ ) | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_blend_shape_name`\ (\ index\: :ref:`int`, name\: :ref:`StringName`\ ) | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`surface_find_by_name`\ (\ name\: :ref:`String`\ ) |const| | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`surface_get_array_index_len`\ (\ surf_idx\: :ref:`int`\ ) |const| | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`surface_get_array_len`\ (\ surf_idx\: :ref:`int`\ ) |const| | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |bitfield|\[:ref:`ArrayFormat`\] | :ref:`surface_get_format`\ (\ surf_idx\: :ref:`int`\ ) |const| | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`String` | :ref:`surface_get_name`\ (\ surf_idx\: :ref:`int`\ ) |const| | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`PrimitiveType` | :ref:`surface_get_primitive_type`\ (\ surf_idx\: :ref:`int`\ ) |const| | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`surface_remove`\ (\ surf_idx\: :ref:`int`\ ) | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`surface_set_name`\ (\ surf_idx\: :ref:`int`, name\: :ref:`String`\ ) | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`surface_update_attribute_region`\ (\ surf_idx\: :ref:`int`, offset\: :ref:`int`, data\: :ref:`PackedByteArray`\ ) | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`surface_update_skin_region`\ (\ surf_idx\: :ref:`int`, offset\: :ref:`int`, data\: :ref:`PackedByteArray`\ ) | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`surface_update_vertex_region`\ (\ surf_idx\: :ref:`int`, offset\: :ref:`int`, data\: :ref:`PackedByteArray`\ ) | +---------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Описи властивостей ------------------------------------ .. _class_ArrayMesh_property_blend_shape_mode: .. rst-class:: classref-property :ref:`BlendShapeMode` **blend_shape_mode** = ``1`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_blend_shape_mode**\ (\ value\: :ref:`BlendShapeMode`\ ) - :ref:`BlendShapeMode` **get_blend_shape_mode**\ (\ ) Режим накладання фігур. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_property_custom_aabb: .. rst-class:: classref-property :ref:`AABB` **custom_aabb** = ``AABB(0, 0, 0, 0, 0, 0)`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_custom_aabb**\ (\ value\: :ref:`AABB`\ ) - :ref:`AABB` **get_custom_aabb**\ (\ ) Замінює :ref:`AABB` на один, визначений користувачем для використання з вибракуванням усеченої точки. Особливо корисно, щоб уникнути несподіваного відсікання під час використання шейдера для зміщення вершин. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_property_shadow_mesh: .. rst-class:: classref-property :ref:`ArrayMesh` **shadow_mesh** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_shadow_mesh**\ (\ value\: :ref:`ArrayMesh`\ ) - :ref:`ArrayMesh` **get_shadow_mesh**\ (\ ) Додаткова сітка, яку можна використовувати для візуалізації тіней і попереднього проходу глибини. Можна використовувати для підвищення продуктивності шляхом надання сітки з об’єднаними вершинами та лише даними про положення вершин (без нормалей, UV, кольорів тощо). \ **Примітка:** ця сітка повинна мати точно такі ж позиції вершин, як і вихідна сітка (включаючи LOD вихідної сіті, якщо вони є). Якщо положення вершин відрізняються, сітка не буде намальована правильно. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Описи методів -------------------------- .. _class_ArrayMesh_method_add_blend_shape: .. rst-class:: classref-method |void| **add_blend_shape**\ (\ name\: :ref:`StringName`\ ) :ref:`🔗` Додає назву для форми змішування, яку буде додано за допомогою :ref:`add_surface_from_arrays()`. Має викликатися перед додаванням поверхні. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_add_surface_from_arrays: .. rst-class:: classref-method |void| **add_surface_from_arrays**\ (\ primitive\: :ref:`PrimitiveType`, arrays\: :ref:`Array`, blend_shapes\: :ref:`Array`\[:ref:`Array`\] = [], lods\: :ref:`Dictionary` = {}, flags\: |bitfield|\[:ref:`ArrayFormat`\] = 0\ ) :ref:`🔗` Створює нову поверхню. :ref:`Mesh.get_surface_count()` стане ``surf_idx`` для цієї нової поверхні. Поверхні створюються для візуалізації за допомогою ``primitive``, який може бути будь-яким зі значень, визначених у :ref:`PrimitiveType`. Аргумент ``arrays`` — це масив масивів. Кожен з елементів :ref:`Mesh.ARRAY_MAX` містить масив із деякими даними сітки для цієї поверхні, як описано відповідним елементом :ref:`ArrayType` або ``null``, якщо він не використовується поверхні. Наприклад, ``arrays[0]`` — це масив вершин. Цей підмасив перших вершин завжди потрібен; інші необов'язкові. Додавання індексного масиву переводить цю поверхню в «індексний режим», де вершина та інші масиви стають джерелами даних, а індексний масив визначає порядок вершин. Усі підмасиви повинні мати таку ж довжину, як і масив вершин (або бути кратним довжині масиву вершин, якщо кілька елементів підмасиву відповідають одній вершині) або бути порожніми, за винятком :ref:`Mesh.ARRAY_INDEX`, якщо він використовується. Аргумент ``blend_shapes`` — це масив даних вершин для кожної фігури змішування. Кожен елемент є масивом такої самої структури, що й ``arrays``, але :ref:`Mesh.ARRAY_VERTEX`, :ref:`Mesh.ARRAY_NORMAL` і :ref:`Mesh.ARRAY_TANGENT` встановлені тоді та лише тоді, коли вони встановлені в ``arrays`` і всі інші записи мають значення ``null``. Аргумент ``lods`` — це словник із ключами :ref:`float` і значеннями :ref:`PackedInt32Array`. Кожен запис у словнику представляє рівень LOD поверхні, де значенням є масив :ref:`Mesh.ARRAY_INDEX` для використання рівня LOD, а ключ приблизно пропорційний відстані, на якій використовується статистика LOD. Тобто збільшення ключа LOD також збільшує відстань, на якій об’єкти повинні бути від камери до використання LOD. Аргумент ``flags`` є порозрядним АБО, якщо потрібно: одне значення :ref:`ArrayCustomFormat` зміщено вліво на ``ARRAY_FORMAT_CUSTOMn_SHIFT`` для кожного користувацького каналу, що використовується, :ref:`Mesh.ARRAY_FLAG_USE_DYNAMIC_UPDATE`, :ref:`Mesh.ARRAY_FLAG_USE_8_BONE_WEIGHTS` або :ref:`Mesh.ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY`. \ **Примітка:** Під час використання індексів рекомендується використовувати лише точки, лінії чи трикутники. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_clear_blend_shapes: .. rst-class:: classref-method |void| **clear_blend_shapes**\ (\ ) :ref:`🔗` Видаляє всі форми змішування з цього **ArrayMesh**. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_clear_surfaces: .. rst-class:: classref-method |void| **clear_surfaces**\ (\ ) :ref:`🔗` Видаляє всі поверхні з цього **ArrayMesh**. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_get_blend_shape_count: .. rst-class:: classref-method :ref:`int` **get_blend_shape_count**\ (\ ) |const| :ref:`🔗` Повертає кількість форм змішування, які містить **ArrayMesh**. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_get_blend_shape_name: .. rst-class:: classref-method :ref:`StringName` **get_blend_shape_name**\ (\ index\: :ref:`int`\ ) |const| :ref:`🔗` Повертає назву форми змішування за цим індексом. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_lightmap_unwrap: .. rst-class:: classref-method :ref:`Error` **lightmap_unwrap**\ (\ transform\: :ref:`Transform3D`, texel_size\: :ref:`float`\ ) :ref:`🔗` Виконує ультрафіолетове розгортання **ArrayMesh**, щоб підготувати сітку до світлового відображення. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_regen_normal_maps: .. rst-class:: classref-method |void| **regen_normal_maps**\ (\ ) :ref:`🔗` Повторно генерує дотичні для кожної поверхні **ArrayMesh**. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_set_blend_shape_name: .. rst-class:: classref-method |void| **set_blend_shape_name**\ (\ index\: :ref:`int`, name\: :ref:`StringName`\ ) :ref:`🔗` Встановлює назву форми змішування за цим індексом. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_surface_find_by_name: .. rst-class:: classref-method :ref:`int` **surface_find_by_name**\ (\ name\: :ref:`String`\ ) |const| :ref:`🔗` Повертає індекс першої поверхні з такою назвою у цьому **ArrayMesh**. Якщо не знайдено жодної, повертається -1. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_surface_get_array_index_len: .. rst-class:: classref-method :ref:`int` **surface_get_array_index_len**\ (\ surf_idx\: :ref:`int`\ ) |const| :ref:`🔗` Повертає довжину в індексах масиву індексів у запитуваній поверхні (див. :ref:`add_surface_from_arrays()`). .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_surface_get_array_len: .. rst-class:: classref-method :ref:`int` **surface_get_array_len**\ (\ surf_idx\: :ref:`int`\ ) |const| :ref:`🔗` Повертає довжину у вершинах масиву вершин запитуваної поверхні (див. :ref:`add_surface_from_arrays()`). .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_surface_get_format: .. rst-class:: classref-method |bitfield|\[:ref:`ArrayFormat`\] **surface_get_format**\ (\ surf_idx\: :ref:`int`\ ) |const| :ref:`🔗` Повертає маску формату запитуваної поверхні (див. :ref:`add_surface_from_arrays()`). .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_surface_get_name: .. rst-class:: classref-method :ref:`String` **surface_get_name**\ (\ surf_idx\: :ref:`int`\ ) |const| :ref:`🔗` Отримує назву, призначену цій поверхні. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_surface_get_primitive_type: .. rst-class:: classref-method :ref:`PrimitiveType` **surface_get_primitive_type**\ (\ surf_idx\: :ref:`int`\ ) |const| :ref:`🔗` Повертає тип примітиву запитуваної поверхні (див. :ref:`add_surface_from_arrays()`). .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_surface_remove: .. rst-class:: classref-method |void| **surface_remove**\ (\ surf_idx\: :ref:`int`\ ) :ref:`🔗` Видаляє поверхню з заданим індексом із сітки, зміщуючи поверхні з вищим індексом на одиницю вниз. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_surface_set_name: .. rst-class:: classref-method |void| **surface_set_name**\ (\ surf_idx\: :ref:`int`, name\: :ref:`String`\ ) :ref:`🔗` Задає назву для заданої поверхні. .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_surface_update_attribute_region: .. rst-class:: classref-method |void| **surface_update_attribute_region**\ (\ surf_idx\: :ref:`int`, offset\: :ref:`int`, data\: :ref:`PackedByteArray`\ ) :ref:`🔗` .. container:: contribute There is currently no description for this method. Please help us by `contributing one `__! .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_surface_update_skin_region: .. rst-class:: classref-method |void| **surface_update_skin_region**\ (\ surf_idx\: :ref:`int`, offset\: :ref:`int`, data\: :ref:`PackedByteArray`\ ) :ref:`🔗` .. container:: contribute There is currently no description for this method. Please help us by `contributing one `__! .. rst-class:: classref-item-separator ---- .. _class_ArrayMesh_method_surface_update_vertex_region: .. rst-class:: classref-method |void| **surface_update_vertex_region**\ (\ surf_idx\: :ref:`int`, offset\: :ref:`int`, data\: :ref:`PackedByteArray`\ ) :ref:`🔗` .. container:: contribute There is currently no description for this method. Please help us by `contributing one `__! .. |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 (Значення не повертається.)`