ArrayMesh
Inherits: Mesh < Resource < Reference < Object
Mesh 网格类型,提供了用于从数组构造表面的工具。
描述
ArrayMesh
是用来构造 Mesh 的,其属性指定为数组。
最基本的例子是创建单个三角形:
var vertices = PoolVector3Array()
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(ArrayMesh.ARRAY_MAX)
arrays[ArrayMesh.ARRAY_VERTEX] = vertices
# 创建 Mesh。
arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
var m = MeshInstance.new()
m.mesh = arr_mesh
这个 MeshInstance 已经准备就绪,以添加到要显示的 SceneTree 中。
程序式几何体生成,请参阅 ImmediateGeometry、MeshDataTool、SurfaceTool。
注意:Godot 对三角形基本网格模式的正面使用顺时针环绕顺序。
教程
属性
| ||
|
方法
void | add_blend_shape ( String name ) |
void | add_surface_from_arrays ( PrimitiveType primitive, Array arrays, Array blend_shapes=[ ], int compress_flags=2194432 ) |
void | |
void | clear_surfaces ( ) |
get_blend_shape_count ( ) const | |
get_blend_shape_name ( int index ) const | |
lightmap_unwrap ( Transform transform, float texel_size ) | |
void | regen_normalmaps ( ) |
void | set_blend_shape_name ( int index, String 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 | |
surface_get_format ( int surf_idx ) const | |
surface_get_name ( int surf_idx ) const | |
surface_get_primitive_type ( int surf_idx ) const | |
void | surface_remove ( int surf_idx ) |
void | surface_set_name ( int surf_idx, String name ) |
void | surface_update_region ( int surf_idx, int offset, PoolByteArray data ) |
枚举
enum ArrayType:
ARRAY_VERTEX = 0 —- PoolVector3Array, PoolVector2Array, 或Array的顶点位置。
ARRAY_NORMAL = 1 —- PoolVector3Array 顶点法线。
ARRAY_TANGENT = 2 —- 顶点切线的PoolRealArray。每个元素以4个浮点数为一组,前3个浮点数决定切线,最后一个是-1或1的双法线方向。
ARRAY_COLOR = 3 —- PoolColorArray 顶点颜色。
ARRAY_TEX_UV = 4 —- PoolVector2Array 用于UV坐标。
ARRAY_TEX_UV2 = 5 —- PoolVector2Array用于第二UV坐标。
ARRAY_BONES = 6 —- PoolRealArray或PoolIntArray的骨骼索引。每个元素以4个浮点数为一组。
ARRAY_WEIGHTS = 7 —- 骨骼权重的PoolRealArray。每个元素以4个浮点数为一组。
ARRAY_INDEX = 8 —- PoolIntArray整数数组,用作引用顶点、颜色、法线、切线和纹理的索引。所有这些数组必须具有与顶点数组相同的元素数量。任何索引都不能超过顶点数组的大小。当这个索引数组出现时,它使函数进入“索引模式”,其中索引选择 *i* 的顶点、法线、切线、颜色、UV 等。这意味着如果你想沿着一条边有不同的法线或颜色,需拷贝顶点。
对于三角形,索引数组被解释为三元组,指的是每个三角形的顶点。对于线,索引数组是成对的,表示每条线的起点和终点。
- ARRAY_MAX = 9 —- 表示ArrayType枚举的大小。
enum ArrayFormat:
ARRAY_FORMAT_VERTEX = 1 —- 数组格式将包括顶点(必填)。
ARRAY_FORMAT_NORMAL = 2 —- 数组格式将包括法线。
ARRAY_FORMAT_TANGENT = 4 —- 数组格式将包括切线。
ARRAY_FORMAT_COLOR = 8 —- 数组格式将包括一个颜色数组。
ARRAY_FORMAT_TEX_UV = 16 —- 数组格式将包括UV。
ARRAY_FORMAT_TEX_UV2 = 32 —- 数组格式将包括另一组 UV。
ARRAY_FORMAT_BONES = 64 —- 数组格式将包括骨骼索引。
ARRAY_FORMAT_WEIGHTS = 128 —- 数组格式将包括骨骼权重。
ARRAY_FORMAT_INDEX = 256 —- 将使用索引数组。
常量
NO_INDEX_ARRAY = -1 —- 当没有索引时,index_array_len的默认值。
ARRAY_WEIGHTS_SIZE = 4 —- 每个顶点的权重/骨指数量(始终为 4)。
属性说明
- BlendShapeMode blend_shape_mode
Default |
|
Setter | set_blend_shape_mode(value) |
Getter | get_blend_shape_mode() |
将混合形状模式设置为BlendShapeMode之一。
- AABB custom_aabb
Default |
|
Setter | set_custom_aabb(value) |
Getter | get_custom_aabb() |
用用户定义的用于使用视锥剔除的一种替代AABB。在使用着色器偏移顶点时,避免非预期的剔除特别有用。
方法说明
- void add_blend_shape ( String name )
为混合形状添加名称,该名称将用add_surface_from_arrays添加。必须在添加曲面之前调用。
- void add_surface_from_arrays ( PrimitiveType primitive, Array arrays, Array blend_shapes=[ ], int compress_flags=2194432 )
创建一个新的面。
创建面是为了使用 primitive
进行渲染,可以是 PrimitiveType 中定义的任何类型。(注意,当使用索引时,建议只使用点、线或三角形)。Mesh.get_surface_count 的值将成为这个新面的 surface_idx
索引。
arrays
参数是数组的数组。关于这个数组中使用的值,请参阅 ArrayType。例如,arrays[0]
是顶点的数组。总是需要第一个顶点子数组,其他的可选。添加一个索引数组使这个函数进入“索引模式”,顶点和其他数组作为数据来源,索引数组定义其顶点顺序。所有的子数组必须与顶点数组具有相同的长度,或者为空,如果使用了 ARRAY_INDEX 时除外。
- void clear_blend_shapes ( )
删除此ArrayMesh
的所有混合形状。
- void clear_surfaces ( )
删除此ArrayMesh
的所有表面。
- int get_blend_shape_count ( ) const
返回ArrayMesh
持有的混合形状的数量。
返回此索引处的混合形状的名称。
将在ArrayMesh
上执行UV展开,以准备用于光照贴图的网格。
- void regen_normalmaps ( )
将为ArrayMesh
重新生成法线图。
返回此ArrayMesh
中带有此名称的第一个曲面的索引。如果没有找到,则返回-1。
返回请求的曲面的索引数组的长度,以指数为单位(参阅add_surface_from_arrays)。
返回所请求曲面中顶点数组的顶点长度(请参阅add_surface_from_arrays)。
返回所请求表面的格式掩码(请参阅add_surface_from_arrays)。
获取分配给此表面的名称。
- PrimitiveType surface_get_primitive_type ( int surf_idx ) const
返回所请求曲面的基本类型(请参阅add_surface_from_arrays)。
- void surface_remove ( int surf_idx )
移除位置surf_idx
的一个面,将较大的面向下移动一个surf_idx
槽。
设置给定曲面的名称。
- void surface_update_region ( int surf_idx, int offset, PoolByteArray data )
更新 GPU 上的网格数组的指定区域。
警告:仅在知道您在做什么时使用。通过用不恰当的参数调用此功能,您可以轻松地导致崩溃。