class_mesh.rst 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. :github_url: hide
  2. .. Generated automatically by doc/tools/make_rst.py in Godot's source tree.
  3. .. DO NOT EDIT THIS FILE, but the Mesh.xml source instead.
  4. .. The source is found in doc/classes or modules/<name>/doc_classes.
  5. .. _class_Mesh:
  6. Mesh
  7. ====
  8. **Inherits:** :ref:`Resource<class_Resource>` **<** :ref:`Reference<class_Reference>` **<** :ref:`Object<class_Object>`
  9. **Inherited By:** :ref:`ArrayMesh<class_ArrayMesh>`, :ref:`PrimitiveMesh<class_PrimitiveMesh>`
  10. A :ref:`Resource<class_Resource>` that contains vertex array-based geometry.
  11. Description
  12. -----------
  13. Mesh is a type of :ref:`Resource<class_Resource>` that contains vertex array-based geometry, divided in *surfaces*. Each surface contains a completely separate array and a material used to draw it. Design wise, a mesh with multiple surfaces is preferred to a single surface, because objects created in 3D editing software commonly contain multiple materials.
  14. Tutorials
  15. ---------
  16. - `3D Material Testers Demo <https://godotengine.org/asset-library/asset/123>`__
  17. - `3D Kinematic Character Demo <https://godotengine.org/asset-library/asset/126>`__
  18. - `3D Platformer Demo <https://godotengine.org/asset-library/asset/125>`__
  19. - `Third Person Shooter Demo <https://godotengine.org/asset-library/asset/678>`__
  20. Properties
  21. ----------
  22. +-------------------------------+-------------------------------------------------------------------+---------------------+
  23. | :ref:`Vector2<class_Vector2>` | :ref:`lightmap_size_hint<class_Mesh_property_lightmap_size_hint>` | ``Vector2( 0, 0 )`` |
  24. +-------------------------------+-------------------------------------------------------------------+---------------------+
  25. Methods
  26. -------
  27. +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  28. | :ref:`Shape<class_Shape>` | :ref:`create_convex_shape<class_Mesh_method_create_convex_shape>` **(** :ref:`bool<class_bool>` clean=true, :ref:`bool<class_bool>` simplify=false **)** |const| |
  29. +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  30. | :ref:`Mesh<class_Mesh>` | :ref:`create_outline<class_Mesh_method_create_outline>` **(** :ref:`float<class_float>` margin **)** |const| |
  31. +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  32. | :ref:`Shape<class_Shape>` | :ref:`create_trimesh_shape<class_Mesh_method_create_trimesh_shape>` **(** **)** |const| |
  33. +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  34. | :ref:`TriangleMesh<class_TriangleMesh>` | :ref:`generate_triangle_mesh<class_Mesh_method_generate_triangle_mesh>` **(** **)** |const| |
  35. +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  36. | :ref:`AABB<class_AABB>` | :ref:`get_aabb<class_Mesh_method_get_aabb>` **(** **)** |const| |
  37. +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  38. | :ref:`PoolVector3Array<class_PoolVector3Array>` | :ref:`get_faces<class_Mesh_method_get_faces>` **(** **)** |const| |
  39. +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  40. | :ref:`int<class_int>` | :ref:`get_surface_count<class_Mesh_method_get_surface_count>` **(** **)** |const| |
  41. +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  42. | :ref:`Array<class_Array>` | :ref:`surface_get_arrays<class_Mesh_method_surface_get_arrays>` **(** :ref:`int<class_int>` surf_idx **)** |const| |
  43. +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  44. | :ref:`Array<class_Array>` | :ref:`surface_get_blend_shape_arrays<class_Mesh_method_surface_get_blend_shape_arrays>` **(** :ref:`int<class_int>` surf_idx **)** |const| |
  45. +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  46. | :ref:`Material<class_Material>` | :ref:`surface_get_material<class_Mesh_method_surface_get_material>` **(** :ref:`int<class_int>` surf_idx **)** |const| |
  47. +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  48. | void | :ref:`surface_set_material<class_Mesh_method_surface_set_material>` **(** :ref:`int<class_int>` surf_idx, :ref:`Material<class_Material>` material **)** |
  49. +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  50. Enumerations
  51. ------------
  52. .. _enum_Mesh_PrimitiveType:
  53. .. _class_Mesh_constant_PRIMITIVE_POINTS:
  54. .. _class_Mesh_constant_PRIMITIVE_LINES:
  55. .. _class_Mesh_constant_PRIMITIVE_LINE_STRIP:
  56. .. _class_Mesh_constant_PRIMITIVE_LINE_LOOP:
  57. .. _class_Mesh_constant_PRIMITIVE_TRIANGLES:
  58. .. _class_Mesh_constant_PRIMITIVE_TRIANGLE_STRIP:
  59. .. _class_Mesh_constant_PRIMITIVE_TRIANGLE_FAN:
  60. enum **PrimitiveType**:
  61. - **PRIMITIVE_POINTS** = **0** --- Render array as points (one vertex equals one point).
  62. - **PRIMITIVE_LINES** = **1** --- Render array as lines (every two vertices a line is created).
  63. - **PRIMITIVE_LINE_STRIP** = **2** --- Render array as line strip.
  64. - **PRIMITIVE_LINE_LOOP** = **3** --- Render array as line loop (like line strip, but closed).
  65. - **PRIMITIVE_TRIANGLES** = **4** --- Render array as triangles (every three vertices a triangle is created).
  66. - **PRIMITIVE_TRIANGLE_STRIP** = **5** --- Render array as triangle strips.
  67. - **PRIMITIVE_TRIANGLE_FAN** = **6** --- Render array as triangle fans.
  68. ----
  69. .. _enum_Mesh_BlendShapeMode:
  70. .. _class_Mesh_constant_BLEND_SHAPE_MODE_NORMALIZED:
  71. .. _class_Mesh_constant_BLEND_SHAPE_MODE_RELATIVE:
  72. enum **BlendShapeMode**:
  73. - **BLEND_SHAPE_MODE_NORMALIZED** = **0** --- Blend shapes are normalized.
  74. - **BLEND_SHAPE_MODE_RELATIVE** = **1** --- Blend shapes are relative to base weight.
  75. ----
  76. .. _enum_Mesh_ArrayFormat:
  77. .. _class_Mesh_constant_ARRAY_FORMAT_VERTEX:
  78. .. _class_Mesh_constant_ARRAY_FORMAT_NORMAL:
  79. .. _class_Mesh_constant_ARRAY_FORMAT_TANGENT:
  80. .. _class_Mesh_constant_ARRAY_FORMAT_COLOR:
  81. .. _class_Mesh_constant_ARRAY_FORMAT_TEX_UV:
  82. .. _class_Mesh_constant_ARRAY_FORMAT_TEX_UV2:
  83. .. _class_Mesh_constant_ARRAY_FORMAT_BONES:
  84. .. _class_Mesh_constant_ARRAY_FORMAT_WEIGHTS:
  85. .. _class_Mesh_constant_ARRAY_FORMAT_INDEX:
  86. .. _class_Mesh_constant_ARRAY_COMPRESS_BASE:
  87. .. _class_Mesh_constant_ARRAY_COMPRESS_VERTEX:
  88. .. _class_Mesh_constant_ARRAY_COMPRESS_NORMAL:
  89. .. _class_Mesh_constant_ARRAY_COMPRESS_TANGENT:
  90. .. _class_Mesh_constant_ARRAY_COMPRESS_COLOR:
  91. .. _class_Mesh_constant_ARRAY_COMPRESS_TEX_UV:
  92. .. _class_Mesh_constant_ARRAY_COMPRESS_TEX_UV2:
  93. .. _class_Mesh_constant_ARRAY_COMPRESS_BONES:
  94. .. _class_Mesh_constant_ARRAY_COMPRESS_WEIGHTS:
  95. .. _class_Mesh_constant_ARRAY_COMPRESS_INDEX:
  96. .. _class_Mesh_constant_ARRAY_FLAG_USE_2D_VERTICES:
  97. .. _class_Mesh_constant_ARRAY_FLAG_USE_16_BIT_BONES:
  98. .. _class_Mesh_constant_ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION:
  99. .. _class_Mesh_constant_ARRAY_COMPRESS_DEFAULT:
  100. enum **ArrayFormat**:
  101. - **ARRAY_FORMAT_VERTEX** = **1** --- Mesh array contains vertices. All meshes require a vertex array so this should always be present.
  102. - **ARRAY_FORMAT_NORMAL** = **2** --- Mesh array contains normals.
  103. - **ARRAY_FORMAT_TANGENT** = **4** --- Mesh array contains tangents.
  104. - **ARRAY_FORMAT_COLOR** = **8** --- Mesh array contains colors.
  105. - **ARRAY_FORMAT_TEX_UV** = **16** --- Mesh array contains UVs.
  106. - **ARRAY_FORMAT_TEX_UV2** = **32** --- Mesh array contains second UV.
  107. - **ARRAY_FORMAT_BONES** = **64** --- Mesh array contains bones.
  108. - **ARRAY_FORMAT_WEIGHTS** = **128** --- Mesh array contains bone weights.
  109. - **ARRAY_FORMAT_INDEX** = **256** --- Mesh array uses indices.
  110. - **ARRAY_COMPRESS_BASE** = **9** --- Used internally to calculate other ``ARRAY_COMPRESS_*`` enum values. Do not use.
  111. - **ARRAY_COMPRESS_VERTEX** = **512** --- Flag used to mark a compressed (half float) vertex array.
  112. - **ARRAY_COMPRESS_NORMAL** = **1024** --- Flag used to mark a compressed (half float) normal array.
  113. - **ARRAY_COMPRESS_TANGENT** = **2048** --- Flag used to mark a compressed (half float) tangent array.
  114. - **ARRAY_COMPRESS_COLOR** = **4096** --- Flag used to mark a compressed (half float) color array.
  115. - **ARRAY_COMPRESS_TEX_UV** = **8192** --- Flag used to mark a compressed (half float) UV coordinates array.
  116. - **ARRAY_COMPRESS_TEX_UV2** = **16384** --- Flag used to mark a compressed (half float) UV coordinates array for the second UV coordinates.
  117. - **ARRAY_COMPRESS_BONES** = **32768** --- Flag used to mark a compressed bone array.
  118. - **ARRAY_COMPRESS_WEIGHTS** = **65536** --- Flag used to mark a compressed (half float) weight array.
  119. - **ARRAY_COMPRESS_INDEX** = **131072** --- Flag used to mark a compressed index array.
  120. - **ARRAY_FLAG_USE_2D_VERTICES** = **262144** --- Flag used to mark that the array contains 2D vertices.
  121. - **ARRAY_FLAG_USE_16_BIT_BONES** = **524288** --- Flag used to mark that the array uses 16-bit bones instead of 8-bit.
  122. - **ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION** = **2097152** --- Flag used to mark that the array uses an octahedral representation of normal and tangent vectors rather than cartesian.
  123. - **ARRAY_COMPRESS_DEFAULT** = **2194432** --- Used to set flags :ref:`ARRAY_COMPRESS_VERTEX<class_Mesh_constant_ARRAY_COMPRESS_VERTEX>`, :ref:`ARRAY_COMPRESS_NORMAL<class_Mesh_constant_ARRAY_COMPRESS_NORMAL>`, :ref:`ARRAY_COMPRESS_TANGENT<class_Mesh_constant_ARRAY_COMPRESS_TANGENT>`, :ref:`ARRAY_COMPRESS_COLOR<class_Mesh_constant_ARRAY_COMPRESS_COLOR>`, :ref:`ARRAY_COMPRESS_TEX_UV<class_Mesh_constant_ARRAY_COMPRESS_TEX_UV>`, :ref:`ARRAY_COMPRESS_TEX_UV2<class_Mesh_constant_ARRAY_COMPRESS_TEX_UV2>`, :ref:`ARRAY_COMPRESS_WEIGHTS<class_Mesh_constant_ARRAY_COMPRESS_WEIGHTS>`, and :ref:`ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION<class_Mesh_constant_ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION>` quickly.
  124. ----
  125. .. _enum_Mesh_ArrayType:
  126. .. _class_Mesh_constant_ARRAY_VERTEX:
  127. .. _class_Mesh_constant_ARRAY_NORMAL:
  128. .. _class_Mesh_constant_ARRAY_TANGENT:
  129. .. _class_Mesh_constant_ARRAY_COLOR:
  130. .. _class_Mesh_constant_ARRAY_TEX_UV:
  131. .. _class_Mesh_constant_ARRAY_TEX_UV2:
  132. .. _class_Mesh_constant_ARRAY_BONES:
  133. .. _class_Mesh_constant_ARRAY_WEIGHTS:
  134. .. _class_Mesh_constant_ARRAY_INDEX:
  135. .. _class_Mesh_constant_ARRAY_MAX:
  136. enum **ArrayType**:
  137. - **ARRAY_VERTEX** = **0** --- Array of vertices.
  138. - **ARRAY_NORMAL** = **1** --- Array of normals.
  139. - **ARRAY_TANGENT** = **2** --- Array of tangents as an array of floats, 4 floats per tangent.
  140. - **ARRAY_COLOR** = **3** --- Array of colors.
  141. - **ARRAY_TEX_UV** = **4** --- Array of UV coordinates.
  142. - **ARRAY_TEX_UV2** = **5** --- Array of second set of UV coordinates.
  143. - **ARRAY_BONES** = **6** --- Array of bone data.
  144. - **ARRAY_WEIGHTS** = **7** --- Array of weights.
  145. - **ARRAY_INDEX** = **8** --- Array of indices.
  146. - **ARRAY_MAX** = **9** --- Represents the size of the :ref:`ArrayType<enum_Mesh_ArrayType>` enum.
  147. Property Descriptions
  148. ---------------------
  149. .. _class_Mesh_property_lightmap_size_hint:
  150. - :ref:`Vector2<class_Vector2>` **lightmap_size_hint**
  151. +-----------+-------------------------------+
  152. | *Default* | ``Vector2( 0, 0 )`` |
  153. +-----------+-------------------------------+
  154. | *Setter* | set_lightmap_size_hint(value) |
  155. +-----------+-------------------------------+
  156. | *Getter* | get_lightmap_size_hint() |
  157. +-----------+-------------------------------+
  158. Sets a hint to be used for lightmap resolution in :ref:`BakedLightmap<class_BakedLightmap>`. Overrides :ref:`BakedLightmap.default_texels_per_unit<class_BakedLightmap_property_default_texels_per_unit>`.
  159. Method Descriptions
  160. -------------------
  161. .. _class_Mesh_method_create_convex_shape:
  162. - :ref:`Shape<class_Shape>` **create_convex_shape** **(** :ref:`bool<class_bool>` clean=true, :ref:`bool<class_bool>` simplify=false **)** |const|
  163. Calculate a :ref:`ConvexPolygonShape<class_ConvexPolygonShape>` from the mesh.
  164. If ``clean`` is ``true`` (default), duplicate and interior vertices are removed automatically. You can set it to ``false`` to make the process faster if not needed.
  165. If ``simplify`` is ``true``, the geometry can be further simplified to reduce the amount of vertices. Disabled by default.
  166. ----
  167. .. _class_Mesh_method_create_outline:
  168. - :ref:`Mesh<class_Mesh>` **create_outline** **(** :ref:`float<class_float>` margin **)** |const|
  169. Calculate an outline mesh at a defined offset (margin) from the original mesh.
  170. **Note:** This method typically returns the vertices in reverse order (e.g. clockwise to counterclockwise).
  171. ----
  172. .. _class_Mesh_method_create_trimesh_shape:
  173. - :ref:`Shape<class_Shape>` **create_trimesh_shape** **(** **)** |const|
  174. Calculate a :ref:`ConcavePolygonShape<class_ConcavePolygonShape>` from the mesh.
  175. ----
  176. .. _class_Mesh_method_generate_triangle_mesh:
  177. - :ref:`TriangleMesh<class_TriangleMesh>` **generate_triangle_mesh** **(** **)** |const|
  178. Generate a :ref:`TriangleMesh<class_TriangleMesh>` from the mesh.
  179. ----
  180. .. _class_Mesh_method_get_aabb:
  181. - :ref:`AABB<class_AABB>` **get_aabb** **(** **)** |const|
  182. Returns the smallest :ref:`AABB<class_AABB>` enclosing this mesh in local space. Not affected by ``custom_aabb``. See also :ref:`VisualInstance.get_transformed_aabb<class_VisualInstance_method_get_transformed_aabb>`.
  183. **Note:** This is only implemented for :ref:`ArrayMesh<class_ArrayMesh>` and :ref:`PrimitiveMesh<class_PrimitiveMesh>`.
  184. ----
  185. .. _class_Mesh_method_get_faces:
  186. - :ref:`PoolVector3Array<class_PoolVector3Array>` **get_faces** **(** **)** |const|
  187. Returns all the vertices that make up the faces of the mesh. Each three vertices represent one triangle.
  188. ----
  189. .. _class_Mesh_method_get_surface_count:
  190. - :ref:`int<class_int>` **get_surface_count** **(** **)** |const|
  191. Returns the amount of surfaces that the ``Mesh`` holds.
  192. ----
  193. .. _class_Mesh_method_surface_get_arrays:
  194. - :ref:`Array<class_Array>` **surface_get_arrays** **(** :ref:`int<class_int>` surf_idx **)** |const|
  195. Returns the arrays for the vertices, normals, uvs, etc. that make up the requested surface (see :ref:`ArrayMesh.add_surface_from_arrays<class_ArrayMesh_method_add_surface_from_arrays>`).
  196. ----
  197. .. _class_Mesh_method_surface_get_blend_shape_arrays:
  198. - :ref:`Array<class_Array>` **surface_get_blend_shape_arrays** **(** :ref:`int<class_int>` surf_idx **)** |const|
  199. Returns the blend shape arrays for the requested surface.
  200. ----
  201. .. _class_Mesh_method_surface_get_material:
  202. - :ref:`Material<class_Material>` **surface_get_material** **(** :ref:`int<class_int>` surf_idx **)** |const|
  203. Returns a :ref:`Material<class_Material>` in a given surface. Surface is rendered using this material.
  204. ----
  205. .. _class_Mesh_method_surface_set_material:
  206. - void **surface_set_material** **(** :ref:`int<class_int>` surf_idx, :ref:`Material<class_Material>` material **)**
  207. Sets a :ref:`Material<class_Material>` for a given surface. Surface will be rendered using this material.
  208. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
  209. .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
  210. .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`