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¶
继承: RefCounted < Object
用于访问和编辑 Mesh 数据的辅助工具。
描述¶
MeshDataTool 提供对 Mesh 中各个顶点的访问。它允许用户读取和编辑网格的顶点数据。它还创建了一系列面和边。
要使用 MeshDataTool,请使用 create_from_surface 加载一个网格。完成数据编辑后,使用 commit_to_surface 将数据提交到一个网格。
下面是如何使用 MeshDataTool 的示例。
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)
# 在这个例子中,我们将网格挤出一个单位,这会导致分离的面,因为它是平直着色的。
vertex += mdt.get_vertex_normal(i)
# 保存你的更改。
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);
// 在这个例子中,我们将网格挤出一个单位,这会导致分离的面,因为它是平直着色的。
vertex += mdt.GetVertexNormal(i);
// 保存你的更改。
mdt.SetVertex(i, vertex);
}
mesh.ClearSurfaces();
mdt.CommitToSurface(mesh);
var mi = new MeshInstance();
mi.Mesh = mesh;
AddChild(mi);
另请参阅 ArrayMesh、ImmediateMesh、和 SurfaceTool,以了解程序化几何生成。
注意:对于三角形基元模式的前面,Godot 使用顺时针缠绕顺序。
教程¶
方法¶
方法说明¶
void clear ( )
将当前 MeshDataTool 中所有的数据全部清除。
Error commit_to_surface ( ArrayMesh mesh, int compression_flags=0 )
使用编辑后的数据,向指定的 Mesh 中添加一个新的表面。
Error create_from_surface ( ArrayMesh mesh, int surface )
使用给定 Mesh 的指定表面来填充 MeshDataTool 的数据。
要求 Mesh 的图元类型为 Mesh.PRIMITIVE_TRIANGLES。
int get_edge_count ( ) const
返回这个 Mesh 的边数。
PackedInt32Array get_edge_faces ( int idx ) const
返回与给定边相邻的面数组。
Variant get_edge_meta ( int idx ) const
返回给定边的元数据。
int get_edge_vertex ( int idx, int vertex ) const
返回连接到给定边的指定顶点的索引。
顶点参数只能是 0 或 1,因为边是由两个顶点组成的。
int get_face_count ( ) const
返回这个 Mesh 中的面数。
int get_face_edge ( int idx, int edge ) const
返回与给定面关联的指定边。
边参数必须是 0、1、2 之一,因为面只有 3 条边。
Variant get_face_meta ( int idx ) const
返回与给定面关联的元数据。
Vector3 get_face_normal ( int idx ) const
计算并返回给定面的面法线。
int get_face_vertex ( int idx, int vertex ) const
返回给定面的指定顶点索引。
顶点参数必须为 0、1 或 2,因为面包含三个顶点。
示例:
var index = mesh_data_tool.get_face_vertex(0, 1) # 获取第一个面的第二个顶点的索引。
var position = mesh_data_tool.get_vertex(index)
var normal = mesh_data_tool.get_vertex_normal(index)
int index = meshDataTool.GetFaceVertex(0, 1); // 获取第一个面的第二个顶点的索引。
Vector3 position = meshDataTool.GetVertex(index);
Vector3 normal = meshDataTool.GetVertexNormal(index);
int get_format ( ) const
返回该 Mesh 的格式。该格式是一个整数,由 Mesh 格式标志组合在一起组成。例如,包含顶点和法线的网格将返回为 3
的格式,因为 Mesh.ARRAY_FORMAT_VERTEX 是 1
,而 Mesh.ARRAY_FORMAT_NORMAL 是 2
。
有关格式标志的列表,请参阅 ArrayFormat。
Material get_material ( ) const
返回分配给该 Mesh 的材质。
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
返回 Mesh 中顶点的总数。
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
返回给定顶点的 UV。
Vector2 get_vertex_uv2 ( int idx ) const
返回给定顶点的 UV2。
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 )
设置新构建的 Mesh 使用的材质。
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 )
设置给定顶点的 UV。
void set_vertex_uv2 ( int idx, Vector2 uv2 )
设置给定顶点的 UV2。
void set_vertex_weights ( int idx, PackedFloat32Array weights )
设置给定顶点的骨骼权重。