ArrayMesh
继承: Mesh < Resource < RefCounted < Object
Mesh 网格类型,提供了用于从数组构造表面的工具。
描述
ArrayMesh 是用来构造 Mesh 的,其属性指定为数组。
最基本的例子是创建单个三角形:
GDScriptC#
var vertices = PackedVector3Array()
vertices.push_back(Vector3(0, 1, 0))
vertices.push_back(Vector3(1, 0, 0))
vertices.push_back(Vector3(0, 0, 1))
# 初始化 ArrayMesh。
var arr_mesh = ArrayMesh.new()
var arrays = []
arrays.resize(Mesh.ARRAY_MAX)
arrays[Mesh.ARRAY_VERTEX] = vertices
# 创建 Mesh。
arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
var m = MeshInstance3D.new()
m.mesh = arr_mesh
var vertices = new Vector3[]
{
new Vector3(0, 1, 0),
new Vector3(1, 0, 0),
new Vector3(0, 0, 1),
};
// 初始化 ArrayMesh。
var arrMesh = new ArrayMesh();
var arrays = new Godot.Collections.Array();
arrays.Resize((int)Mesh.ArrayType.Max);
arrays[(int)Mesh.ArrayType.Vertex] = vertices;
// 创建 Mesh。
arrMesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, arrays);
var m = new MeshInstance3D();
m.Mesh = arrMesh;
这个 MeshInstance3D 就可以添加到要显示的 SceneTree 中了。
程序几何体生成请参阅 ImmediateMesh、MeshDataTool、SurfaceTool。
注意:Godot 对三角形图元模式的正面使用顺时针环绕顺序。
教程
属性
| ||
| ||
方法
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 | |
void | |
get_blend_shape_count() const | |
get_blend_shape_name(index: int) const | |
lightmap_unwrap(transform: Transform3D, texel_size: float) | |
void | |
void | set_blend_shape_name(index: int, name: StringName) |
surface_find_by_name(name: String) const | |
surface_get_array_index_len(surf_idx: int) const | |
surface_get_array_len(surf_idx: int) const | |
BitField[ArrayFormat] | surface_get_format(surf_idx: int) const |
surface_get_name(surf_idx: int) const | |
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
🔗
void set_blend_shape_mode(value: BlendShapeMode)
BlendShapeMode get_blend_shape_mode()
将混合形状模式设置为 BlendShapeMode 之一。
AABB custom_aabb = AABB(0, 0, 0, 0, 0, 0)
🔗
用用户定义的用于使用视锥剔除的一种替代 AABB。在使用着色器偏移顶点时,避免非预期的剔除特别有用。
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_VERTEX、Mesh.ARRAY_NORMAL 和 Mesh.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_UPDATE、Mesh.ARRAY_FLAG_USE_8_BONE_WEIGHTS 或 Mesh.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) 🔗
该方法目前没有描述,请帮我们贡献一个吧!