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.

MeshDataTool

Eredita: RefCounted < Object

Strumento di supporto per accedere e modificare i dati della Mesh.

Descrizione

MeshDataTool fornisce l'accesso ai singoli vertici in una Mesh. Consente agli utenti di leggere e modificare i dati dei vertici delle mesh. Crea anche una matrice di facce e spigoli.

Per utilizzare MeshDataTool, caricare una mesh con create_from_surface(). Quando hai finito di modificare i dati, commetti i dati in una mesh con commit_to_surface().

Di seguito è riportato un esempio di come può essere utilizzato 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)
    # In questo esempio estendiamo la mesh di un'unità, il che risulta in facce separate poiché è ombreggiata in modo piatto.
    vertex += mdt.get_vertex_normal(i)
    # Salva la modifica.
    mdt.set_vertex(i, vertex)
mesh.clear_surfaces()
mdt.commit_to_surface(mesh)
var mi = MeshInstance.new()
mi.mesh = mesh
add_child(mi)

Vedi anche ArrayMesh, ImmediateMesh e SurfaceTool per la generazione di geometria procedurale.

Nota: Godot utilizza l'ordine di avvolgimento in senso orario per le facce frontali delle modalità di triangoli primitivi.

Tutorial

Metodi

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)


Descrizioni dei metodi

void clear() 🔗

Cancella tutti i dati attualmente presenti in MeshDataTool.


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

Aggiunge una nuova superficie alla Mesh specificata con i dati modificati.


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

Utilizza la superficie specificata della Mesh fornita per costruire i dati per MeshDataTool.

Richiede una Mesh con il tipo di primitiva Mesh.PRIMITIVE_TRIANGLES.


int get_edge_count() const 🔗

Restituisce il numero di spigoli in questa Mesh.


PackedInt32Array get_edge_faces(idx: int) const 🔗

Restituisce un array di facce che toccano lo spigolo specificato.


Variant get_edge_meta(idx: int) const 🔗

Restituisce i metadati assegnati allo spigolo specificato.


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

Restituisce l'indice del vertice vertex connesso allo spigolo all'indice idx.

vertex può essere solo 0 o 1 poiché gli spigoli sono composti da due vertici.


int get_face_count() const 🔗

Restituisce il numero di facce in questa Mesh.


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

Restituisce lo spigolo associato alla faccia all'indice idx.

edge deve essere 0, 1 o 2 perché una faccia ha solo tre spigoli.


Variant get_face_meta(idx: int) const 🔗

Restituisce i metadati associati alla faccia specificata.


Vector3 get_face_normal(idx: int) const 🔗

Calcola e restituisce la normale alla faccia specificata.


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

Restituisce l'indice del vertice specificato della faccia fornita.

vertex deve essere 0, 1 o 2 perché le facce contengono tre vertici.

var index = mesh_data_tool.get_face_vertex(0, 1) # Ottiene l'indice del secondo vertice della prima faccia.
var position = mesh_data_tool.get_vertex(index)
var normal = mesh_data_tool.get_vertex_normal(index)

int get_format() const 🔗

Restituisce il formato della Mesh come una combinazione dei flag ArrayFormat. Ad esempio, una mesh contenente sia vertici sia normali restituirebbe un formato di 3 perché Mesh.ARRAY_FORMAT_VERTEX è 1 e Mesh.ARRAY_FORMAT_NORMAL è 2.


Material get_material() const 🔗

Restituisce il materiale assegnato alla Mesh.


Vector3 get_vertex(idx: int) const 🔗

Restituisce la posizione del vertice specificato.


PackedInt32Array get_vertex_bones(idx: int) const 🔗

Restituisce le ossa del vertice specificato.


Color get_vertex_color(idx: int) const 🔗

Restituisce il colore del vertice specificato.


int get_vertex_count() const 🔗

Restituisce il numero totale di vertici nella Mesh.


PackedInt32Array get_vertex_edges(idx: int) const 🔗

Restituisce un array di spigoli che condividono il vertice specificato.


PackedInt32Array get_vertex_faces(idx: int) const 🔗

Restituisce un array di facce che condividono il vertice specificato.


Variant get_vertex_meta(idx: int) const 🔗

Restituisce i metadati associati al vertice specificato.


Vector3 get_vertex_normal(idx: int) const 🔗

Restituisce la normale del vertice specificato.


Plane get_vertex_tangent(idx: int) const 🔗

Restituisce la tangente del vertice specificato.


Vector2 get_vertex_uv(idx: int) const 🔗

Restituisce l'UV del vertice specificato.


Vector2 get_vertex_uv2(idx: int) const 🔗

Restituisce l'UV2 del vertice specificato.


PackedFloat32Array get_vertex_weights(idx: int) const 🔗

Restituisce i pesi delle ossa del vertice specificato.


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

Imposta i metadati dello spigolo specificato.


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

Imposta i metadati della faccia specificata.


void set_material(material: Material) 🔗

Imposta il materiale da utilizzare per la Mesh appena costruita.


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

Imposta la posizione del vertice specificato.


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

Imposta le ossa del vertice specificato.


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

Imposta il colore del vertice specificato.


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

Imposta i metadati associati al vertice specificato.


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

Imposta la normale del vertice specificato.


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

Sets the tangent of the given vertex.

Note: Even though tangent is a Plane, it does not directly represent the tangent plane. Its Plane.x, Plane.y, and Plane.z represent the tangent vector and Plane.d should be either -1 or 1. See also Mesh.ARRAY_TANGENT.


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

Imposta l'UV del vertice specificato.


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

Imposta l'UV2 del vertice specificato.


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

Imposta i pesi delle ossa del vertice specificato.