MeshDataTool

Inherits: Reference < Object

用于帮助编辑和使用 Mesh 网格数据的工具。

描述

MeshDataTool提供对Mesh中单个顶点的访问。它允许用户读取和编辑网格的顶点数据。还可以创建面和边的数组。

要使用MeshDataTool,请使用create_from_surface加载网格。当完成编辑数据后,用commit_to_surface将数据提交给Mesh。

下面是如何使用MeshDataTool的例子。

  1. var mesh = ArrayMesh.new()
  2. mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, CubeMesh.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. # 在这个例子中,我们将Mesh扩展了一个单元,这样就会产生分离的面,因为它是平面阴影。
  8. vertex += mdt.get_vertex_normal(i)
  9. # 保存你的改动。
  10. mdt.set_vertex(i, vertex)
  11. mesh.surface_remove(0)
  12. mdt.commit_to_surface(mesh)
  13. var mi = MeshInstance.new()
  14. mi.mesh = mesh
  15. add_child(mi)

参阅ArrayMeshImmediateGeometrySurfaceTool的程序性几何体生成。

注意: Godot对三角形原始模式的前端面使用顺时针缠绕顺序

方法

void

clear ( )

Error

commit_to_surface ( ArrayMesh mesh )

Error

create_from_surface ( ArrayMesh mesh, int surface )

int

get_edge_count ( ) const

PoolIntArray

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

PoolIntArray

get_vertex_bones ( int idx ) const

Color

get_vertex_color ( int idx ) const

int

get_vertex_count ( ) const

PoolIntArray

get_vertex_edges ( int idx ) const

PoolIntArray

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

PoolRealArray

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, PoolIntArray 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, PoolRealArray weights )

方法说明

  • void clear ( )

将当前MeshDataTool中所有的数据全部清除。


使用编辑后的数据,向特定的Mesh中添加一个新的面。


使用给定Mesh的指定表面来填充MeshDataTool的数据。

要求Mesh具有基本类型Mesh.PRIMITIVE_TRIANGLES


  • int get_edge_count ( ) const

返回这个Mesh的边数。


返回与给定边相邻的面数组。


返回给定边的元数据。


  • 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

返回与给定面关联的指定边。

Edge参数必须小于等于2,因为面只有3条边。


返回与给定面关联的元数据。


计算并返回给定面的面法线。


  • int get_face_vertex ( int idx, int vertex ) const

返回给定面的指定顶点。

顶点参数必须小于等于2,因为面包含3个顶点。


  • int get_format ( ) const

返回 Mesh 的格式,该格式是由 Mesh 格式标识组合而成的整数。例如,一个同时包含顶点和法线的网格将返回3格式,因为 ArrayMesh.ARRAY_FORMAT_VERTEX = 1ArrayMesh.ARRAY_FORMAT_NORMAL = 2

参阅 ArrayFormat 的格式标识列表。


返回分配给Mesh的材质。


返回给定索引处的顶点。


返回给定顶点的骨架。


  • Color get_vertex_color ( int idx ) const

返回给定顶点的颜色。


  • int get_vertex_count ( ) const

返回Mesh中顶点的总数。


返回共享给定顶点的边的数组。


返回共享给定顶点的面数组。


返回与给定顶点关联的元数据。


返回给定顶点的法线。


  • Plane get_vertex_tangent ( int idx ) const

返回给定顶点的正切值。


返回给定顶点的UV。


返回给定顶点的UV2。


返回给定顶点的骨骼权重。


设置给定边的元数据。


设置给定面的元数据。


  • void set_material ( Material material )

设置新构建的Mesh使用的材质。


设置给定顶点的位置。


设置给定顶点的骨架。


  • void set_vertex_color ( int idx, Color color )

设置给定顶点的颜色。


设置与给定顶点关联的元数据。


  • void set_vertex_normal ( int idx, Vector3 normal )

设置给定顶点的法线。


  • void set_vertex_tangent ( int idx, Plane tangent )

设置给定顶点的切线。


设置给定顶点的UV。


设置给定顶点的UV2。


设置给定顶点的骨骼权重。