flag-cloth

Configuración

Todas las opciones del constructor, sus valores exactos y si pueden cambiar durante la ejecución.

createFlagCloth() acepta un objeto FlagClothOptions. El componente de React acepta las mismas opciones salvo container, porque crea ese elemento por ti. Los grupos anidados son parciales: proporciona solo los valores que quieras cambiar.

import type { FlagClothOptions } from 'flag-cloth';

Valores obligatorios

OpciónTipoPredeterminadoFunción
containerHTMLElementobligatorioElemento que contiene y define el tamaño del canvas. Solo API vanilla.
texturestring | TexImageSource | nullobligatorioURL, fuente de imagen lista para el navegador o null para renderizar material.baseColor.

Topología y ciclo de vida

OpciónTipoPredeterminadoFunción
widthnumber3Ancho de la tela en unidades de simulación, no píxeles CSS.
heightnumber2Alto de la tela en unidades de simulación, no píxeles CSS.
segments.xnumber32Cantidad de celdas horizontales. Hay x + 1 columnas de partículas.
segments.ynumber20Cantidad de celdas verticales. Hay y + 1 filas de partículas.
attachmentAttachment'left'Borde, esquina, borde parcial, puntos personalizados o 'none'.
autoStartbooleantrueInicia la instancia inmediatamente y programa su bucle de animación propio.

Cambiar width, height o segments reconstruye la topología, pero conserva el canvas, el contexto WebGL2, el renderizador, los observadores y los controladores de eventos. Cambiar attachment solo reconstruye la máscara de puntos fijos. Consulta Sujeciones para ver todas las formas aceptadas.

Viento

PropiedadTipoPredeterminadoFunción
direction[number, number, number][1, 0.08, 0.3]Dirección en el espacio del mundo, normalizada internamente. Un vector cero desactiva el viento direccional.
strengthnumber7Velocidad base del viento.
turbulencenumber0.35Intensidad de las ráfagas con ruido y de la variación lateral.
gustFrequencynumber0.5Velocidad de variación temporal del campo de viento.
spatialScalenumber0.8Frecuencia de variación espacial sobre la tela.
aerodynamicCoefficientnumber0.35Multiplicador que convierte la presión de cada triángulo en fuerza sobre las partículas.

Simulación

PropiedadTipoPredeterminadoFunción
dampingnumber0.985Velocidad conservada durante un intervalo de 1/60 de segundo.
gravity[number, number, number][0, 0, 0]Aceleración en el espacio del mundo. Está desactivada por defecto para una bandera convencional.
fixedTimeStepnumber1 / 60Paso estable del acumulador en segundos.
maxFrameDeltanumber0.1Intervalo máximo entre frames aceptado por el acumulador, en segundos.
substepsnumber2Subdivisiones de integración por paso fijo. Se redondea hacia abajo y nunca puede ser menor que 1.
constraintIterationsnumber6Pasadas de las restricciones estructurales, diagonales y de flexión por subpaso.
structuralStiffnessnumber1Rigidez de las distancias horizontales y verticales.
shearStiffnessnumber0.9Rigidez de las distancias diagonales.
bendStiffnessnumber0.4Rigidez de las distancias de dos celdas.
maxCorrectionnumber0.25Corrección máxima por restricción. Usa 0 para desactivar el límite.
massnumber1Masa total de la tela, independiente de la densidad de la cuadrícula.

El solver limita la rigidez entre 0 y 1 y la convierte en una corrección independiente de la cantidad de iteraciones. Consulta Simulación de tela antes de aumentar la resolución o el trabajo del solver.

Interacción con el puntero

PropiedadTipoPredeterminadoFunción
enabledbooleantrueHabilita el arrastre con ratón, lápiz y tacto mediante Pointer Events.
touchAction'pan-y' | 'pan-x' | 'none' | 'auto''pan-y'Política táctil del navegador. El valor predeterminado conserva el desplazamiento vertical y el arrastre horizontal de la tela.
dragRadiusnumber1Radio en la cuadrícula alrededor de la partícula seleccionada.
dragStiffnessnumber0.9Intensidad de la restricción posicional temporal.
maxDragDistancenumber4Movimiento máximo desde el punto inicial. Usa 0 para no limitarlo.
allowPinnedbooleanfalsePermite seleccionar temporalmente partículas fijas.
releaseImpulse[number, number, number][0, 0, 0]Impulso de velocidad aplicado al soltar, en el espacio del mundo.

Renderizador

La tabla muestra el perfil quality. El perfil performance cambia maxPixelRatio a 1, shadows a false y shadingUpdateInterval a 2. Los valores explícitos proporcionados junto al perfil tienen prioridad.

PropiedadTipoPredeterminadoFunción
preset'quality' | 'performance''quality'Selecciona un perfil de renderizado probado.
alphabooleantrueSolicita un contexto WebGL2 con alfa. Solo durante la construcción.
antialiasbooleantrueSolicita antialiasing multisample del navegador. Solo durante la construcción.
desynchronizedbooleanfalseSolicita un contexto desincronizado cuando sea compatible. Solo durante la construcción.
powerPreferenceWebGLPowerPreference'high-performance'Preferencia de GPU al crear el contexto. Solo durante la construcción.
maxPixelRationumber1.5Limita la resolución interna; los valores menores que 0.5 se ajustan.
textureFiltering'linear' | 'nearest''linear'Modo de muestreo de la textura.
transparentbooleantrueLimpia con alfa en lugar de backgroundColor.
backgroundColorstring'transparent'Color CSS utilizado cuando transparent es false.
shadowsbooleantrueHabilita la sombra suave de silueta con nueve muestras.
shadingUpdateIntervalnumber1Recalcula las normales cada N frames renderizados.

alpha, antialias, desynchronized y powerPreference no aparecen en FlagClothUpdateOptions.renderer, porque cambiar un atributo del contexto WebGL requiere una nueva instancia.

Material

PropiedadTipoPredeterminadoFunción
baseColorstring'#f2f4f3'Color de la tela cuando texture es null.
ambientnumber0.58Brillo mínimo del material.
diffusenumber0.55Intensidad de la iluminación direccional de los pliegues.
specularnumber0.16Intensidad del reflejo en el perfil quality.
shininessnumber18Concentración del reflejo.
foldContrastnumber0.42Contraste claro/oscuro de los pliegues.
shadowColorstring'rgba(0, 0, 0, 0.3)'Color CSS de la sombra de silueta.
shadowBlurnumber18Radio de muestreo de la sombra en píxeles CSS.
shadowOffsetXnumber10Desplazamiento horizontal de la sombra en píxeles CSS.
shadowOffsetYnumber12Desplazamiento vertical de la sombra en píxeles CSS.

Iluminación

PropiedadTipoPredeterminadoFunción
enabledbooleantrueHabilita la iluminación de los pliegues.
intensitynumber1Multiplicador general de la luz direccional.
direction[number, number, number][-0.4, 0.7, 1]Dirección de la luz, normalizada internamente.

Cámara

PropiedadTipoPredeterminadoFunción
fovnumber40Campo de visión vertical en grados.
nearnumber0.01Distancia del plano de recorte cercano.
farnumber100Distancia del plano de recorte lejano.
position[number, number, number] | nullnullPosición de la cámara. null encuadra la tela automáticamente.
lookAt[number, number, number][0, 0, 0]Objetivo de la cámara en el espacio del mundo.

Visibilidad y depuración

PropiedadTipoPredeterminadoFunción
visibility.pauseWhenOffscreenbooleantruePausa mediante IntersectionObserver cuando el contenedor está fuera del viewport.
visibility.pauseWhenDocumentHiddenbooleantruePausa cuando document.visibilityState está oculto.
debugboolean | Partial<DebugOptions>falseHabilita o configura el panel opcional.
debug.enabledbooleanfalseCrea el panel de depuración.
debug.updateIntervalnumber500Intervalo de actualización en milisegundos, con un mínimo de 100.

debug: { updateInterval: 250 } no habilita el panel por sí solo; incluye enabled: true o utiliza debug: true.

Integración avanzada

PropiedadTipoPredeterminadoFunción
canvasHTMLCanvasElementcreado por la bibliotecaProporciona un canvas propiedad del usuario.
contextWebGL2RenderingContextcreado por la bibliotecaProporciona un contexto propio; se utiliza su canvas si no se indica canvas.
externalAnimationLoopbooleanfalseDesactiva la programación interna de requestAnimationFrame.

advanced y autoStart son opciones de construcción y no forman parte de FlagClothUpdateOptions.

Actualizaciones durante la ejecución

await flag.setOptions({
  attachment: { points: [[0, 0], [0, 10], [4, 4]] },
  wind: { strength: 11 },
  interaction: { enabled: false },
  renderer: { preset: 'performance' },
});

setOptions() es asíncrono porque puede cargar una textura nueva. Los cambios de viento, sujeción, simulación, interacción, renderizador, material, iluminación, cámara, visibilidad y depuración no recrean el contexto WebGL2.

En esta página