MeshDataTool

继承: RefCounted < Object

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 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.

方法

voidclear ( )
Errorcommit_to_surface ( mesh: ArrayMesh, compression_flags: int = 0 )
Errorcreate_from_surface ( mesh: ArrayMesh, surface: int )
intget_edge_count ( ) const1
PackedInt32Arrayget_edge_faces ( idx: int ) const1
Variantget_edge_meta ( idx: int ) const1
intget_edge_vertex ( idx: int, vertex: int ) const1
intget_face_count ( ) const1
intget_face_edge ( idx: int, edge: int ) const1
Variantget_face_meta ( idx: int ) const1
Vector3get_face_normal ( idx: int ) const1
intget_face_vertex ( idx: int, vertex: int ) const1
intget_format ( ) const1
Materialget_material ( ) const1
Vector3get_vertex ( idx: int ) const1
PackedInt32Arrayget_vertex_bones ( idx: int ) const1
Colorget_vertex_color ( idx: int ) const1
intget_vertex_count ( ) const1
PackedInt32Arrayget_vertex_edges ( idx: int ) const1
PackedInt32Arrayget_vertex_faces ( idx: int ) const1
Variantget_vertex_meta ( idx: int ) const1
Vector3get_vertex_normal ( idx: int ) const1
Planeget_vertex_tangent ( idx: int ) const1
Vector2get_vertex_uv ( idx: int ) const1
Vector2get_vertex_uv2 ( idx: int ) const1
PackedFloat32Arrayget_vertex_weights ( idx: int ) const1
voidset_edge_meta ( idx: int, meta: Variant )
voidset_face_meta ( idx: int, meta: Variant )
voidset_material ( material: Material )
voidset_vertex ( idx: int, vertex: Vector3 )
voidset_vertex_bones ( idx: int, bones: PackedInt32Array )
voidset_vertex_color ( idx: int, color: Color )
voidset_vertex_meta ( idx: int, meta: Variant )
voidset_vertex_normal ( idx: int, normal: Vector3 )
voidset_vertex_tangent ( idx: int, tangent: Plane )
voidset_vertex_uv ( idx: int, uv: Vector2 )
voidset_vertex_uv2 ( idx: int, uv2: Vector2 )
voidset_vertex_weights ( idx: int, weights: PackedFloat32Array )

方法说明

void clear ( )

Clears all data currently in MeshDataTool.


Error commit_to_surface ( mesh: ArrayMesh, compression_flags: int = 0 )

Adds a new surface to specified Mesh with edited data.


Error create_from_surface ( mesh: ArrayMesh, surface: int )

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

Requires Mesh with primitive type Mesh.PRIMITIVE_TRIANGLES.


int get_edge_count ( ) const1

Returns the number of edges in this Mesh.


PackedInt32Array get_edge_faces ( idx: int ) const1

Returns array of faces that touch given edge.


Variant get_edge_meta ( idx: int ) const1

Returns meta information assigned to given edge.


int get_edge_vertex ( idx: int, vertex: int ) const1

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 ( ) const1

Returns the number of faces in this Mesh.


int get_face_edge ( idx: int, edge: int ) const1

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 ( idx: int ) const1

Returns the metadata associated with the given face.


Vector3 get_face_normal ( idx: int ) const1

Calculates and returns the face normal of the given face.


int get_face_vertex ( idx: int, vertex: int ) const1

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);

int get_format ( ) const1

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 ( ) const1

Returns the material assigned to the Mesh.


Vector3 get_vertex ( idx: int ) const1

Returns the position of the given vertex.


PackedInt32Array get_vertex_bones ( idx: int ) const1

Returns the bones of the given vertex.


Color get_vertex_color ( idx: int ) const1

Returns the color of the given vertex.


int get_vertex_count ( ) const1

Returns the total number of vertices in Mesh.


PackedInt32Array get_vertex_edges ( idx: int ) const1

Returns an array of edges that share the given vertex.


PackedInt32Array get_vertex_faces ( idx: int ) const1

Returns an array of faces that share the given vertex.


Variant get_vertex_meta ( idx: int ) const1

Returns the metadata associated with the given vertex.


Vector3 get_vertex_normal ( idx: int ) const1

Returns the normal of the given vertex.


Plane get_vertex_tangent ( idx: int ) const1

Returns the tangent of the given vertex.


Vector2 get_vertex_uv ( idx: int ) const1

Returns the UV of the given vertex.


Vector2 get_vertex_uv2 ( idx: int ) const1

Returns the UV2 of the given vertex.


PackedFloat32Array get_vertex_weights ( idx: int ) const1

Returns bone weights of the given vertex.


void set_edge_meta ( idx: int, meta: Variant )

Sets the metadata of the given edge.


void set_face_meta ( idx: int, meta: Variant )

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 ( idx: int, vertex: Vector3 )

Sets the position of the given vertex.


void set_vertex_bones ( idx: int, bones: PackedInt32Array )

Sets the bones of the given vertex.


void set_vertex_color ( idx: int, color: Color )

Sets the color of the given vertex.


void set_vertex_meta ( idx: int, meta: Variant )

Sets the metadata associated with the given vertex.


void set_vertex_normal ( idx: int, normal: Vector3 )

Sets the normal of the given vertex.


void set_vertex_tangent ( idx: int, tangent: Plane )

Sets the tangent of the given vertex.


void set_vertex_uv ( idx: int, uv: Vector2 )

Sets the UV of the given vertex.


void set_vertex_uv2 ( idx: int, uv2: Vector2 )

Sets the UV2 of the given vertex.


void set_vertex_weights ( idx: int, weights: PackedFloat32Array )

Sets the bone weights of the given vertex.

2

本方法通常需要用户覆盖才能生效。

1

本方法无副作用,不会修改该实例的任何成员变量。

3

本方法除了能接受在此处描述的参数外,还能够继续接受任意数量的参数。

4

本方法用于构造某个类型。

5

调用本方法无需实例,可直接使用类名进行调用。

6

本方法描述的是使用本类型作为左操作数的有效运算符。

7

这个值是由下列位标志构成位掩码的整数。

8

无返回值。