|
| 1 | +# Soporte para Archivos ZIP en el glTF Viewer |
| 2 | + |
| 3 | +## Descripción |
| 4 | + |
| 5 | +El viewer ahora soporta archivos ZIP que contienen modelos glTF con sus assets asociados (archivos .bin, texturas, etc.). Esto permite cargar modelos complejos que están distribuidos en múltiples archivos desde URLs de S3. |
| 6 | + |
| 7 | +## Funcionalidades Implementadas |
| 8 | + |
| 9 | +### 1. Detección Automática de Archivos ZIP |
| 10 | +- El sistema detecta automáticamente si una URL apunta a un archivo ZIP (extensión .zip) |
| 11 | +- Se integra con el sistema existente de detección de URLs S3 |
| 12 | + |
| 13 | +### 2. Descarga y Extracción |
| 14 | +- Descarga el archivo ZIP completo desde S3 |
| 15 | +- Extrae todos los archivos del ZIP usando JSZip |
| 16 | +- Crea un mapa de archivos extraídos para referencia rápida |
| 17 | + |
| 18 | +### 3. Carga de Modelos glTF |
| 19 | +- Busca automáticamente el archivo .gltf principal en el ZIP |
| 20 | +- Carga el modelo usando el GLTFLoader de Three.js |
| 21 | +- Maneja assets relativos (archivos .bin, texturas) desde los archivos extraídos |
| 22 | + |
| 23 | +### 4. Manejo de Assets |
| 24 | +- Los archivos .bin, texturas (.jpg, .png, .webp) y otros assets se cargan desde el ZIP |
| 25 | +- Se crean blob URLs temporales para cada asset |
| 26 | +- Limpieza automática de memoria al finalizar la carga |
| 27 | + |
| 28 | +## Flujo de Carga |
| 29 | + |
| 30 | +``` |
| 31 | +URL ZIP S3 → Fetch ZIP → JSZip.extract() → Encontrar .gltf → GLTFLoader → Visualización |
| 32 | +``` |
| 33 | + |
| 34 | +## Tipos de Archivo Soportados |
| 35 | + |
| 36 | +### Archivos Requeridos |
| 37 | +- **.gltf**: Archivo principal del modelo (requerido) |
| 38 | + |
| 39 | +### Archivos Opcionales |
| 40 | +- **.bin**: Datos binarios de geometría |
| 41 | +- **.jpg/.jpeg**: Texturas en formato JPEG |
| 42 | +- **.png**: Texturas en formato PNG |
| 43 | +- **.webp**: Texturas en formato WebP |
| 44 | +- **.ktx2**: Texturas comprimidas |
| 45 | +- **.draco**: Geometría comprimida |
| 46 | + |
| 47 | +## Manejo de Errores |
| 48 | + |
| 49 | +El sistema incluye manejo específico de errores para archivos ZIP: |
| 50 | + |
| 51 | +- **No GLTF file found**: Si el ZIP no contiene archivos .gltf |
| 52 | +- **CORS errors**: Problemas de configuración CORS en S3 |
| 53 | +- **Network errors**: Problemas de conectividad |
| 54 | +- **Invalid ZIP**: Archivos ZIP corruptos o inválidos |
| 55 | + |
| 56 | +## Compatibilidad |
| 57 | + |
| 58 | +- Funciona con URLs S3 firmadas (signed URLs) |
| 59 | +- Compatible con el sistema existente de carga de archivos GLB |
| 60 | +- Mantiene compatibilidad con drag & drop de archivos locales |
| 61 | +- Soporta todos los formatos de textura y compresión existentes |
| 62 | + |
| 63 | +## Ejemplo de Uso |
| 64 | + |
| 65 | +```javascript |
| 66 | +// URL de ejemplo para un archivo ZIP en S3 |
| 67 | +const zipUrl = "https://bucket.s3.amazonaws.com/model.zip?AWSAccessKeyId=...&Signature=..."; |
| 68 | + |
| 69 | +// El viewer detectará automáticamente que es un ZIP y lo procesará |
| 70 | +viewer.load(zipUrl, '', new Map()); |
| 71 | +``` |
| 72 | + |
| 73 | +## Limitaciones |
| 74 | + |
| 75 | +- El archivo ZIP debe contener al menos un archivo .gltf |
| 76 | +- Se usa el primer archivo .gltf encontrado como archivo principal |
| 77 | +- Los archivos deben estar en la raíz del ZIP (no en subcarpetas) |
| 78 | +- Tamaño máximo recomendado: 100MB (limitación de S3 signed URLs) |
| 79 | + |
| 80 | +## Dependencias |
| 81 | + |
| 82 | +- **JSZip**: Para extracción de archivos ZIP |
| 83 | +- **Three.js GLTFLoader**: Para carga de modelos glTF |
| 84 | +- **Fetch API**: Para descarga de archivos desde S3 |
0 commit comments