Files
godot-docs-l10n/classes/es/class_surfacetool.rst
Rémi Verschelde c3f2364c10 Sync classref with 4.6 branch
Lots of translations invalidated (fuzzied) as we just synced Weblate.
2025-12-19 16:39:51 +01:00

686 lines
66 KiB
ReStructuredText

:github_url: hide
.. _class_SurfaceTool:
SurfaceTool
===========
**Hereda:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
Herramienta de ayuda para crear geometría.
.. rst-class:: classref-introduction-group
Descripción
----------------------
The **SurfaceTool** is used to construct a :ref:`Mesh<class_Mesh>` by specifying vertex attributes individually. It can be used to construct a :ref:`Mesh<class_Mesh>` from a script. All properties except indices need to be added before calling :ref:`add_vertex()<class_SurfaceTool_method_add_vertex>`. For example, to add vertex colors and UVs:
.. tabs::
.. code-tab:: gdscript
var st = SurfaceTool.new()
st.begin(Mesh.PRIMITIVE_TRIANGLES)
st.set_color(Color(1, 0, 0))
st.set_uv(Vector2(0, 0))
st.add_vertex(Vector3(0, 0, 0))
.. code-tab:: csharp
var st = new SurfaceTool();
st.Begin(Mesh.PrimitiveType.Triangles);
st.SetColor(new Color(1, 0, 0));
st.SetUV(new Vector2(0, 0));
st.AddVertex(new Vector3(0, 0, 0));
The above **SurfaceTool** now contains one vertex of a triangle which has a UV coordinate and a specified :ref:`Color<class_Color>`. If another vertex were added without calling :ref:`set_uv()<class_SurfaceTool_method_set_uv>` or :ref:`set_color()<class_SurfaceTool_method_set_color>`, then the last values would be used.
Vertex attributes must be passed **before** calling :ref:`add_vertex()<class_SurfaceTool_method_add_vertex>`. Failure to do so will result in an error when committing the vertex information to a mesh.
Additionally, the attributes used before the first vertex is added determine the format of the mesh. For example, if you only add UVs to the first vertex, you cannot add color to any of the subsequent vertices.
See also :ref:`ArrayMesh<class_ArrayMesh>`, :ref:`ImmediateMesh<class_ImmediateMesh>` and :ref:`MeshDataTool<class_MeshDataTool>` for procedural geometry generation.
\ **Note:** Godot uses clockwise `winding order <https://learnopengl.com/Advanced-OpenGL/Face-culling>`__ for front faces of triangle primitive modes.
.. rst-class:: classref-introduction-group
Tutoriales
--------------------
- :doc:`Usar SurfaceTool <../tutorials/3d/procedural_geometry/surfacetool>`
- `Demo de Vóxeles en 3D <https://godotengine.org/asset-library/asset/2755>`__
.. rst-class:: classref-reftable-group
Métodos
--------------
.. table::
:widths: auto
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`add_index<class_SurfaceTool_method_add_index>`\ (\ index\: :ref:`int<class_int>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`add_triangle_fan<class_SurfaceTool_method_add_triangle_fan>`\ (\ vertices\: :ref:`PackedVector3Array<class_PackedVector3Array>`, uvs\: :ref:`PackedVector2Array<class_PackedVector2Array>` = PackedVector2Array(), colors\: :ref:`PackedColorArray<class_PackedColorArray>` = PackedColorArray(), uv2s\: :ref:`PackedVector2Array<class_PackedVector2Array>` = PackedVector2Array(), normals\: :ref:`PackedVector3Array<class_PackedVector3Array>` = PackedVector3Array(), tangents\: :ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\] = []\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`add_vertex<class_SurfaceTool_method_add_vertex>`\ (\ vertex\: :ref:`Vector3<class_Vector3>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`append_from<class_SurfaceTool_method_append_from>`\ (\ existing\: :ref:`Mesh<class_Mesh>`, surface\: :ref:`int<class_int>`, transform\: :ref:`Transform3D<class_Transform3D>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`begin<class_SurfaceTool_method_begin>`\ (\ primitive\: :ref:`PrimitiveType<enum_Mesh_PrimitiveType>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`clear<class_SurfaceTool_method_clear>`\ (\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`ArrayMesh<class_ArrayMesh>` | :ref:`commit<class_SurfaceTool_method_commit>`\ (\ existing\: :ref:`ArrayMesh<class_ArrayMesh>` = null, flags\: :ref:`int<class_int>` = 0\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`commit_to_arrays<class_SurfaceTool_method_commit_to_arrays>`\ (\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`create_from<class_SurfaceTool_method_create_from>`\ (\ existing\: :ref:`Mesh<class_Mesh>`, surface\: :ref:`int<class_int>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`create_from_arrays<class_SurfaceTool_method_create_from_arrays>`\ (\ arrays\: :ref:`Array<class_Array>`, primitive_type\: :ref:`PrimitiveType<enum_Mesh_PrimitiveType>` = 3\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`create_from_blend_shape<class_SurfaceTool_method_create_from_blend_shape>`\ (\ existing\: :ref:`Mesh<class_Mesh>`, surface\: :ref:`int<class_int>`, blend_shape\: :ref:`String<class_String>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`deindex<class_SurfaceTool_method_deindex>`\ (\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedInt32Array<class_PackedInt32Array>` | :ref:`generate_lod<class_SurfaceTool_method_generate_lod>`\ (\ nd_threshold\: :ref:`float<class_float>`, target_index_count\: :ref:`int<class_int>` = 3\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`generate_normals<class_SurfaceTool_method_generate_normals>`\ (\ flip\: :ref:`bool<class_bool>` = false\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`generate_tangents<class_SurfaceTool_method_generate_tangents>`\ (\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`AABB<class_AABB>` | :ref:`get_aabb<class_SurfaceTool_method_get_aabb>`\ (\ ) |const| |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` | :ref:`get_custom_format<class_SurfaceTool_method_get_custom_format>`\ (\ channel_index\: :ref:`int<class_int>`\ ) |const| |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PrimitiveType<enum_Mesh_PrimitiveType>` | :ref:`get_primitive_type<class_SurfaceTool_method_get_primitive_type>`\ (\ ) |const| |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`SkinWeightCount<enum_SurfaceTool_SkinWeightCount>` | :ref:`get_skin_weight_count<class_SurfaceTool_method_get_skin_weight_count>`\ (\ ) |const| |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`index<class_SurfaceTool_method_index>`\ (\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`optimize_indices_for_cache<class_SurfaceTool_method_optimize_indices_for_cache>`\ (\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_bones<class_SurfaceTool_method_set_bones>`\ (\ bones\: :ref:`PackedInt32Array<class_PackedInt32Array>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_color<class_SurfaceTool_method_set_color>`\ (\ color\: :ref:`Color<class_Color>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_custom<class_SurfaceTool_method_set_custom>`\ (\ channel_index\: :ref:`int<class_int>`, custom_color\: :ref:`Color<class_Color>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_custom_format<class_SurfaceTool_method_set_custom_format>`\ (\ channel_index\: :ref:`int<class_int>`, format\: :ref:`CustomFormat<enum_SurfaceTool_CustomFormat>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_material<class_SurfaceTool_method_set_material>`\ (\ material\: :ref:`Material<class_Material>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_normal<class_SurfaceTool_method_set_normal>`\ (\ normal\: :ref:`Vector3<class_Vector3>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_skin_weight_count<class_SurfaceTool_method_set_skin_weight_count>`\ (\ count\: :ref:`SkinWeightCount<enum_SurfaceTool_SkinWeightCount>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_smooth_group<class_SurfaceTool_method_set_smooth_group>`\ (\ index\: :ref:`int<class_int>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_tangent<class_SurfaceTool_method_set_tangent>`\ (\ tangent\: :ref:`Plane<class_Plane>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_uv<class_SurfaceTool_method_set_uv>`\ (\ uv\: :ref:`Vector2<class_Vector2>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_uv2<class_SurfaceTool_method_set_uv2>`\ (\ uv2\: :ref:`Vector2<class_Vector2>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_weights<class_SurfaceTool_method_set_weights>`\ (\ weights\: :ref:`PackedFloat32Array<class_PackedFloat32Array>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
Enumeraciones
--------------------------
.. _enum_SurfaceTool_CustomFormat:
.. rst-class:: classref-enumeration
enum **CustomFormat**: :ref:`🔗<enum_SurfaceTool_CustomFormat>`
.. _class_SurfaceTool_constant_CUSTOM_RGBA8_UNORM:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RGBA8_UNORM** = ``0``
Limita el rango de datos pasados a :ref:`set_custom()<class_SurfaceTool_method_set_custom>` a valores normalizados sin signo de 0 a 1, almacenados en 8 bits por canal. Ver :ref:`Mesh.ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`.
.. _class_SurfaceTool_constant_CUSTOM_RGBA8_SNORM:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RGBA8_SNORM** = ``1``
Limita el rango de datos pasados a :ref:`set_custom()<class_SurfaceTool_method_set_custom>` a valores normalizados con signo de -1 a 1, almacenados en 8 bits por canal. Ver :ref:`Mesh.ARRAY_CUSTOM_RGBA8_SNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_SNORM>`.
.. _class_SurfaceTool_constant_CUSTOM_RG_HALF:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RG_HALF** = ``2``
Almacena los datos pasados a :ref:`set_custom()<class_SurfaceTool_method_set_custom>` como floats de media precisión, y usa solo los canales de color rojo y verde. Véase :ref:`Mesh.ARRAY_CUSTOM_RG_HALF<class_Mesh_constant_ARRAY_CUSTOM_RG_HALF>`.
.. _class_SurfaceTool_constant_CUSTOM_RGBA_HALF:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RGBA_HALF** = ``3``
Almacena los datos pasados a :ref:`set_custom()<class_SurfaceTool_method_set_custom>` como floats de media precisión y usa todos los canales de color. Véase :ref:`Mesh.ARRAY_CUSTOM_RGBA_HALF<class_Mesh_constant_ARRAY_CUSTOM_RGBA_HALF>`.
.. _class_SurfaceTool_constant_CUSTOM_R_FLOAT:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_R_FLOAT** = ``4``
Almacena los datos pasados a :ref:`set_custom()<class_SurfaceTool_method_set_custom>` como floats de precisión completa, y usa solo el canal de color rojo. Véase :ref:`Mesh.ARRAY_CUSTOM_R_FLOAT<class_Mesh_constant_ARRAY_CUSTOM_R_FLOAT>`.
.. _class_SurfaceTool_constant_CUSTOM_RG_FLOAT:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RG_FLOAT** = ``5``
Almacena los datos pasados a :ref:`set_custom()<class_SurfaceTool_method_set_custom>` como floats de precisión completa, y usa solo los canales de color rojo y verde. Véase :ref:`Mesh.ARRAY_CUSTOM_RG_FLOAT<class_Mesh_constant_ARRAY_CUSTOM_RG_FLOAT>`.
.. _class_SurfaceTool_constant_CUSTOM_RGB_FLOAT:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RGB_FLOAT** = ``6``
Almacena los datos pasados a :ref:`set_custom()<class_SurfaceTool_method_set_custom>` como floats de precisión completa, y usa solo los canales de color rojo, verde y azul. Véase :ref:`Mesh.ARRAY_CUSTOM_RGB_FLOAT<class_Mesh_constant_ARRAY_CUSTOM_RGB_FLOAT>`.
.. _class_SurfaceTool_constant_CUSTOM_RGBA_FLOAT:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RGBA_FLOAT** = ``7``
Almacena los datos pasados a :ref:`set_custom()<class_SurfaceTool_method_set_custom>` como floats de precisión completa, y usa todos los canales de color. Véase :ref:`Mesh.ARRAY_CUSTOM_RGBA_FLOAT<class_Mesh_constant_ARRAY_CUSTOM_RGBA_FLOAT>`.
.. _class_SurfaceTool_constant_CUSTOM_MAX:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_MAX** = ``8``
Usado para indicar un canal personalizado desactivado.
.. rst-class:: classref-item-separator
----
.. _enum_SurfaceTool_SkinWeightCount:
.. rst-class:: classref-enumeration
enum **SkinWeightCount**: :ref:`🔗<enum_SurfaceTool_SkinWeightCount>`
.. _class_SurfaceTool_constant_SKIN_4_WEIGHTS:
.. rst-class:: classref-enumeration-constant
:ref:`SkinWeightCount<enum_SurfaceTool_SkinWeightCount>` **SKIN_4_WEIGHTS** = ``0``
Each individual vertex can be influenced by only 4 bone weights.
.. _class_SurfaceTool_constant_SKIN_8_WEIGHTS:
.. rst-class:: classref-enumeration-constant
:ref:`SkinWeightCount<enum_SurfaceTool_SkinWeightCount>` **SKIN_8_WEIGHTS** = ``1``
Each individual vertex can be influenced by up to 8 bone weights.
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
Descripciones de Métodos
------------------------------------------------
.. _class_SurfaceTool_method_add_index:
.. rst-class:: classref-method
|void| **add_index**\ (\ index\: :ref:`int<class_int>`\ ) :ref:`🔗<class_SurfaceTool_method_add_index>`
Añade un vértice al array de índices si se utilizan vértices indexados. No es necesario llamarlo antes de añadir vértices.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_add_triangle_fan:
.. rst-class:: classref-method
|void| **add_triangle_fan**\ (\ vertices\: :ref:`PackedVector3Array<class_PackedVector3Array>`, uvs\: :ref:`PackedVector2Array<class_PackedVector2Array>` = PackedVector2Array(), colors\: :ref:`PackedColorArray<class_PackedColorArray>` = PackedColorArray(), uv2s\: :ref:`PackedVector2Array<class_PackedVector2Array>` = PackedVector2Array(), normals\: :ref:`PackedVector3Array<class_PackedVector3Array>` = PackedVector3Array(), tangents\: :ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\] = []\ ) :ref:`🔗<class_SurfaceTool_method_add_triangle_fan>`
Inserta un triangulo fan hecho de un array de datos en la :ref:`Mesh<class_Mesh>` que se está construyendo.
Requiere que el tipo primitivo se establezca en :ref:`Mesh.PRIMITIVE_TRIANGLES<class_Mesh_constant_PRIMITIVE_TRIANGLES>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_add_vertex:
.. rst-class:: classref-method
|void| **add_vertex**\ (\ vertex\: :ref:`Vector3<class_Vector3>`\ ) :ref:`🔗<class_SurfaceTool_method_add_vertex>`
Especifica la posición del vértice actual. Debe ser llamado después de especificar otras propiedades del vértice (por ejemplo, Color, UV).
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_append_from:
.. rst-class:: classref-method
|void| **append_from**\ (\ existing\: :ref:`Mesh<class_Mesh>`, surface\: :ref:`int<class_int>`, transform\: :ref:`Transform3D<class_Transform3D>`\ ) :ref:`🔗<class_SurfaceTool_method_append_from>`
Añade vértices de una superficie :ref:`Mesh<class_Mesh>` dada al array de vértices actual con la :ref:`Transform3D<class_Transform3D>` especificada.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_begin:
.. rst-class:: classref-method
|void| **begin**\ (\ primitive\: :ref:`PrimitiveType<enum_Mesh_PrimitiveType>`\ ) :ref:`🔗<class_SurfaceTool_method_begin>`
Llamado antes de añadir cualquier vértice. Toma el tipo primitivo como argumento (por ejemplo, :ref:`Mesh.PRIMITIVE_TRIANGLES<class_Mesh_constant_PRIMITIVE_TRIANGLES>`).
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_clear:
.. rst-class:: classref-method
|void| **clear**\ (\ ) :ref:`🔗<class_SurfaceTool_method_clear>`
Despeja toda la información pasada a la herramienta de la superficie hasta ahora.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_commit:
.. rst-class:: classref-method
:ref:`ArrayMesh<class_ArrayMesh>` **commit**\ (\ existing\: :ref:`ArrayMesh<class_ArrayMesh>` = null, flags\: :ref:`int<class_int>` = 0\ ) :ref:`🔗<class_SurfaceTool_method_commit>`
Returns a constructed :ref:`ArrayMesh<class_ArrayMesh>` from current information passed in. If an existing :ref:`ArrayMesh<class_ArrayMesh>` is passed in as an argument, will add an extra surface to the existing :ref:`ArrayMesh<class_ArrayMesh>`.
The ``flags`` argument can be the bitwise OR of :ref:`Mesh.ARRAY_FLAG_USE_DYNAMIC_UPDATE<class_Mesh_constant_ARRAY_FLAG_USE_DYNAMIC_UPDATE>`, :ref:`Mesh.ARRAY_FLAG_USE_8_BONE_WEIGHTS<class_Mesh_constant_ARRAY_FLAG_USE_8_BONE_WEIGHTS>`, or :ref:`Mesh.ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY<class_Mesh_constant_ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_commit_to_arrays:
.. rst-class:: classref-method
:ref:`Array<class_Array>` **commit_to_arrays**\ (\ ) :ref:`🔗<class_SurfaceTool_method_commit_to_arrays>`
Commits the data to the same format used by :ref:`ArrayMesh.add_surface_from_arrays()<class_ArrayMesh_method_add_surface_from_arrays>`, :ref:`ImporterMesh.add_surface()<class_ImporterMesh_method_add_surface>`, and :ref:`create_from_arrays()<class_SurfaceTool_method_create_from_arrays>`. This way you can further process the mesh data using the :ref:`ArrayMesh<class_ArrayMesh>` or :ref:`ImporterMesh<class_ImporterMesh>` APIs.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_create_from:
.. rst-class:: classref-method
|void| **create_from**\ (\ existing\: :ref:`Mesh<class_Mesh>`, surface\: :ref:`int<class_int>`\ ) :ref:`🔗<class_SurfaceTool_method_create_from>`
Crea un array de vértices a partir de una :ref:`Mesh<class_Mesh>` existente.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_create_from_arrays:
.. rst-class:: classref-method
|void| **create_from_arrays**\ (\ arrays\: :ref:`Array<class_Array>`, primitive_type\: :ref:`PrimitiveType<enum_Mesh_PrimitiveType>` = 3\ ) :ref:`🔗<class_SurfaceTool_method_create_from_arrays>`
Creates this SurfaceTool from existing vertex arrays such as returned by :ref:`commit_to_arrays()<class_SurfaceTool_method_commit_to_arrays>`, :ref:`Mesh.surface_get_arrays()<class_Mesh_method_surface_get_arrays>`, :ref:`Mesh.surface_get_blend_shape_arrays()<class_Mesh_method_surface_get_blend_shape_arrays>`, :ref:`ImporterMesh.get_surface_arrays()<class_ImporterMesh_method_get_surface_arrays>`, and :ref:`ImporterMesh.get_surface_blend_shape_arrays()<class_ImporterMesh_method_get_surface_blend_shape_arrays>`. ``primitive_type`` controls the type of mesh data, defaulting to :ref:`Mesh.PRIMITIVE_TRIANGLES<class_Mesh_constant_PRIMITIVE_TRIANGLES>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_create_from_blend_shape:
.. rst-class:: classref-method
|void| **create_from_blend_shape**\ (\ existing\: :ref:`Mesh<class_Mesh>`, surface\: :ref:`int<class_int>`, blend_shape\: :ref:`String<class_String>`\ ) :ref:`🔗<class_SurfaceTool_method_create_from_blend_shape>`
Crea un array de vértices a partir de la forma de mezcla especificada de una :ref:`Mesh<class_Mesh>` existente. Esto puede ser usado para extraer una pose específica de una forma de mezcla.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_deindex:
.. rst-class:: classref-method
|void| **deindex**\ (\ ) :ref:`🔗<class_SurfaceTool_method_deindex>`
Elimina el array de índices expandiendo el array de vértices.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_generate_lod:
.. rst-class:: classref-method
:ref:`PackedInt32Array<class_PackedInt32Array>` **generate_lod**\ (\ nd_threshold\: :ref:`float<class_float>`, target_index_count\: :ref:`int<class_int>` = 3\ ) :ref:`🔗<class_SurfaceTool_method_generate_lod>`
**Obsoleto:** This method is unused internally, as it does not preserve normals or UVs. Consider using :ref:`ImporterMesh.generate_lods()<class_ImporterMesh_method_generate_lods>` instead.
Genera un LOD para un ``nd_threshold`` dado en unidades lineales (raíz cuadrada de la métrica de error cuadrático), utilizando como máximo ``target_index_count`` índices.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_generate_normals:
.. rst-class:: classref-method
|void| **generate_normals**\ (\ flip\: :ref:`bool<class_bool>` = false\ ) :ref:`🔗<class_SurfaceTool_method_generate_normals>`
Generates normals from vertices so you do not have to do it manually. If ``flip`` is ``true``, the resulting normals will be inverted. :ref:`generate_normals()<class_SurfaceTool_method_generate_normals>` should be called *after* generating geometry and *before* committing the mesh using :ref:`commit()<class_SurfaceTool_method_commit>` or :ref:`commit_to_arrays()<class_SurfaceTool_method_commit_to_arrays>`. For correct display of normal-mapped surfaces, you will also have to generate tangents using :ref:`generate_tangents()<class_SurfaceTool_method_generate_tangents>`.
\ **Note:** :ref:`generate_normals()<class_SurfaceTool_method_generate_normals>` only works if the primitive type is set to :ref:`Mesh.PRIMITIVE_TRIANGLES<class_Mesh_constant_PRIMITIVE_TRIANGLES>`.
\ **Note:** :ref:`generate_normals()<class_SurfaceTool_method_generate_normals>` takes smooth groups into account. To generate smooth normals, set the smooth group to a value greater than or equal to ``0`` using :ref:`set_smooth_group()<class_SurfaceTool_method_set_smooth_group>` or leave the smooth group at the default of ``0``. To generate flat normals, set the smooth group to ``-1`` using :ref:`set_smooth_group()<class_SurfaceTool_method_set_smooth_group>` prior to adding vertices.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_generate_tangents:
.. rst-class:: classref-method
|void| **generate_tangents**\ (\ ) :ref:`🔗<class_SurfaceTool_method_generate_tangents>`
Genera un vector tangente para cada vértice. Requiere que cada vértice ya tenga los UV y las normales establecidos (ver :ref:`generate_normals()<class_SurfaceTool_method_generate_normals>`).
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_get_aabb:
.. rst-class:: classref-method
:ref:`AABB<class_AABB>` **get_aabb**\ (\ ) |const| :ref:`🔗<class_SurfaceTool_method_get_aabb>`
Devuelve el cuadro delimitador alineado con los ejes de las posiciones de los vértices.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_get_custom_format:
.. rst-class:: classref-method
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **get_custom_format**\ (\ channel_index\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_SurfaceTool_method_get_custom_format>`
Devuelve el formato para ``channel_index`` personalizado (actualmente hasta 4). Devuelve :ref:`CUSTOM_MAX<class_SurfaceTool_constant_CUSTOM_MAX>` si este canal personalizado no se usa.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_get_primitive_type:
.. rst-class:: classref-method
:ref:`PrimitiveType<enum_Mesh_PrimitiveType>` **get_primitive_type**\ (\ ) |const| :ref:`🔗<class_SurfaceTool_method_get_primitive_type>`
Devuelve el tipo de geometría de la malla, como :ref:`Mesh.PRIMITIVE_TRIANGLES<class_Mesh_constant_PRIMITIVE_TRIANGLES>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_get_skin_weight_count:
.. rst-class:: classref-method
:ref:`SkinWeightCount<enum_SurfaceTool_SkinWeightCount>` **get_skin_weight_count**\ (\ ) |const| :ref:`🔗<class_SurfaceTool_method_get_skin_weight_count>`
By default, returns :ref:`SKIN_4_WEIGHTS<class_SurfaceTool_constant_SKIN_4_WEIGHTS>` to indicate only 4 bone influences per vertex are used.
Returns :ref:`SKIN_8_WEIGHTS<class_SurfaceTool_constant_SKIN_8_WEIGHTS>` if up to 8 influences are used.
\ **Note:** This function returns an enum, not the exact number of weights.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_index:
.. rst-class:: classref-method
|void| **index**\ (\ ) :ref:`🔗<class_SurfaceTool_method_index>`
Reduce el array de vértices creando un array de índice. Esto puede mejorar el rendimiento al evitar la reutilización de vértices.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_optimize_indices_for_cache:
.. rst-class:: classref-method
|void| **optimize_indices_for_cache**\ (\ ) :ref:`🔗<class_SurfaceTool_method_optimize_indices_for_cache>`
Optimiza la ordenación de triángulos para mejorar el rendimiento. Requiere que :ref:`get_primitive_type()<class_SurfaceTool_method_get_primitive_type>` sea :ref:`Mesh.PRIMITIVE_TRIANGLES<class_Mesh_constant_PRIMITIVE_TRIANGLES>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_bones:
.. rst-class:: classref-method
|void| **set_bones**\ (\ bones\: :ref:`PackedInt32Array<class_PackedInt32Array>`\ ) :ref:`🔗<class_SurfaceTool_method_set_bones>`
Especifica un array de huesos para usar para el *siguiente* vértice. ``bones`` debe contener 4 enteros.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_color:
.. rst-class:: classref-method
|void| **set_color**\ (\ color\: :ref:`Color<class_Color>`\ ) :ref:`🔗<class_SurfaceTool_method_set_color>`
Especifica un :ref:`Color<class_Color>` para usar para el *siguiente* vértice. Si cada vértice necesita tener esta información establecida y no la envías para el primer vértice, es posible que esta información no se utilice en absoluto.
\ **Nota:** El material debe tener :ref:`BaseMaterial3D.vertex_color_use_as_albedo<class_BaseMaterial3D_property_vertex_color_use_as_albedo>` activado para que el color del vértice sea visible.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_custom:
.. rst-class:: classref-method
|void| **set_custom**\ (\ channel_index\: :ref:`int<class_int>`, custom_color\: :ref:`Color<class_Color>`\ ) :ref:`🔗<class_SurfaceTool_method_set_custom>`
Establece el valor personalizado en este vértice para ``channel_index``.
\ :ref:`set_custom_format()<class_SurfaceTool_method_set_custom_format>` debe ser llamado primero para este ``channel_index``. Los formatos que no son RGBA ignorarán otros canales de color.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_custom_format:
.. rst-class:: classref-method
|void| **set_custom_format**\ (\ channel_index\: :ref:`int<class_int>`, format\: :ref:`CustomFormat<enum_SurfaceTool_CustomFormat>`\ ) :ref:`🔗<class_SurfaceTool_method_set_custom_format>`
Establece el formato de color para este ``channel_index`` personalizado. Usa :ref:`CUSTOM_MAX<class_SurfaceTool_constant_CUSTOM_MAX>` para desactivarlo.
Debe invocarse después de :ref:`begin()<class_SurfaceTool_method_begin>` y debe establecerse antes de :ref:`commit()<class_SurfaceTool_method_commit>` o :ref:`commit_to_arrays()<class_SurfaceTool_method_commit_to_arrays>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_material:
.. rst-class:: classref-method
|void| **set_material**\ (\ material\: :ref:`Material<class_Material>`\ ) :ref:`🔗<class_SurfaceTool_method_set_material>`
Establece :ref:`Material<class_Material>` para ser usado por la :ref:`Mesh<class_Mesh>` que estás construyendo.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_normal:
.. rst-class:: classref-method
|void| **set_normal**\ (\ normal\: :ref:`Vector3<class_Vector3>`\ ) :ref:`🔗<class_SurfaceTool_method_set_normal>`
Especifica una normal para usar para el *siguiente* vértice. Si cada vértice necesita tener esta información establecida y no la envías para el primer vértice, es posible que esta información no se utilice en absoluto.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_skin_weight_count:
.. rst-class:: classref-method
|void| **set_skin_weight_count**\ (\ count\: :ref:`SkinWeightCount<enum_SurfaceTool_SkinWeightCount>`\ ) :ref:`🔗<class_SurfaceTool_method_set_skin_weight_count>`
Set to :ref:`SKIN_8_WEIGHTS<class_SurfaceTool_constant_SKIN_8_WEIGHTS>` to indicate that up to 8 bone influences per vertex may be used.
By default, only 4 bone influences are used (:ref:`SKIN_4_WEIGHTS<class_SurfaceTool_constant_SKIN_4_WEIGHTS>`).
\ **Note:** This function takes an enum, not the exact number of weights.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_smooth_group:
.. rst-class:: classref-method
|void| **set_smooth_group**\ (\ index\: :ref:`int<class_int>`\ ) :ref:`🔗<class_SurfaceTool_method_set_smooth_group>`
Especifica el grupo suavizado a usar para el *siguiente* vértice. Si nunca se llama a esto, todos los vértices tendrán el grupo suavizado por defecto de ``0`` y se suavizarán con los vértices adyacentes del mismo grupo. Para producir una malla con normales planas, establece el grupo suavizado a ``-1``.
\ **Nota:** Esta función en realidad toma un ``uint32_t``, por lo que los usuarios de C# deben usar ``uint32.MaxValue`` en lugar de ``-1`` para producir una malla con normales planas.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_tangent:
.. rst-class:: classref-method
|void| **set_tangent**\ (\ tangent\: :ref:`Plane<class_Plane>`\ ) :ref:`🔗<class_SurfaceTool_method_set_tangent>`
Specifies a tangent to use for the *next* vertex. If every vertex needs to have this information set and you fail to submit it for the first vertex, this information may not be used at all.
\ **Note:** Even though ``tangent`` is a :ref:`Plane<class_Plane>`, it does not directly represent the tangent plane. Its :ref:`Plane.x<class_Plane_property_x>`, :ref:`Plane.y<class_Plane_property_y>`, and :ref:`Plane.z<class_Plane_property_z>` represent the tangent vector and :ref:`Plane.d<class_Plane_property_d>` should be either ``-1`` or ``1``. See also :ref:`Mesh.ARRAY_TANGENT<class_Mesh_constant_ARRAY_TANGENT>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_uv:
.. rst-class:: classref-method
|void| **set_uv**\ (\ uv\: :ref:`Vector2<class_Vector2>`\ ) :ref:`🔗<class_SurfaceTool_method_set_uv>`
Especifica un conjunto de coordenadas UV para usar para el *siguiente* vértice. Si cada vértice necesita tener esta información establecida y no la envías para el primer vértice, es posible que esta información no se utilice en absoluto.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_uv2:
.. rst-class:: classref-method
|void| **set_uv2**\ (\ uv2\: :ref:`Vector2<class_Vector2>`\ ) :ref:`🔗<class_SurfaceTool_method_set_uv2>`
Especifica un segundo conjunto opcional de coordenadas UV para usar en el *siguiente* vértice. Si cada vértice necesita tener esta información establecida y no la envías para el primer vértice, puede que esta información no se use en absoluto.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_weights:
.. rst-class:: classref-method
|void| **set_weights**\ (\ weights\: :ref:`PackedFloat32Array<class_PackedFloat32Array>`\ ) :ref:`🔗<class_SurfaceTool_method_set_weights>`
Especifica los valores de peso a usar para el *siguiente* vértice. ``weights`` debe contener 4 valores. Si cada vértice necesita tener esta información establecida y no la envías para el primer vértice, puede que esta información no se use en absoluto.
.. |virtual| replace:: :abbr:`virtual (Normalmente, este método debería ser sobreescrito por el usuario para que tenga algún efecto.)`
.. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)`
.. |const| replace:: :abbr:`const (Este método no tiene efectos secundarios. No modifica ninguna de las variables miembro de la instancia.)`
.. |vararg| replace:: :abbr:`vararg (Este método permite agregar cualquier número de argumentos después de los descritos aquí.)`
.. |constructor| replace:: :abbr:`constructor (Este método se utiliza para construir un tipo.)`
.. |static| replace:: :abbr:`static (Este método no necesita una instancia para ser llamado, por lo que puede llamarse directamente utilizando el nombre de la clase.)`
.. |operator| replace:: :abbr:`operator (Este método describe un operador válido para usar con este tipo como operando izquierdo.)`
.. |bitfield| replace:: :abbr:`BitField (Este valor es un entero compuesto como una máscara de bits de las siguientes banderas.)`
.. |void| replace:: :abbr:`void (Sin valor de retorno.)`