MeshDataTool
继承: RefCounted < Object
用于访问和编辑 Mesh 数据的辅助工具。
描述
MeshDataTool 提供对 Mesh 中各个顶点的访问。它允许用户读取和编辑网格的顶点数据。它还创建了一系列面和边。
要使用 MeshDataTool,请使用 create_from_surface 加载一个网格。完成数据编辑后,使用 commit_to_surface 将数据提交到一个网格。
下面是如何使用 MeshDataTool 的示例。
GDScriptC#
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,因为面包含三个顶点。
示例:
GDScriptC#
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 )
设置给定顶点的骨骼权重。
© 版权所有 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0). Revision b1c660f7
.
Built with Sphinx using a theme provided by Read the Docs.