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...
ArrayMesh
Успадковує: Mesh < Resource < RefCounted < Object
Тип Mesh, який надає утиліту для побудови поверхні з масивів.
Опис
ArrayMesh використовується для створення Mesh шляхом визначення таких атрибутів, як масиви.
Найпростішим прикладом є створення одного трикутника:
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
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;
MeshInstance3D готовий до додавання до SceneTree.
Дивіться також ImmediateMesh, MeshDataTool і SurfaceTool для генерації процедурної геометрії.
Примітка: Godot використовує порядок намотування за годинниковою стрілкою для передніх граней примітивів трикутників.
Посібники
Властивості
|
||
|
||
Методи
void |
add_blend_shape(name: StringName) |
void |
add_surface_from_arrays(primitive: PrimitiveType, arrays: Array, blend_shapes: Array[Array] = [], lods: Dictionary = {}, flags: BitField[ArrayFormat] = 0) |
void |
|
void |
|
get_blend_shape_count() const |
|
StringName |
get_blend_shape_name(index: int) const |
lightmap_unwrap(transform: Transform3D, texel_size: float) |
|
void |
|
void |
set_blend_shape_name(index: int, name: StringName) |
surface_find_by_name(name: String) const |
|
surface_get_array_index_len(surf_idx: int) const |
|
surface_get_array_len(surf_idx: int) const |
|
BitField[ArrayFormat] |
surface_get_format(surf_idx: int) const |
String |
surface_get_name(surf_idx: int) const |
surface_get_primitive_type(surf_idx: int) const |
|
void |
surface_remove(surf_idx: int) |
void |
surface_set_name(surf_idx: int, name: String) |
void |
surface_update_attribute_region(surf_idx: int, offset: int, data: PackedByteArray) |
void |
surface_update_skin_region(surf_idx: int, offset: int, data: PackedByteArray) |
void |
surface_update_vertex_region(surf_idx: int, offset: int, data: PackedByteArray) |
Описи властивостей
BlendShapeMode blend_shape_mode = 1 🔗
void set_blend_shape_mode(value: BlendShapeMode)
BlendShapeMode get_blend_shape_mode()
Режим накладання фігур.
AABB custom_aabb = AABB(0, 0, 0, 0, 0, 0) 🔗
Замінює AABB на один, визначений користувачем для використання з вибракуванням усеченої точки. Особливо корисно, щоб уникнути несподіваного відсікання під час використання шейдера для зміщення вершин.
Додаткова сітка, яку можна використовувати для візуалізації тіней і попереднього проходу глибини. Можна використовувати для підвищення продуктивності шляхом надання сітки з об’єднаними вершинами та лише даними про положення вершин (без нормалей, UV, кольорів тощо).
Примітка: ця сітка повинна мати точно такі ж позиції вершин, як і вихідна сітка (включаючи LOD вихідної сіті, якщо вони є). Якщо положення вершин відрізняються, сітка не буде намальована правильно.
Описи методів
void add_blend_shape(name: StringName) 🔗
Додає назву для форми змішування, яку буде додано за допомогою add_surface_from_arrays(). Має викликатися перед додаванням поверхні.
void add_surface_from_arrays(primitive: PrimitiveType, arrays: Array, blend_shapes: Array[Array] = [], lods: Dictionary = {}, flags: BitField[ArrayFormat] = 0) 🔗
Створює нову поверхню. Mesh.get_surface_count() стане surf_idx для цієї нової поверхні.
Поверхні створюються для візуалізації за допомогою primitive, який може бути будь-яким зі значень, визначених у PrimitiveType.
Аргумент arrays — це масив масивів. Кожен з елементів Mesh.ARRAY_MAX містить масив із деякими даними сітки для цієї поверхні, як описано відповідним елементом ArrayType або null, якщо він не використовується поверхні. Наприклад, arrays[0] — це масив вершин. Цей підмасив перших вершин завжди потрібен; інші необов'язкові. Додавання індексного масиву переводить цю поверхню в «індексний режим», де вершина та інші масиви стають джерелами даних, а індексний масив визначає порядок вершин. Усі підмасиви повинні мати таку ж довжину, як і масив вершин (або бути кратним довжині масиву вершин, якщо кілька елементів підмасиву відповідають одній вершині) або бути порожніми, за винятком Mesh.ARRAY_INDEX, якщо він використовується.
Аргумент blend_shapes — це масив даних вершин для кожної фігури змішування. Кожен елемент є масивом такої самої структури, що й arrays, але Mesh.ARRAY_VERTEX, Mesh.ARRAY_NORMAL і Mesh.ARRAY_TANGENT встановлені тоді та лише тоді, коли вони встановлені в arrays і всі інші записи мають значення null.
Аргумент lods — це словник із ключами float і значеннями PackedInt32Array. Кожен запис у словнику представляє рівень LOD поверхні, де значенням є масив Mesh.ARRAY_INDEX для використання рівня LOD, а ключ приблизно пропорційний відстані, на якій використовується статистика LOD. Тобто збільшення ключа LOD також збільшує відстань, на якій об’єкти повинні бути від камери до використання LOD.
Аргумент flags є порозрядним АБО, якщо потрібно: одне значення ArrayCustomFormat зміщено вліво на ARRAY_FORMAT_CUSTOMn_SHIFT для кожного користувацького каналу, що використовується, Mesh.ARRAY_FLAG_USE_DYNAMIC_UPDATE, Mesh.ARRAY_FLAG_USE_8_BONE_WEIGHTS або Mesh.ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY.
Примітка: Під час використання індексів рекомендується використовувати лише точки, лінії чи трикутники.
void clear_blend_shapes() 🔗
Видаляє всі форми змішування з цього ArrayMesh.
void clear_surfaces() 🔗
Видаляє всі поверхні з цього ArrayMesh.
int get_blend_shape_count() const 🔗
Повертає кількість форм змішування, які містить ArrayMesh.
StringName get_blend_shape_name(index: int) const 🔗
Повертає назву форми змішування за цим індексом.
Error lightmap_unwrap(transform: Transform3D, texel_size: float) 🔗
Виконує ультрафіолетове розгортання ArrayMesh, щоб підготувати сітку до світлового відображення.
void regen_normal_maps() 🔗
Повторно генерує дотичні для кожної поверхні ArrayMesh.
void set_blend_shape_name(index: int, name: StringName) 🔗
Встановлює назву форми змішування за цим індексом.
int surface_find_by_name(name: String) const 🔗
Повертає індекс першої поверхні з такою назвою у цьому ArrayMesh. Якщо не знайдено жодної, повертається -1.
int surface_get_array_index_len(surf_idx: int) const 🔗
Повертає довжину в індексах масиву індексів у запитуваній поверхні (див. add_surface_from_arrays()).
int surface_get_array_len(surf_idx: int) const 🔗
Повертає довжину у вершинах масиву вершин запитуваної поверхні (див. add_surface_from_arrays()).
BitField[ArrayFormat] surface_get_format(surf_idx: int) const 🔗
Повертає маску формату запитуваної поверхні (див. add_surface_from_arrays()).
String surface_get_name(surf_idx: int) const 🔗
Отримує назву, призначену цій поверхні.
PrimitiveType surface_get_primitive_type(surf_idx: int) const 🔗
Повертає тип примітиву запитуваної поверхні (див. add_surface_from_arrays()).
void surface_remove(surf_idx: int) 🔗
Видаляє поверхню з заданим індексом із сітки, зміщуючи поверхні з вищим індексом на одиницю вниз.
void surface_set_name(surf_idx: int, name: String) 🔗
Задає назву для заданої поверхні.
void surface_update_attribute_region(surf_idx: int, offset: int, data: PackedByteArray) 🔗
Updates the attribute buffer of this mesh's surface with the given data. The expected data per attribute is 12 or 8 bytes (4 bytes per float, 2 floats per Vector2, and 3 floats per Vector3) depending on if the mesh is using Vector3 or Vector2 vertices. This value can be determined with RenderingServer.mesh_surface_get_format_attribute_stride().
The starting point of the updates can be changed with offset. The value of offset should be a multiple of 12 bytes in most cases to align to each attribute.
A PackedVector3Array of attribute locations can be converted into a PackedByteArray using PackedVector3Array.to_byte_array() for use in data.
void surface_update_skin_region(surf_idx: int, offset: int, data: PackedByteArray) 🔗
Updates the skin buffer of this mesh's surface with the given data. The expected data per skin is 12 or 8 bytes (4 bytes per float, 2 floats per Vector2, and 3 floats per Vector3) depending on if the mesh is using Vector3 or Vector2 vertices. This value can be determined with RenderingServer.mesh_surface_get_format_skin_stride().
The starting point of the updates can be changed with offset. The value of offset should be a multiple of 12 bytes in most cases to align to each skin.
A PackedVector3Array of skin locations can be converted into a PackedByteArray using PackedVector3Array.to_byte_array() for use in data.
void surface_update_vertex_region(surf_idx: int, offset: int, data: PackedByteArray) 🔗
Updates the vertex buffer of this mesh's surface with the given data. The expected data per vertex is 12 or 8 bytes (4 bytes per float, 2 floats per Vector2, and 3 floats per Vector3) depending on if the mesh is using Vector3 or Vector2 vertices. This value can be determined with RenderingServer.mesh_surface_get_format_vertex_stride().
The starting point of the updates can be changed with offset. The value of offset should be a multiple of 12 bytes in most cases to align to each vertex.
A PackedVector3Array of vertex locations can be converted into a PackedByteArray using PackedVector3Array.to_byte_array() for use in data.