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...
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)
var mesh = new ArrayMesh();
mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, new BoxMesh().GetMeshArrays());
var mdt = new MeshDataTool();
mdt.CreateFromSurface(mesh, 0);
for (var i = 0; i < mdt.GetVertexCount(); i++)
{
Vector3 vertex = mdt.GetVertex(i);
// In questo esempio estendiamo la mesh di un'unità, il che risulta in facce separate poiché è ombreggiata in modo piatto.
vertex += mdt.GetVertexNormal(i);
// Salva la modifica.
mdt.SetVertex(i, vertex);
}
mesh.ClearSurfaces();
mdt.CommitToSurface(mesh);
var mi = new MeshInstance();
mi.Mesh = mesh;
AddChild(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
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.
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.
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 index = meshDataTool.GetFaceVertex(0, 1); // Ottiene l'indice del secondo vertice della prima faccia.
Vector3 position = meshDataTool.GetVertex(index);
Vector3 normal = meshDataTool.GetVertexNormal(index);
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.