ArrayMesh

继承: Mesh < Resource < RefCounted < Object

Mesh 网格类型,提供了用于从数组构造表面的工具。

描述

ArrayMesh 是用来构造 Mesh 的,其属性指定为数组。

最基本的例子是创建单个三角形:

GDScriptC#

  1. var vertices = PackedVector3Array()
  2. vertices.push_back(Vector3(0, 1, 0))
  3. vertices.push_back(Vector3(1, 0, 0))
  4. vertices.push_back(Vector3(0, 0, 1))
  5. # 初始化 ArrayMesh。
  6. var arr_mesh = ArrayMesh.new()
  7. var arrays = []
  8. arrays.resize(Mesh.ARRAY_MAX)
  9. arrays[Mesh.ARRAY_VERTEX] = vertices
  10. # 创建 Mesh。
  11. arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
  12. var m = MeshInstance3D.new()
  13. m.mesh = arr_mesh
  1. var vertices = new Vector3[]
  2. {
  3. new Vector3(0, 1, 0),
  4. new Vector3(1, 0, 0),
  5. new Vector3(0, 0, 1),
  6. };
  7. // 初始化 ArrayMesh。
  8. var arrMesh = new ArrayMesh();
  9. var arrays = new Godot.Collections.Array();
  10. arrays.Resize((int)Mesh.ArrayType.Max);
  11. arrays[(int)Mesh.ArrayType.Vertex] = vertices;
  12. // 创建 Mesh。
  13. arrMesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, arrays);
  14. var m = new MeshInstance3D();
  15. m.Mesh = arrMesh;

这个 MeshInstance3D 就可以添加到要显示的 SceneTree 中了。

程序几何体生成请参阅 ImmediateMeshMeshDataToolSurfaceTool

注意:Godot 对三角形图元模式的正面使用顺时针环绕顺序

教程

属性

BlendShapeMode

blend_shape_mode

1

AABB

custom_aabb

AABB(0, 0, 0, 0, 0, 0)

ArrayMesh

shadow_mesh

方法

void

add_blend_shape(name: StringName)

void

add_surface_from_arrays(primitive: PrimitiveType, arrays: Array, blend_shapes: Array[Array] = [], lods: Dictionary = {}, flags: BitField[ArrayFormat] = 0)

void

clear_blend_shapes()

void

clear_surfaces()

int

get_blend_shape_count() const

StringName

get_blend_shape_name(index: int) const

Error

lightmap_unwrap(transform: Transform3D, texel_size: float)

void

regen_normal_maps()

void

set_blend_shape_name(index: int, name: StringName)

int

surface_find_by_name(name: String) const

int

surface_get_array_index_len(surf_idx: int) const

int

surface_get_array_len(surf_idx: int) const

BitField[ArrayFormat]

surface_get_format(surf_idx: int) const

String

surface_get_name(surf_idx: int) const

PrimitiveType

surface_get_primitive_type(surf_idx: int) const

void

surface_set_name(surf_idx: int, name: String)

void

surface_update_attribute_region(surf_idx: int, offset: int, data: PackedByteArray)

void

surface_update_skin_region(surf_idx: int, offset: int, data: PackedByteArray)

void

surface_update_vertex_region(surf_idx: int, offset: int, data: PackedByteArray)


属性说明

BlendShapeMode blend_shape_mode = 1 🔗

将混合形状模式设置为 BlendShapeMode 之一。


AABB custom_aabb = AABB(0, 0, 0, 0, 0, 0) 🔗

  • void set_custom_aabb(value: AABB)

  • AABB get_custom_aabb()

用用户定义的用于使用视锥剔除的一种替代 AABB。在使用着色器偏移顶点时,避免非预期的剔除特别有用。


ArrayMesh shadow_mesh 🔗

An optional mesh which can be used for rendering shadows and the depth prepass. Can be used to increase performance by supplying a mesh with fused vertices and only vertex position data (without normals, UVs, colors, etc.).

Note: This mesh must have exactly the same vertex positions as the source mesh (including the source mesh’s LODs, if present). If vertex positions differ, then the mesh will not draw correctly.


方法说明

void add_blend_shape(name: StringName) 🔗

为混合形状添加名称,该形状将用 add_surface_from_arrays 添加。必须在添加面之前调用。


void add_surface_from_arrays(primitive: PrimitiveType, arrays: Array, blend_shapes: Array[Array] = [], lods: Dictionary = {}, flags: BitField[ArrayFormat] = 0) 🔗

创建一个新的表面。Mesh.get_surface_count 将成为这个新表面的 surf_idx

创建表面以使用 primitive 进行渲染,它可以是 PrimitiveType 中定义的任何值。

arrays 参数是数组的数组。每个 Mesh.ARRAY_MAX 元素都包含一个数组,其中包含此表面的一些网格数据,如 ArrayType 的相应成员所描述的一样;如果它未被使用,则为 null。例如,arrays[0] 是顶点数组。始终需要第一个顶点子数组;其他的是可选的。添加索引数组会将此表面置于“索引模式”,其中顶点和其他数组成为数据源,索引数组定义顶点顺序。所有子数组的长度必须与顶点数组的长度相同(或者是顶点数组长度的精确倍数,当子数组的多个元素对应于单个顶点时);或者为空,如果使用了 Mesh.ARRAY_INDEX 则除外。

blend_shapes 参数是每个混合形状的顶点数据数组。 每个元素都是与 arrays 具有相同结构的数组,但是 Mesh.ARRAY_VERTEXMesh.ARRAY_NORMALMesh.ARRAY_TANGENT 这些条目,当且仅当在 arrays 被设置且所有其他条目都是 null 时,会被设置。

lods 参数是一个带有 float 键和 PackedInt32Array 值的字典。字典中的每个条目代表了表面的一个 LOD 级别,其中值是用于 LOD 级别的 Mesh.ARRAY_INDEX 数组,键大致与使用 LOD 统计信息的距离成正比。即,增加 LOD 的关键点也会增加在使用 LOD 之前对象必须与相机的距离。

flags 参数是根据需要按位或的:ArrayCustomFormat 的一个值左移 ARRAY_FORMAT_CUSTOMn_SHIFT,用于每个正在使用的自定义通道,Mesh.ARRAY_FLAG_USE_DYNAMIC_UPDATEMesh.ARRAY_FLAG_USE_8_BONE_WEIGHTSMesh.ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY

注意:使用索引时,建议只使用点、线或三角形。


void clear_blend_shapes() 🔗

移除此 ArrayMesh 的所有混合形状。


void clear_surfaces() 🔗

移除此 ArrayMesh 的所有表面。


int get_blend_shape_count() const 🔗

返回 ArrayMesh 持有的混合形状的数量。


StringName get_blend_shape_name(index: int) const 🔗

返回此索引处的混合形状的名称。


Error lightmap_unwrap(transform: Transform3D, texel_size: float) 🔗

ArrayMesh 上执行 UV 展开,为光照贴图准备该网格。


void regen_normal_maps() 🔗

为每个 ArrayMesh 的表面重新生成切线。


void set_blend_shape_name(index: int, name: StringName) 🔗

在此索引处设置混合形状的名称。


int surface_find_by_name(name: String) const 🔗

返回此 ArrayMesh 中带有此名称的第一个曲面的索引。如果没有找到,则返回 -1。


int surface_get_array_index_len(surf_idx: int) const 🔗

返回所请求的面中索引数组的索引长度(参见 add_surface_from_arrays)。


int surface_get_array_len(surf_idx: int) const 🔗

返回所请求曲面中顶点数组的顶点长度(见 add_surface_from_arrays)。


BitField[ArrayFormat] surface_get_format(surf_idx: int) const 🔗

返回所请求表面的格式掩码(见 add_surface_from_arrays)。


String surface_get_name(surf_idx: int) const 🔗

获取分配给此表面的名称。


PrimitiveType surface_get_primitive_type(surf_idx: int) const 🔗

返回所请求曲面的图元类型(见 add_surface_from_arrays)。


void surface_set_name(surf_idx: int, name: String) 🔗

设置给定曲面的名称。


void surface_update_attribute_region(surf_idx: int, offset: int, data: PackedByteArray) 🔗

该方法目前没有描述,请帮我们贡献一个吧!


void surface_update_skin_region(surf_idx: int, offset: int, data: PackedByteArray) 🔗

该方法目前没有描述,请帮我们贡献一个吧!


void surface_update_vertex_region(surf_idx: int, offset: int, data: PackedByteArray) 🔗

该方法目前没有描述,请帮我们贡献一个吧!