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.
方法
方法说明
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
.
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.
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);
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.
本方法通常需要用户覆盖才能生效。
本方法无副作用,不会修改该实例的任何成员变量。
本方法除了能接受在此处描述的参数外,还能够继续接受任意数量的参数。
本方法用于构造某个类型。
调用本方法无需实例,可直接使用类名进行调用。
本方法描述的是使用本类型作为左操作数的有效运算符。
这个值是由下列位标志构成位掩码的整数。
无返回值。