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))

#Инициализируйте ArrayMesh.
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

MeshInstance3D готов к добавлению в SceneTree для отображения.

См. также ImmediateMesh, MeshDataTool и SurfaceTool для создания процедурной геометрии.

Примечание: Годо использует порядок намотки по часовой стрелке для передних граней примитивных режимов треугольника.

Обучающие материалы

Свойства

BlendShapeMode

blend_shape_mode

1

AABB

custom_aabb

AABB(0, 0, 0, 0, 0, 0)

ArrayMesh

shadow_mesh

Методы

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

clear_blend_shapes()

void

clear_surfaces()

int

get_blend_shape_count() const

StringName

get_blend_shape_name(index: int) const

Error

lightmap_unwrap(transform: Transform3D, texel_size: float)

void

regen_normal_maps()

void

set_blend_shape_name(index: int, name: StringName)

int

surface_find_by_name(name: String) const

int

surface_get_array_index_len(surf_idx: int) const

int

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

PrimitiveType

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 🔗

Режим смешивания форм.


AABB custom_aabb = AABB(0, 0, 0, 0, 0, 0) 🔗

  • void set_custom_aabb(value: AABB)

  • AABB get_custom_aabb()

Переопределяет AABB на определенный пользователем для использования с отсечением по усеченной пирамиде. Особенно полезно для избежания неожиданного отсечения при использовании шейдера для смещения вершин.


ArrayMesh shadow_mesh 🔗

Необязательная сетка, которая может использоваться для рендеринга теней и предварительного прохода глубины. Может использоваться для повышения производительности путем предоставления сетки с объединенными вершинами и только данными о положении вершин (без нормалей, 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. Каждая запись в словаре представляет уровень детализации поверхности, где значение — это массив Mesh.ARRAY_INDEX, используемый для уровня детализации, а ключ примерно пропорционален расстоянию, на котором используются характеристики детализации. То есть, увеличение ключа детализации также увеличивает расстояние, на котором объекты должны находиться от камеры, прежде чем будет использован детализация.

Аргумент 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) 🔗

Выполняет UV-развертку на 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) 🔗

There is currently no description for this method. Please help us by contributing one!


void surface_update_skin_region(surf_idx: int, offset: int, data: PackedByteArray) 🔗

There is currently no description for this method. Please help us by contributing one!


void surface_update_vertex_region(surf_idx: int, offset: int, data: PackedByteArray) 🔗

There is currently no description for this method. Please help us by contributing one!