ArrayMesh¶
继承: Mesh < Resource < RefCounted < Object
Mesh类型,提供从数组构造曲面的实用程序。
描述¶
ArrayMesh用于通过将属性指定为数组来构造Mesh。
最基本的例子是创建单个三角形:
var vertices = PackedVector3Array()
vertices.push_back(Vector3(0, 1, 0))
vertices.push_back(Vector3(1, 0, 0))
vertices.push_back(Vector3(0, 0, 1))
# 初始化数组网格。
var arr_mesh = ArrayMesh.new()
var arrays = []
arrays.resize(Mesh.ARRAY_MAX)
arrays[Mesh.ARRAY_VERTEX] = vertices
# 创建网格。
arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
var m = MeshRender.new()
m.mesh = arr_mesh
Vector3[] vertices =
[
new Vector3(0, 1, 0),
new Vector3(1, 0, 0),
new Vector3(0, 0, 1),
];
// 初始化数组网格。
var arrMesh = new ArrayMesh();
i3D.Collections.Array arrays = [];
arrays.Resize((int)Mesh.ArrayType.Max);
arrays[(int)Mesh.ArrayType.Vertex] = vertices;
// 创建网格。
arrMesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, arrays);
var m = new MeshRender();
m.Mesh = arrMesh;
MeshRender已准备好添加到SceneTree中显示。
有关程序几何体生成,请参阅ImmediateMesh、MeshDataTool和SurfaceTool。
注意: i3D对三角形图元模式的正面使用顺时针环绕顺序。
属性¶
|
||
|
||
方法¶
属性说明¶
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覆盖AABB。在使用着色器偏移顶点时避免意外剔除特别有用。
一个可选的网格,可用于渲染阴影和深度预通。可用于通过提供具有融合顶点和仅顶点位置数据(没有法线、UV、颜色等)的网格来提高性能。
注意:此网格必须具有与源网格完全相同的顶点位置(包括源网格的LOD,如果存在)。如果顶点位置不同,则网格将无法正确绘制。
方法说明¶
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的相应成员所描述的,如果曲面没有使用它。例如,数组[0]是顶点数组。第一个顶点子数组总是必需的;其他的是可选的。添加索引数组会使该曲面进入“索引模式”,其中顶点和其他数组成为数据源,索引数组定义顶点顺序。所有子数组必须与顶点数组具有相同的长度(或者是顶点数组长度的精确倍数,当子数组的多个元素对应于单个顶点时)或为空,如果使用Mesh.ARRAY_INDEX除外。
blend_shapes参数是每个混合形状的顶点数据数组。每个元素都是一个与arrays结构相同的数组,但是当且仅当它们在arrays中设置时才设置Mesh.ARRAY_VERTEX、Mesh.ARRAY_NORMAL和Mesh.ARRAY_TANGENT,所有其他条目都是空。
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_remove(surf_idx: int) 🔗
从网格中移除给定索引处的曲面,将索引较高的曲面向下移动1。
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) 🔗
该方法目前没有描述!