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
Hereda: RefCounted < Object
Herramienta de ayuda para acceder y editar los datos de la Mesh.
Descripción
MeshDataTool proporciona acceso a los vértices individuales de una Mesh. Permite a los usuarios leer y editar los datos de los vértices de las mallas. También crea un array de caras y aristas.
Para usar MeshDataTool, cargue una malla con create_from_surface(). Cuando termines de editar los datos, confírmalos en una malla con commit_to_surface().
A continuación se muestra un ejemplo de cómo se puede usar 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)
# En este ejemplo extendemos la malla una unidad, lo que resulta en caras separadas ya que tiene sombreado plano.
vertex += mdt.get_vertex_normal(i)
# Guarde su cambio.
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);
// En este ejemplo extendemos la malla una unidad, lo que resulta en caras separadas ya que tiene sombreado plano.
vertex += mdt.GetVertexNormal(i);
// Guarde su cambio.
mdt.SetVertex(i, vertex);
}
mesh.ClearSurfaces();
mdt.CommitToSurface(mesh);
var mi = new MeshInstance();
mi.Mesh = mesh;
AddChild(mi);
Véase también ArrayMesh, ImmediateMesh y SurfaceTool para la generación procedural de geometría.
Nota: Godot utiliza un orden de devanado en sentido horario para las caras frontales de los modos de primitiva de triángulo.
Tutoriales
Métodos
Descripciones de Métodos
void clear() 🔗
Borra todos los datos que actualmente están en la MeshDataTool.
Error commit_to_surface(mesh: ArrayMesh, compression_flags: int = 0) 🔗
Añade una nueva superficie a la Mesh especificada con datos editados.
Error create_from_surface(mesh: ArrayMesh, surface: int) 🔗
Utiliza la superficie especificada de la Mesh dada para poblar los datos de la MeshDataTool.
Requiere Mesh con el tipo primitivo Mesh.PRIMITIVE_TRIANGLES.
Devuelve el número de bordes en esta Mesh.
PackedInt32Array get_edge_faces(idx: int) const 🔗
Devuelve el conjunto de rostros que tocan el borde dado.
Variant get_edge_meta(idx: int) const 🔗
Devuelve la meta información asignada a un borde dado.
int get_edge_vertex(idx: int, vertex: int) const 🔗
Devuelve el índice del vertex especificado conectado al borde en el índice idx.
vertex solo puede ser 0 o 1, ya que los bordes se componen de dos vértices.
Devuelve el número de caras en esta Mesh.
int get_face_edge(idx: int, edge: int) const 🔗
Devuelve el borde asociado con la cara en el índice idx.
El argumento edge debe ser 0, 1 o 2 porque una cara solo tiene tres bordes.
Variant get_face_meta(idx: int) const 🔗
Devuelve los metadatos asociados con la cara dada.
Vector3 get_face_normal(idx: int) const 🔗
Calcula y devuelve la cara normal de la cara dada.
int get_face_vertex(idx: int, vertex: int) const 🔗
Returns the specified vertex index of the given face.
vertex must be either 0, 1, or 2 because faces contain three vertices.
var index = mesh_data_tool.get_face_vertex(0, 1) # Gets the index of the second vertex of the first face.
var position = mesh_data_tool.get_vertex(index)
var normal = mesh_data_tool.get_vertex_normal(index)
int index = meshDataTool.GetFaceVertex(0, 1); // Gets the index of the second vertex of the first face.
Vector3 position = meshDataTool.GetVertex(index);
Vector3 normal = meshDataTool.GetVertexNormal(index);
Devuelve el formato de la Mesh como una combinación de los flags de ArrayFormat. Por ejemplo, una malla que contiene tanto vértices como normales devolvería un formato de 3 porque Mesh.ARRAY_FORMAT_VERTEX es 1 y Mesh.ARRAY_FORMAT_NORMAL es 2.
Material get_material() const 🔗
Devuelve el material asignado a la Mesh.
Vector3 get_vertex(idx: int) const 🔗
Devuelve la posición del vértice dado.
PackedInt32Array get_vertex_bones(idx: int) const 🔗
Devuelve los huesos del vértice dado.
Color get_vertex_color(idx: int) const 🔗
Devuelve el color del vértice dado.
int get_vertex_count() const 🔗
Devuelve el número total de vértices en Mesh.
PackedInt32Array get_vertex_edges(idx: int) const 🔗
Devuelve un array de bordes que comparten el vértice dado.
PackedInt32Array get_vertex_faces(idx: int) const 🔗
Devuelve un array de caras que comparten el vértice dado.
Variant get_vertex_meta(idx: int) const 🔗
Devuelve los metadatos asociados con el vértice dado.
Vector3 get_vertex_normal(idx: int) const 🔗
Devuelve la normal del vértice dado.
Plane get_vertex_tangent(idx: int) const 🔗
Devuelve la tangente del vértice dado.
Vector2 get_vertex_uv(idx: int) const 🔗
Devuelve el UV del vértice dado.
Vector2 get_vertex_uv2(idx: int) const 🔗
Devuelve el UV2 del vértice dado.
PackedFloat32Array get_vertex_weights(idx: int) const 🔗
Devuelve los pesos del hueso del vértice dado.
void set_edge_meta(idx: int, meta: Variant) 🔗
Establece los metadatos del borde dado.
void set_face_meta(idx: int, meta: Variant) 🔗
Establece los metadatos de la cara dada.
void set_material(material: Material) 🔗
Establece el material a ser usado por la Mesh recién construida.
void set_vertex(idx: int, vertex: Vector3) 🔗
Establece la posición del vértice dado.
void set_vertex_bones(idx: int, bones: PackedInt32Array) 🔗
Establece los huesos del vértice dado.
void set_vertex_color(idx: int, color: Color) 🔗
Establece el color del vértice dado.
void set_vertex_meta(idx: int, meta: Variant) 🔗
Establece los metadatos asociados con el vértice dado.
void set_vertex_normal(idx: int, normal: Vector3) 🔗
Establece la normal del vértice dado.
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) 🔗
Establece el UV del vértice dado.
void set_vertex_uv2(idx: int, uv2: Vector2) 🔗
Establece el UV2 del vértice dado.
void set_vertex_weights(idx: int, weights: PackedFloat32Array) 🔗
Establece los pesos del hueso del vértice dado.