Up to date

This page is up to date for Godot 4.0. If you still find outdated information, please open an issue.

MeshDataTool

Inherits: RefCounted < Object

Helper tool to access and edit Mesh data.

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.

GDScriptC#

  1. var mesh = ArrayMesh.new()
  2. mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, BoxMesh.new().get_mesh_arrays())
  3. var mdt = MeshDataTool.new()
  4. mdt.create_from_surface(mesh, 0)
  5. for i in range(mdt.get_vertex_count()):
  6. var vertex = mdt.get_vertex(i)
  7. # In this example we extend the mesh by one unit, which results in separated faces as it is flat shaded.
  8. vertex += mdt.get_vertex_normal(i)
  9. # Save your change.
  10. mdt.set_vertex(i, vertex)
  11. mesh.clear_surfaces()
  12. mdt.commit_to_surface(mesh)
  13. var mi = MeshInstance.new()
  14. mi.mesh = mesh
  15. add_child(mi)
  1. var mesh = new ArrayMesh();
  2. mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, new BoxMesh().GetMeshArrays());
  3. var mdt = new MeshDataTool();
  4. mdt.CreateFromSurface(mesh, 0);
  5. for (var i = 0; i < mdt.GetVertexCount(); i++)
  6. {
  7. Vector3 vertex = mdt.GetVertex(i);
  8. // In this example we extend the mesh by one unit, which results in separated faces as it is flat shaded.
  9. vertex += mdt.GetVertexNormal(i);
  10. // Save your change.
  11. mdt.SetVertex(i, vertex);
  12. }
  13. mesh.ClearSurfaces();
  14. mdt.CommitToSurface(mesh);
  15. var mi = new MeshInstance();
  16. mi.Mesh = mesh;
  17. 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.

Methods

void

clear ( )

Error

commit_to_surface ( ArrayMesh mesh )

Error

create_from_surface ( ArrayMesh mesh, int surface )

int

get_edge_count ( ) const

PackedInt32Array

get_edge_faces ( int idx ) const

Variant

get_edge_meta ( int idx ) const

int

get_edge_vertex ( int idx, int vertex ) const

int

get_face_count ( ) const

int

get_face_edge ( int idx, int edge ) const

Variant

get_face_meta ( int idx ) const

Vector3

get_face_normal ( int idx ) const

int

get_face_vertex ( int idx, int vertex ) const

int

get_format ( ) const

Material

get_material ( ) const

Vector3

get_vertex ( int idx ) const

PackedInt32Array

get_vertex_bones ( int idx ) const

Color

get_vertex_color ( int idx ) const

int

get_vertex_count ( ) const

PackedInt32Array

get_vertex_edges ( int idx ) const

PackedInt32Array

get_vertex_faces ( int idx ) const

Variant

get_vertex_meta ( int idx ) const

Vector3

get_vertex_normal ( int idx ) const

Plane

get_vertex_tangent ( int idx ) const

Vector2

get_vertex_uv ( int idx ) const

Vector2

get_vertex_uv2 ( int idx ) const

PackedFloat32Array

get_vertex_weights ( int idx ) const

void

set_edge_meta ( int idx, Variant meta )

void

set_face_meta ( int idx, Variant meta )

void

set_material ( Material material )

void

set_vertex ( int idx, Vector3 vertex )

void

set_vertex_bones ( int idx, PackedInt32Array bones )

void

set_vertex_color ( int idx, Color color )

void

set_vertex_meta ( int idx, Variant meta )

void

set_vertex_normal ( int idx, Vector3 normal )

void

set_vertex_tangent ( int idx, Plane tangent )

void

set_vertex_uv ( int idx, Vector2 uv )

void

set_vertex_uv2 ( int idx, Vector2 uv2 )

void

set_vertex_weights ( int idx, PackedFloat32Array weights )


Method Descriptions

void clear ( )

Clears all data currently in MeshDataTool.


Error commit_to_surface ( ArrayMesh mesh )

Adds a new surface to specified Mesh with edited data.


Error create_from_surface ( ArrayMesh mesh, int surface )

Uses specified surface of given Mesh to populate data for MeshDataTool.

Requires Mesh with primitive type Mesh.PRIMITIVE_TRIANGLES.


int get_edge_count ( ) const

Returns the number of edges in this Mesh.


PackedInt32Array get_edge_faces ( int idx ) const

Returns array of faces that touch given edge.


Variant get_edge_meta ( int idx ) const

Returns meta information assigned to given edge.


int get_edge_vertex ( int idx, int vertex ) const

Returns index of specified vertex connected to given edge.

Vertex argument can only be 0 or 1 because edges are comprised of two vertices.


int get_face_count ( ) const

Returns the number of faces in this Mesh.


int get_face_edge ( int idx, int edge ) const

Returns specified edge associated with given face.

Edge argument must be either 0, 1, or 2 because a face only has three edges.


Variant get_face_meta ( int idx ) const

Returns the metadata associated with the given face.


Vector3 get_face_normal ( int idx ) const

Calculates and returns the face normal of the given face.


int get_face_vertex ( int idx, int vertex ) const

Returns the specified vertex of the given face.

Vertex argument must be either 0, 1, or 2 because faces contain three vertices.


int get_format ( ) const

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 3 because Mesh.ARRAY_FORMAT_VERTEX is 1 and Mesh.ARRAY_FORMAT_NORMAL is 2.

See ArrayFormat for a list of format flags.


Material get_material ( ) const

Returns the material assigned to the Mesh.


Vector3 get_vertex ( int idx ) const

Returns the vertex at given index.


PackedInt32Array get_vertex_bones ( int idx ) const

Returns the bones of the given vertex.


Color get_vertex_color ( int idx ) const

Returns the color of the given vertex.


int get_vertex_count ( ) const

Returns the total number of vertices in Mesh.


PackedInt32Array get_vertex_edges ( int idx ) const

Returns an array of edges that share the given vertex.


PackedInt32Array get_vertex_faces ( int idx ) const

Returns an array of faces that share the given vertex.


Variant get_vertex_meta ( int idx ) const

Returns the metadata associated with the given vertex.


Vector3 get_vertex_normal ( int idx ) const

Returns the normal of the given vertex.


Plane get_vertex_tangent ( int idx ) const

Returns the tangent of the given vertex.


Vector2 get_vertex_uv ( int idx ) const

Returns the UV of the given vertex.


Vector2 get_vertex_uv2 ( int idx ) const

Returns the UV2 of the given vertex.


PackedFloat32Array get_vertex_weights ( int idx ) const

Returns bone weights of the given vertex.


void set_edge_meta ( int idx, Variant meta )

Sets the metadata of the given edge.


void set_face_meta ( int idx, Variant meta )

Sets the metadata of the given face.


void set_material ( Material material )

Sets the material to be used by newly-constructed Mesh.


void set_vertex ( int idx, Vector3 vertex )

Sets the position of the given vertex.


void set_vertex_bones ( int idx, PackedInt32Array bones )

Sets the bones of the given vertex.


void set_vertex_color ( int idx, Color color )

Sets the color of the given vertex.


void set_vertex_meta ( int idx, Variant meta )

Sets the metadata associated with the given vertex.


void set_vertex_normal ( int idx, Vector3 normal )

Sets the normal of the given vertex.


void set_vertex_tangent ( int idx, Plane tangent )

Sets the tangent of the given vertex.


void set_vertex_uv ( int idx, Vector2 uv )

Sets the UV of the given vertex.


void set_vertex_uv2 ( int idx, Vector2 uv2 )

Sets the UV2 of the given vertex.


void set_vertex_weights ( int idx, PackedFloat32Array weights )

Sets the bone weights of the given vertex.