ArrayMesh

Inherits: Mesh < Resource < Reference < Object

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

描述

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

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

  1. var vertices = PoolVector3Array()
  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(ArrayMesh.ARRAY_MAX)
  9. arrays[ArrayMesh.ARRAY_VERTEX] = vertices
  10. # 创建 Mesh。
  11. arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
  12. var m = MeshInstance.new()
  13. m.mesh = arr_mesh

这个 MeshInstance 已经准备就绪,以添加到要显示的 SceneTree 中。

程序式几何体生成,请参阅 ImmediateGeometryMeshDataToolSurfaceTool

注意:Godot 对三角形基本网格模式的正面使用顺时针环绕顺序

教程

属性

BlendShapeMode

blend_shape_mode

1

AABB

custom_aabb

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

方法

void

add_blend_shape ( String name )

void

add_surface_from_arrays ( PrimitiveType primitive, Array arrays, Array blend_shapes=[ ], int compress_flags=2194432 )

void

clear_blend_shapes ( )

void

clear_surfaces ( )

int

get_blend_shape_count ( ) const

String

get_blend_shape_name ( int index ) const

Error

lightmap_unwrap ( Transform transform, float texel_size )

void

regen_normalmaps ( )

void

set_blend_shape_name ( int index, String name )

int

surface_find_by_name ( String name ) const

int

surface_get_array_index_len ( int surf_idx ) const

int

surface_get_array_len ( int surf_idx ) const

int

surface_get_format ( int surf_idx ) const

String

surface_get_name ( int surf_idx ) const

PrimitiveType

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 —- PoolRealArrayPoolIntArray的骨骼索引。每个元素以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)。

属性说明

Default

1

Setter

set_blend_shape_mode(value)

Getter

get_blend_shape_mode()

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


Default

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

Setter

set_custom_aabb(value)

Getter

get_custom_aabb()

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

方法说明

  • void add_blend_shape ( String name )

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


创建一个新的面。

创建面是为了使用 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持有的混合形状的数量。


  • String get_blend_shape_name ( int index ) const

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


将在ArrayMesh上执行UV展开,以准备用于光照贴图的网格。


  • void regen_normalmaps ( )

将为ArrayMesh重新生成法线图。


  • void set_blend_shape_name ( int index, String 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)。


  • int surface_get_format ( int surf_idx ) const

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


  • String surface_get_name ( int surf_idx ) const

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


返回所请求曲面的基本类型(请参阅add_surface_from_arrays)。


  • void surface_remove ( int surf_idx )

移除位置surf_idx的一个面,将较大的面向下移动一个surf_idx槽。


  • void surface_set_name ( int surf_idx, String name )

设置给定曲面的名称。


更新 GPU 上的网格数组的指定区域。

警告:仅在知道您在做什么时使用。通过用不恰当的参数调用此功能,您可以轻松地导致崩溃。