De Foto a Realidad Aumentada 3D: Magia con A-Frame y MindAR

ingcarloseina de fondo con varios modelos 3D
Convierte una foto en realidad aumentada

¿Alguna vez has querido crear una experiencia de Realidad Aumentada (AR) pero te has sentido limitado por tener que definir los marcadores (las imÔgenes que activan la AR) de antemano? Hoy vamos a analizar un código fascinante que rompe esa barrera.

Crea Realidad Aumentada (Augmented Reality) Gratis y en minutos con esta herramienta: Editor AR Online: Modelos 3D (GLB, GLTF) y Video (MP4)

Desarrolle una pequeña aplicación web que permite a cualquier usuario convertir una foto de su entorno en un marcador de AR funcional, todo directamente desde el navegador.

La aplicación funciona en un flujo de tres pasos muy intuitivo:

  • Paso 1: El Marcador. El usuario toma una foto desde su telefono Android o Iphone (o sube una foto) para usarla como marcador.
  • TambiĆ©n puede cargar un archivo .mind. ĀæNo sabes cómo crear un marcador para realidad aumentada .mind? Aqui te dejo la herramienta perfecta para ello: Compilador de Marcadores AR | Crea Realidad Aumentada Gratis
  • Paso 2: El Modelo. El usuario selecciona quĆ© modelo 3D quiere ver.
  • Paso 3: La Magia. El usuario apunta su cĆ”mara a la foto que acaba de tomar y Ā”listo! El modelo 3D aparece sobre ella.

Apóyame en Patreon es muy importante para mí. Gracias por tu apoyo. Da clic en la imagen para ingresar

logo de realidad aumentada empezando desde cero y patreon
Realidad Aumentada Empezando Desde Cero y Patreon

Las TecnologĆ­as Clave para este tutorial de realidad aumentada

Este proyecto se sostiene sobre dos pilares fundamentales del WebAR:

A-Frame (aframe.io): Es un framework web para construir experiencias de Realidad Virtual (VR) y Aumentada (AR) usando HTML. Nos permite definir una escena 3D con etiquetas tan simples como <a-scene> y <a-gltf-model>.

MindAR (mindar.org): Es una biblioteca de seguimiento de imÔgenes de código abierto para WebAR. La integramos con A-Frame para que se encargue de «entender» la imagen del mundo real y colocar nuestro contenido 3D sobre ella.

¿Como sucede?»: Compilación de Marcadores en el Navegador

Lo mÔs interesante de este código no es solo mostrar un modelo 3D, sino cómo crea el marcador AR sobre la marcha.

Tradicionalmente, necesitas compilar tus imÔgenes en un archivo especial (.mind en este caso) en un servidor o en tu computadora. Este código lo hace todo en el dispositivo del usuario.

Cuando el usuario sube una foto en el «Paso 1», usamos la biblioteca de MindAR para analizarla en tiempo real.

Te puede interesar este articulo: Toca la Realidad Aumentada: Usa tus manos en apps WebAR

  • AnĆ”lisis de Calidad de la fotografĆ­a.

No cualquier foto sirve como un buen marcador. Necesita suficientes puntos de contraste y características únicas. El código utiliza MINDAR.IMAGE.Compiler() para analizar la imagen y darle una «puntuación de calidad».

// Concepto de anÔlisis de calidad (No es el código completo)
// 1. Cargamos la imagen que el usuario tomó
const img = new Image();
img.src = '...'; // La foto del usuario
// 2. Creamos un compilador de MindAR
const compiler = new window.MINDAR.IMAGE.Compiler();
// 3. Analizamos la imagen
const dataList = await compiler.compileImageTargets([img]);
// 4. Obtenemos la puntuación
const qualityScore = dataList[0].matchingData.length;
// 5. Mostramos al usuario si la imagen es buena, aceptable o pobre
if (qualityScore > 50) {
console.log("”Marcador excelente!");
} else {
console.log("Prueba una foto con mƔs detalles.");
}

Esto es crucial para asegurar que la experiencia de AR sea estable. Si la puntuación es baja, le pedimos al usuario que tome otra foto.

  • Generación DinĆ”mica de la Escena

Una vez que tenemos un marcador de buena calidad y el usuario ha seleccionado un modelo 3D, no cargamos una pƔgina AR estƔtica. Creamos la escena de A-Frame dinƔmicamente usando JavaScript.

AquĆ­ estĆ” el truco:

Compilamos la imagen del usuario en un archivo .mind virtual (en memoria).

Creamos una URL temporal (un Blob URL) para este archivo en memoria.

Inyectamos una nueva escena <a-scene> en la pƔgina, diciƩndole a mindar-image que use esa URL temporal como su marcador (imageTargetSrc).

// Concepto de creación de escena (No es el código completo)
// 1. 'compiledMindData' es el marcador que creamos en el paso anterior
// 2. 'selectedModelUrl' es el modelo 3D que el usuario eligió
// Creamos un Blob y una URL temporal para el marcador
const blob = new Blob([compiledMindData]);
const mindUrl = URL.createObjectURL(blob);
// Creamos la escena de A-Frame
const sceneEl = document.createElement("a-scene");
// Configuramos MindAR para usar nuestro marcador reciƩn creado
sceneEl.setAttribute("mindar-image", {
imageTargetSrc: mindUrl
});
// AƱadimos la cƔmara y el modelo 3D
const targetEntity = document.createElement("a-entity");
const modelEl = document.createElement("a-gltf-model");
modelEl.setAttribute("src", selectedModelUrl);
// ... (AƱadimos todo al DOM)

Y así, ”hemos creado una experiencia de AR completamente personalizada sin necesidad de un servidor!

¿Quieres el Código Completo?

Este artículo cubre la arquitectura y los conceptos clave, ”pero hay mucho mÔs! El código completo incluye optimizaciones importantes para que funcione fluidamente en móviles, como:

  • El código HTML y CSS completo para la interfaz de 3 pasos.
  • Funciones para redimensionar imĆ”genes y mejorar el rendimiento.
  • El uso de sessionStorage para persistir el marcador y que no se pierda si la app de la cĆ”mara se reinicia (un problema comĆŗn en móviles).
  • Manejo de fugas de memoria (Memory Leaks) al cambiar de modelo.
  • Una galerĆ­a de modelos 3D lista para usar.

He puesto el código fuente completo, optimizado y comentado línea por línea a disposición de mis suscriptores en Patreon. Si quieres construir esta aplicación tú mismo y tener acceso a este y otros proyectos exclusivos, ”considera apoyarme!

LINK AL ARTICULO DE PATREON PARA DESCARGAR

”Gracias por leer!

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Scroll al inicio
0
Would love your thoughts, please comment.x
()
x