Helper tool to access and edit [Mesh] data. 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 [method create_from_surface]. When you are finished editing the data commit the data to a mesh with [method commit_to_surface]. Below is an example of how MeshDataTool may be used. [codeblocks] [gdscript] 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.surface_remove(0) mdt.commit_to_surface(mesh) var mi = MeshInstance.new() mi.mesh = mesh add_child(mi) [/gdscript] [csharp] 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.SurfaceRemove(0); mdt.CommitToSurface(mesh); var mi = new MeshInstance(); mi.Mesh = mesh; AddChild(mi); [/csharp] [/codeblocks] See also [ArrayMesh], [ImmediateMesh] and [SurfaceTool] for procedural geometry generation. [b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-OpenGL/Face-culling]winding order[/url] for front faces of triangle primitive modes. Clears all data currently in MeshDataTool. Adds a new surface to specified [Mesh] with edited data. Uses specified surface of given [Mesh] to populate data for MeshDataTool. Requires [Mesh] with primitive type [constant Mesh.PRIMITIVE_TRIANGLES]. Returns the number of edges in this [Mesh]. Returns array of faces that touch given edge. Returns meta information assigned to given edge. Returns index of specified vertex connected to given edge. Vertex argument can only be 0 or 1 because edges are comprised of two vertices. Returns the number of faces in this [Mesh]. Returns specified edge associated with given face. Edge argument must 2 or less because a face only has three edges. Returns the metadata associated with the given face. Calculates and returns the face normal of the given face. Returns the specified vertex of the given face. Vertex argument must be 2 or less because faces contain three vertices. Returns the [Mesh]'s format. Format is an integer made up of [Mesh] format flags combined together. For example, a mesh containing both vertices and normals would return a format of [code]3[/code] because [constant Mesh.ARRAY_FORMAT_VERTEX] is [code]1[/code] and [constant Mesh.ARRAY_FORMAT_NORMAL] is [code]2[/code]. See [enum Mesh.ArrayFormat] for a list of format flags. Returns the material assigned to the [Mesh]. Returns the vertex at given index. Returns the bones of the given vertex. Returns the color of the given vertex. Returns the total number of vertices in [Mesh]. Returns an array of edges that share the given vertex. Returns an array of faces that share the given vertex. Returns the metadata associated with the given vertex. Returns the normal of the given vertex. Returns the tangent of the given vertex. Returns the UV of the given vertex. Returns the UV2 of the given vertex. Returns bone weights of the given vertex. Sets the metadata of the given edge. Sets the metadata of the given face. Sets the material to be used by newly-constructed [Mesh]. Sets the position of the given vertex. Sets the bones of the given vertex. Sets the color of the given vertex. Sets the metadata associated with the given vertex. Sets the normal of the given vertex. Sets the tangent of the given vertex. Sets the UV of the given vertex. Sets the UV2 of the given vertex. Sets the bone weights of the given vertex.