WebAR FácilAbrir ejemploEnglish

Arquitectura implementada

El núcleo es agnóstico al renderizador. Los wrappers son una capa opcional. No hay servicios externos de compilación o tracking.

La entrada recomendada es la capa webar-scene/target/model/video de src/wrappers/web-components.ts. El standalone la registra automáticamente; configura recursos, compila imágenes, selecciona clips y libera recursos. Un observador y una cola sincronizan cambios de targets/jerarquía; cada medio administra sus cargas cancelables. GestureController gestiona interacción opt-in sobre contenido visible sin modificar el anclaje. El núcleo y los wrappers programáticos se conservan para extensiones.

Aplicación HTML / TypeScript / A-Frame
                 |
   ThreeARScene / ThreeARGroup / componentes (opcionales)
                 |
           WebAREngine
          /     |      \
 CameraManager Tracker  SLAMManager (WebXR)
          |     |            |
          |  Worker ORB/LK   compositor y hit-test nativos
          |
      OpticalFlowSLAM -> Worker de odometría -> OpenCV WASM

 JPG/PNG -> MarkerCompiler -> Worker -> WART v2 -> Tracker

Carpetas fuente

Ruta Responsabilidad
src/WebAREngine.ts Fachada, estados, eventos y transición espacial
src/Pose.ts, src/core.ts, src/index.ts, src/standalone.ts Contratos y exports
src/camera/ Captura, lectura RGBA, negociación y adaptación
src/tracking/ Controlador, Worker, extracción, matching, pose y eventos
src/tools/ Compilador de marcador en Worker
src/calibration/ Captura ChArUco y solución opcional de cámara
src/slam/ WebXR, captura alineada, odometría y snapshots
src/spatial/ Matrices, filtrado y presentación temporal
src/vision/ Runtime CV, intrínsecos y algoritmos auxiliares
src/wrappers/ Scene, Group, Model, Video, fondo y A-Frame
scripts/ CLI, benchmark, empaquetado y manual
public/ Recursos estáticos que se copian al build
examples/, tools/ Aplicaciones y herramientas
tests/ Pruebas de CV, contratos y navegadores
dist/ Distribución generada; no editar como fuente

El diseño inicial archivado propuso paquetes separados; la distribución vigente usa los entrypoints webar-facil, webar-facil/core, webar-facil/browser y webar-facil/standalone. No importes nombres de paquetes del diseño histórico.

Flujo y concurrencia

La cámara negocia un MediaStream y entrega frames limitados por resolución/frecuencia. Cada frame tiene un identificador de sesión; respuestas tardías de una sesión cancelada no deben reaparecer como observaciones actuales.

El tracker transfiere un único RGBA por lote. El Worker comparte gris y extracción entre targets y conserva estados/descriptores para seguimiento y recuperación por ID. Las matrices aceptadas pasan a filtrado, tolerancia, eventos y visibilidad. Animación y render son independientes.

La fachada serializa configuración y utiliza backpressure para frames. Cancelar o detener cierra recursos y descarta mensajes tardíos. Los Workers no acceden al renderer ni escriben DOM.

Marcos y extensiones

WebXR usa su propio origen. La odometría mantiene un mapa local. La transición requiere una transformación de cámara común y una observación reciente o una recolocación explícita. Conservar una matriz camera-space no demuestra anclaje world-space.

Un renderer nuevo consume ARPose y eventos de visibilidad. Un backend implementa OdometryModule. Un compilador alternativo debe producir descriptores compatibles e identificador/versionado propios si cambia el algoritmo. Preserva las verificaciones geométricas y declara pérdida cuando no haya evidencia.

El módulo NFT perfila etapas por frame y mantiene una referencia de descriptores ya verificados para redetección rápida. Recurre al pool global si falla esa ruta y periódicamente; no elimina RANSAC ni sustituye mediciones por poses inventadas. Las estadísticas llegan por CameraMetrics.tracking y ARDiagnostics; no dependen de Three.js. Ver rendimiento y benchmark.

La redetección NFT considera cobertura convexa, distribución, error y retención del soporte. Un mínimo escaso pero bien distribuido no fuerza matching global por cantidad. Revisiones acotadas y desacuerdos entre estimaciones mantienen una vía de corrección independiente; ver política y límites en rendimiento.

El matching ORB compartido usa un kernel Hamming WASM especializado con resultado equivalente al BFMatcher previo y alternativa OpenCV si no puede compilarse. El kernel está embebido, sus buffers son reutilizables/acotados y la fuente WAT se distribuye con el SDK. No altera los criterios geométricos, los datos WART ni la API declarativa.

Apoya WebAR Fácil