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 ( StringName name ) |
void | add_surface_from_arrays ( PrimitiveType primitive, Array arrays, Array[] blend_shapes=[], Dictionary lods={}, BitField<ArrayFormat> flags=0 ) |
void | |
void | clear_surfaces ( ) |
get_blend_shape_count ( ) const | |
get_blend_shape_name ( int index ) const | |
lightmap_unwrap ( Transform3D transform, float texel_size ) | |
void | |
void | set_blend_shape_name ( int index, StringName name ) |
surface_find_by_name ( String name ) const | |
surface_get_array_index_len ( int surf_idx ) const | |
surface_get_array_len ( int surf_idx ) const | |
BitField<ArrayFormat> | surface_get_format ( int surf_idx ) const |
surface_get_name ( int surf_idx ) const | |
surface_get_primitive_type ( int surf_idx ) const | |
void | surface_set_name ( int surf_idx, String name ) |
void | surface_update_attribute_region ( int surf_idx, int offset, PackedByteArray data ) |
void | surface_update_skin_region ( int surf_idx, int offset, PackedByteArray data ) |
void | surface_update_vertex_region ( int surf_idx, int offset, PackedByteArray data ) |
属性说明
BlendShapeMode blend_shape_mode = 1
void set_blend_shape_mode ( BlendShapeMode value )
BlendShapeMode get_blend_shape_mode ( )
将混合形状模式设置为 BlendShapeMode 之一。
AABB custom_aabb = AABB(0, 0, 0, 0, 0, 0)
用用户定义的用于使用视锥剔除的一种替代 AABB。在使用着色器偏移顶点时,避免非预期的剔除特别有用。
ArrayMesh shadow_mesh
用于渲染阴影并可用于深度预通道的可选网格。可用于通过使用仅包含顶点位置数据(不含法线、UV、颜色等)的网格来提高阴影渲染的性能。
方法说明
void add_blend_shape ( StringName name )
为混合形状添加名称,该形状将用 add_surface_from_arrays 添加。必须在添加面之前调用。
void add_surface_from_arrays ( PrimitiveType primitive, Array arrays, Array[] blend_shapes=[], Dictionary lods={}, BitField<ArrayFormat> flags=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 ( int index ) const
返回此索引处的混合形状的名称。
Error lightmap_unwrap ( Transform3D transform, float texel_size )
在 ArrayMesh 上执行 UV 展开,为光照贴图准备该网格。
void regen_normal_maps ( )
为每个 ArrayMesh 的表面重新生成切线。
void set_blend_shape_name ( int index, StringName name )
在此索引处设置混合形状的名称。
int surface_find_by_name ( String name ) const
返回此 ArrayMesh 中带有此名称的第一个曲面的索引。如果没有找到,则返回 -1。
int surface_get_array_index_len ( int surf_idx ) const
返回所请求的面中索引数组的索引长度(参见 add_surface_from_arrays)。
int surface_get_array_len ( int surf_idx ) const
返回所请求曲面中顶点数组的顶点长度(见 add_surface_from_arrays)。
BitField<ArrayFormat> surface_get_format ( int surf_idx ) const
返回所请求表面的格式掩码(见 add_surface_from_arrays)。
String surface_get_name ( int surf_idx ) const
获取分配给此表面的名称。
PrimitiveType surface_get_primitive_type ( int surf_idx ) const
返回所请求曲面的图元类型(见 add_surface_from_arrays)。
void surface_set_name ( int surf_idx, String name )
设置给定曲面的名称。
void surface_update_attribute_region ( int surf_idx, int offset, PackedByteArray data )
目前没有这个方法的描述。请帮我们贡献一个!
void surface_update_skin_region ( int surf_idx, int offset, PackedByteArray data )
目前没有这个方法的描述。请帮我们贡献一个!
void surface_update_vertex_region ( int surf_idx, int offset, PackedByteArray data )
目前没有这个方法的描述。请帮我们贡献一个!
© 版权所有 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.