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
Hérite de : RefCounted < Object
Un outil d'aide pour accéder et modifier les données des Mesh.
Description
MeshDataTool provides access to individual vertices in a Mesh. It allows users to read and edit vertex data of meshes. It also creates an array of faces and edges.
To use MeshDataTool, load a mesh with create_from_surface(). When you are finished editing the data commit the data to a mesh with commit_to_surface().
Below is an example of how MeshDataTool may be used.
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 this example we extend the mesh by one unit, which results in separated faces as it is flat shaded.
vertex += mdt.get_vertex_normal(i)
# Save your change.
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 this example we extend the mesh by one unit, which results in separated faces as it is flat shaded.
vertex += mdt.GetVertexNormal(i);
// Save your change.
mdt.SetVertex(i, vertex);
}
mesh.ClearSurfaces();
mdt.CommitToSurface(mesh);
var mi = new MeshInstance();
mi.Mesh = mesh;
AddChild(mi);
See also ArrayMesh, ImmediateMesh and SurfaceTool for procedural geometry generation.
Note: Godot uses clockwise winding order for front faces of triangle primitive modes.
Tutoriels
Méthodes
Descriptions des méthodes
void clear() 🔗
Efface toutes les données actuellement dans le MeshDataTool.
Error commit_to_surface(mesh: ArrayMesh, compression_flags: int = 0) 🔗
Ajoute une nouvelle surface au Mesh spécifié avec les données modifiées.
Error create_from_surface(mesh: ArrayMesh, surface: int) 🔗
Utiliser la surface spécifiée de Mesh pour construire les données pour le MeshDataTool.
Nécessite un Mesh de type primitif Mesh.PRIMITIVE_TRIANGLES.
Renvoie le nombre d'arêtes dans ce Mesh.
PackedInt32Array get_edge_faces(idx: int) const 🔗
Renvoie le tableau des faces qui touchent l'arête donnée.
Variant get_edge_meta(idx: int) const 🔗
Renvoie les méta-données assignées à l'arête donnée.
int get_edge_vertex(idx: int, vertex: int) const 🔗
Returns the index of the specified vertex connected to the edge at index idx.
vertex can only be 0 or 1, as edges are composed of two vertices.
Renvoie le nombre de faces dans ce Mesh.
int get_face_edge(idx: int, edge: int) const 🔗
Returns the edge associated with the face at index idx.
edge argument must be either 0, 1, or 2 because a face only has three edges.
Variant get_face_meta(idx: int) const 🔗
Renvoie les méta-données associées à la face donnée.
Vector3 get_face_normal(idx: int) const 🔗
Calcule et renvoie la normale de face de la face donnée.
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);
Returns the Mesh's format as a combination of the ArrayFormat flags. For example, a mesh containing both vertices and normals would return a format of 3 because Mesh.ARRAY_FORMAT_VERTEX is 1 and Mesh.ARRAY_FORMAT_NORMAL is 2.
Material get_material() const 🔗
Renvoie la matériau assigné au Mesh.
Vector3 get_vertex(idx: int) const 🔗
Renvoie la position du sommet donné.
PackedInt32Array get_vertex_bones(idx: int) const 🔗
Renvoie les os du sommet donné.
Color get_vertex_color(idx: int) const 🔗
Renvoie la couleur du sommet donné.
int get_vertex_count() const 🔗
Renvoie le nombre total de sommet dans le Mesh.
PackedInt32Array get_vertex_edges(idx: int) const 🔗
Renvoie une liste des arêtes partageant le sommet donné.
PackedInt32Array get_vertex_faces(idx: int) const 🔗
Renvoie le tableau des faces partageant le sommet donné.
Variant get_vertex_meta(idx: int) const 🔗
Renvoie les méta-données associées au sommet donné.
Vector3 get_vertex_normal(idx: int) const 🔗
Renvoie la normale du sommet donné.
Plane get_vertex_tangent(idx: int) const 🔗
Renvoie la tangente du sommet donné.
Vector2 get_vertex_uv(idx: int) const 🔗
Renvoie l'UV du sommet donné.
Vector2 get_vertex_uv2(idx: int) const 🔗
Renvoie l'UV2 du sommet donné.
PackedFloat32Array get_vertex_weights(idx: int) const 🔗
Renvoie le poids des os du sommet donné.
void set_edge_meta(idx: int, meta: Variant) 🔗
Définit les méta-données pour le sommet donné.
void set_face_meta(idx: int, meta: Variant) 🔗
Définit les méta-données pour la face donnée.
void set_material(material: Material) 🔗
Définit le matériau à utiliser pour le nouveau Mesh construit.
void set_vertex(idx: int, vertex: Vector3) 🔗
Définit la position du sommet donné.
void set_vertex_bones(idx: int, bones: PackedInt32Array) 🔗
Définit les os du sommet donné.
void set_vertex_color(idx: int, color: Color) 🔗
Définit la couleur du sommet donné.
void set_vertex_meta(idx: int, meta: Variant) 🔗
Définit les méta-données associées du sommet donné.
void set_vertex_normal(idx: int, normal: Vector3) 🔗
Définit la normale du sommet donné.
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) 🔗
Définit l'UV du sommet donné.
void set_vertex_uv2(idx: int, uv2: Vector2) 🔗
Définit l'UV2 du sommet donné.
void set_vertex_weights(idx: int, weights: PackedFloat32Array) 🔗
Définit les poids des os du sommet donné.