MeshDataTool

Наследует: RefCounted < Object

Вспомогательный инструмент для доступа и редактирования данных Mesh.

Описание

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

Чтобы использовать MeshDataTool, загрузите сетку с помощью create_from_surface(). Когда вы закончите редактирование данных, зафиксируйте данные в сетке с помощью commit_to_surface().

Ниже приведен пример того, как можно использовать MeshDataTool.

var mesh = ArrayMesh.new()
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, BoxMesh.new().get_mesh_arrays())
var mdt = MeshDataTool.new()
mdt.create_from_surface(mesh, 0)
for i in range(mdt.get_vertex_count()):
    var vertex = mdt.get_vertex(i)
    # В этом примере мы расширяем сетку на одну единицу, что приводит к разделению граней, поскольку она имеет плоское затенение.
    vertex += mdt.get_vertex_normal(i)
    # Сохраните изменения.
    mdt.set_vertex(i, vertex)
mesh.clear_surfaces()
mdt.commit_to_surface(mesh)
var mi = MeshInstance.new()
mi.mesh = mesh
add_child(mi)

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

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

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

Методы

void

clear()

Error

commit_to_surface(mesh: ArrayMesh, compression_flags: int = 0)

Error

create_from_surface(mesh: ArrayMesh, surface: int)

int

get_edge_count() const

PackedInt32Array

get_edge_faces(idx: int) const

Variant

get_edge_meta(idx: int) const

int

get_edge_vertex(idx: int, vertex: int) const

int

get_face_count() const

int

get_face_edge(idx: int, edge: int) const

Variant

get_face_meta(idx: int) const

Vector3

get_face_normal(idx: int) const

int

get_face_vertex(idx: int, vertex: int) const

int

get_format() const

Material

get_material() const

Vector3

get_vertex(idx: int) const

PackedInt32Array

get_vertex_bones(idx: int) const

Color

get_vertex_color(idx: int) const

int

get_vertex_count() const

PackedInt32Array

get_vertex_edges(idx: int) const

PackedInt32Array

get_vertex_faces(idx: int) const

Variant

get_vertex_meta(idx: int) const

Vector3

get_vertex_normal(idx: int) const

Plane

get_vertex_tangent(idx: int) const

Vector2

get_vertex_uv(idx: int) const

Vector2

get_vertex_uv2(idx: int) const

PackedFloat32Array

get_vertex_weights(idx: int) const

void

set_edge_meta(idx: int, meta: Variant)

void

set_face_meta(idx: int, meta: Variant)

void

set_material(material: Material)

void

set_vertex(idx: int, vertex: Vector3)

void

set_vertex_bones(idx: int, bones: PackedInt32Array)

void

set_vertex_color(idx: int, color: Color)

void

set_vertex_meta(idx: int, meta: Variant)

void

set_vertex_normal(idx: int, normal: Vector3)

void

set_vertex_tangent(idx: int, tangent: Plane)

void

set_vertex_uv(idx: int, uv: Vector2)

void

set_vertex_uv2(idx: int, uv2: Vector2)

void

set_vertex_weights(idx: int, weights: PackedFloat32Array)


Описания метода

void clear() 🔗

Очищает все текущие данные в MeshDataTool.


Error commit_to_surface(mesh: ArrayMesh, compression_flags: int = 0) 🔗

Добавляет новую поверхность к указанному Mesh с отредактированными данными.


Error create_from_surface(mesh: ArrayMesh, surface: int) 🔗

Использует указанную поверхность заданной Mesh для заполнения данных для MeshDataTool.

Требуется Mesh с примитивным типом Mesh.PRIMITIVE_TRIANGLES.


int get_edge_count() const 🔗

Возвращает количество ребер в этом Mesh-е.


PackedInt32Array get_edge_faces(idx: int) const 🔗

Возвращает массив граней (Faces), касающихся заданного ребра.


Variant get_edge_meta(idx: int) const 🔗

Возвращает мета-информацию, назначенную данному ребру.


int get_edge_vertex(idx: int, vertex: int) const 🔗

Возвращает индекс указанной вершины vertex, соединённой с ребром с индексом idx.

vertex может быть только 0 или 1, поскольку ребра состоят из двух вершин.


int get_face_count() const 🔗

Возвращает количество граней в этом Mesh-е.


int get_face_edge(idx: int, edge: int) const 🔗

Возвращает ребро, связанное с гранью с индексом idx.

Аргумент edge должен иметь значение 0, 1 или 2, поскольку грань имеет только три ребра.


Variant get_face_meta(idx: int) const 🔗

Возвращает метаданные, связанные с указанным лицом (Face).


Vector3 get_face_normal(idx: int) const 🔗

Вычисляет и возвращает нормаль заданной грани (Face).


int get_face_vertex(idx: int, vertex: int) const 🔗

Возвращает указанный индекс вершины заданной грани.

vertex должен быть либо 0, 1, либо 2, поскольку грани содержат три вершины.

var index = mesh_data_tool.get_face_vertex(0, 1) # Получает индекс второй вершины первой грани.
var position = mesh_data_tool.get_vertex(index)
var normal = mesh_data_tool.get_vertex_normal(index)

int get_format() const 🔗

Возвращает формат Mesh как комбинацию флагов ArrayFormat. Например, сетка, содержащая как вершины, так и нормали, вернет формат 3, поскольку Mesh.ARRAY_FORMAT_VERTEX — это 1, а Mesh.ARRAY_FORMAT_NORMAL — это 2.


Material get_material() const 🔗

Возвращает материал, назначенный Mesh.


Vector3 get_vertex(idx: int) const 🔗

Возвращает положение заданной вершины.


PackedInt32Array get_vertex_bones(idx: int) const 🔗

Возвращает кости указанной вершины.


Color get_vertex_color(idx: int) const 🔗

Возвращает цвет заданной вершины.


int get_vertex_count() const 🔗

Возвращает общее количество вершин в Mesh.


PackedInt32Array get_vertex_edges(idx: int) const 🔗

Возвращает массив ребер, имеющих общую вершину.


PackedInt32Array get_vertex_faces(idx: int) const 🔗

Возвращает массив граней (Faces), имеющих общую вершину.


Variant get_vertex_meta(idx: int) const 🔗

Возвращает метаданные, связанные с заданной вершиной.


Vector3 get_vertex_normal(idx: int) const 🔗

Возвращает нормаль заданной вершины.


Plane get_vertex_tangent(idx: int) const 🔗

Возвращает тангенс заданной вершины.


Vector2 get_vertex_uv(idx: int) const 🔗

Возвращает UV заданной вершины.


Vector2 get_vertex_uv2(idx: int) const 🔗

Возвращает UV2 заданной вершины.


PackedFloat32Array get_vertex_weights(idx: int) const 🔗

Возвращает вес костей заданной вершины.


void set_edge_meta(idx: int, meta: Variant) 🔗

Устанавливает метаданные указанного ребра.


void set_face_meta(idx: int, meta: Variant) 🔗

Устанавливает метаданные указанной грани (Faces).


void set_material(material: Material) 🔗

Устанавливает материал, который будет использоваться для вновь созданной Mesh.


void set_vertex(idx: int, vertex: Vector3) 🔗

Устанавливает положение заданной вершины.


void set_vertex_bones(idx: int, bones: PackedInt32Array) 🔗

Устанавливает кости заданной вершины.


void set_vertex_color(idx: int, color: Color) 🔗

Устанавливает цвет заданной вершины.


void set_vertex_meta(idx: int, meta: Variant) 🔗

Устанавливает метаданные, связанные с заданной вершиной.


void set_vertex_normal(idx: int, normal: Vector3) 🔗

Устанавливает нормаль заданной вершины.


void set_vertex_tangent(idx: int, tangent: Plane) 🔗

Задает касательную к заданной вершине.

Примечание: Хотя tangent является Plane, он не представляет собой непосредственно касательную плоскость. Его Plane.x, Plane.y и Plane.z представляют собой касательный вектор, а Plane.d должен быть либо -1, либо 1. См. также Mesh.ARRAY_TANGENT.


void set_vertex_uv(idx: int, uv: Vector2) 🔗

Устанавливает UV заданной вершины.


void set_vertex_uv2(idx: int, uv2: Vector2) 🔗

Устанавливает UV2 заданной вершины.


void set_vertex_weights(idx: int, weights: PackedFloat32Array) 🔗

Устанавливает вес костей заданной вершины.