{"id":5282,"date":"2016-06-28T13:12:06","date_gmt":"2016-06-28T12:12:06","guid":{"rendered":"http:\/\/www.espai.es\/blog\/?p=5282"},"modified":"2016-06-28T13:12:06","modified_gmt":"2016-06-28T12:12:06","slug":"a-frame-3d-y-realidad-virtual-en-la-web","status":"publish","type":"post","link":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/","title":{"rendered":"A-Frame, 3D y Realidad Virtual en la Web"},"content":{"rendered":"<p>Hola a todos y saludos desde el \u00e1rea Web de la <a href=\"http:\/\/www.espai.es\/\" target=\"_blank\">Escola Espai<\/a>.\u00a0Normalmente el mundo de las 3 dimensiones en la web ha estado restringido a programadores con avanzados conocimientos de matem\u00e1ticas y que dominaban tecnolog\u00edas como <a href=\"https:\/\/www.khronos.org\/webgl\/\" target=\"_blank\">WebGL<\/a>.\u00a0Hoy haremos una breve introducci\u00f3n a <a href=\"https:\/\/aframe.io\/\" target=\"_blank\">A-Frame<\/a>.<\/p>\n<p><span style=\"line-height: 1.5;\">Exploraremos las posibilidades que nos ofrece este novedoso framework basado en <\/span><a style=\"line-height: 1.5;\" href=\"https:\/\/es.wikipedia.org\/wiki\/HTML5\" target=\"_blank\">HTML5<\/a><span style=\"line-height: 1.5;\">, que nos va a permitir introducir elementos <\/span><strong style=\"line-height: 1.5;\">3D<\/strong><span style=\"line-height: 1.5;\"> y de <\/span><strong style=\"line-height: 1.5;\">Realidad Virtual<\/strong><span style=\"line-height: 1.5;\"> en nuestras paginas web <\/span><strong style=\"line-height: 1.5;\">de forma sencilla<\/strong><span style=\"line-height: 1.5;\"> (<\/span>sin necesidad de escribir c\u00f3digo <a href=\"https:\/\/developer.mozilla.org\/es\/docs\/Web\/JavaScript\" target=\"_blank\">JavaScript<\/a>!<span style=\"line-height: 1.5;\">).<\/span><\/p>\n<h2>3D en HTML5<\/h2>\n<p>La promesa de 3D en la Web no es algo nuevo. Ya nos la ofrec\u00eda en su momento Adobe con su producto <a href=\"https:\/\/get.adobe.com\/es\/shockwave\/\" target=\"_blank\">Shockwave<\/a>, aunque actualmente su futuro es mas\u00a0negro incluso que el de <a href=\"http:\/\/www.adobe.com\/es\/products\/flashplayer.html\" target=\"_blank\">Flash<\/a>. El hecho de ser un producto cerrado, inestable y con serios problemas de seguridad no le a ayudado mucho.<\/p>\n<p>Con la llegada de <a href=\"http:\/\/www.espai.es\/blog\/2016\/03\/para-que-sirve-la-etiqueta-canvas-en-html5\/\" target=\"_blank\">HTML5 y su elemento Canvas<\/a>, surgio la posibilidad de emplear WebGL para mostrar contendo 3D en la Web <strong>de forma nativa<\/strong>. Sin embargo, programar en WebGL no es precisamente f\u00e1cil. Algo, aparentemente tan sencillo, como mostrar un cubo 3D, requiere ser capaz de programar <a href=\"https:\/\/es.wikipedia.org\/wiki\/Shader\" target=\"_blank\">shaders<\/a>, que son peque\u00f1os programas para la tarjeta gr\u00e1fica donde le indicamos cosas tales como las operaciones de transformaci\u00f3n para los v\u00e9rtices y los p\u00edxeles. Si bien es cierto que estos shaders a\u00f1aden una capa extra de complejidad al desarrollo 3D, tambi\u00e9n es cierto que ofrecen m\u00faltiples posibilidades muy interesantes. Sea como sea, el tema es que programar WebGL no es f\u00e1cil y eso ha desincentivado el desarrollo 3D en la Web.<\/p>\n<p>Obviamente, no tardaron en salir frameworks y librer\u00edas JavaScript que facilitan dicha tarea. La m\u00e1s famosa actualmente probablemente sea <a href=\"http:\/\/threejs.org\/\" target=\"_blank\">three.js<\/a>. Vale la pena pasearse por su web y\u00a0ver en su secci\u00f3n de <strong>\u00abfeatured projects\u00bb<\/strong> la de cosas incre\u00edbles que es posible hacer hoy d\u00eda con est\u00e1 tecnolog\u00eda. Tambi\u00e9n es muy recomendable visitar su <a href=\"http:\/\/threejs.org\/examples\" target=\"_blank\">secci\u00f3n de ejemplos<\/a>, menos espectacular, pero m\u00e1s ilustrativa.<\/p>\n<p>Sin embargo, incluso con estos frameworks, no resulta muy f\u00e1cil introducir elementos 3D en una Web, y mucho menos sin saber programar JavaScript.<\/p>\n<h2>A-Frame y el 3D sin JavaScript<\/h2>\n<p>A-Frame viene para introducir una aproximaci\u00f3n diferente al mundo del 3D en la Web, ya que <strong>se basa en HTML<\/strong>. Los elementos 3D que vamos a introducir, los introduciremos <strong>del mismo modo que cualquier otro elemento HTML<\/strong>.<\/p>\n<div id=\"attachment_5291\" style=\"width: 750px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/aframe.io\/\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5291\" class=\"size-full wp-image-5291\" src=\"http:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe.png\" alt=\"A-Frame Logo\" width=\"740\" height=\"480\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe.png 740w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe-300x195.png 300w\" sizes=\"auto, (max-width: 740px) 100vw, 740px\" \/><\/a><p id=\"caption-attachment-5291\" class=\"wp-caption-text\">A-Frame, un sencillo framework para 3D y Realidad Virtual en la Web<\/p><\/div>\n<p>Veamos un\u00a0sencillo ejemplo;<\/p>\n<div style=\"padding: 10px; border: 1px solid orange;\"><code>&lt;!DOCTYPE html&gt;<\/code><br \/>\n<code>&lt;html&gt;<\/code><br \/>\n<code> &lt;head&gt;<\/code><br \/>\n<code>\u00a0 &lt;meta charset=\"utf-8\"&gt;<\/code><br \/>\n<code>\u00a0 &lt;title&gt;Ejemplo b\u00e1sico A-Frame&lt;\/title&gt;<\/code><br \/>\n<code>\u00a0 &lt;script src=\"https:\/\/aframe.io\/releases\/0.2.0\/aframe.min.js\"&gt;&lt;\/script&gt;<\/code><br \/>\n<code> &lt;\/head&gt;<\/code><br \/>\n<code> &lt;body&gt;<\/code><br \/>\n<code>\u00a0 &lt;a-scene&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;a-box id=\"cubo\" width=\"1\" height=\"1\" depth=\"1\" color=\"red\"&gt;&lt;\/a-box&gt;<\/code><br \/>\n<code>\u00a0 &lt;\/a-scene&gt;<\/code><br \/>\n<code> &lt;\/body&gt;<\/code><br \/>\n<code>&lt;\/html&gt;<\/code><\/div>\n<p>Pod\u00e9is ver\u00a0el resultado del c\u00f3digo <a title=\"Ejemplo b\u00e1sico de A-Frame (Cubo)\" href=\"http:\/\/codepen.io\/anon\/pen\/yJyjQO\" target=\"_blank\">aqu\u00ed<\/a>.<\/p>\n<p>Como pod\u00e9is comprobar es extremadamente f\u00e1cil. Con ese sencillo ejemplo ya tenemos un bonito cubo 3D de color rojo; si mantenemos pulsado el bot\u00f3n del rat\u00f3n, podremos <strong>cambiar la orientaci\u00f3n de la c\u00e1mara<\/strong> y si pulsamos las teclas <strong>WASD<\/strong>, nos podremos <strong>desplazar por el escenario<\/strong> 3D. Finalmente, si pulsamos el bot\u00f3n de abajo a la derecha con el dibujo de unas <a href=\"https:\/\/vr.google.com\/intl\/es_es\/cardboard\/\" target=\"_blank\">Cardboard<\/a>\u00a0y nuestro dispositivo lo soporta (por ejemplo, <strong>un m\u00f3vil Android con el navegador Chrome<\/strong>), podremos iniciar el <strong>modo de Realidad Virtual<\/strong>.<\/p>\n<p>As\u00ed, tal cual. De esa forma tan sencilla y sin c\u00f3digo JavaScript.<\/p>\n<p>Obviamente, adem\u00e1s de las cajas, existen muchos m\u00e1s elementos A-Frame. Tambi\u00e9n podemos crear;<\/p>\n<ul>\n<li>Otras figuras b\u00e1sicas 3D, como esferas, cilindros, planos, etc&#8230;<\/li>\n<li>Cargar imagenes que podremos usar como texturas sobre los objetos 3D.<\/li>\n<li>Cargar modelos 3D m\u00e1s complejos mediante <strong>archivos OBJ<\/strong> y<strong> Collada (DAE).<\/strong><\/li>\n<li>A\u00f1adir diferentes tipos de luces.<\/li>\n<li>Alg\u00fan efecto de ambiente como niebla o una imagen panor\u00e1mica esf\u00e9rica (tambi\u00e9n llamadas <a href=\"https:\/\/en.wikipedia.org\/wiki\/VR_photography\" target=\"_blank\">fotograf\u00edas de Realidad Virtual<\/a>).<\/li>\n<li>Incluso podemos a\u00f1adir efectos de animaci\u00f3n e interacci\u00f3n!<\/li>\n<li>Y muchas m\u00e1s cosas.<\/li>\n<\/ul>\n<p>Veamos otro ejemplo un poco m\u00e1s completo.<\/p>\n<div style=\"padding: 10px; border: 1px solid orange;\"><code>...<\/code><br \/>\n<code>&lt;a-scene fog=\"type: linear; near: 10; far: 15; color: #000022;\"&gt;<\/code><br \/>\n<code>\u00a0 &lt;a-light type=\"point\" color=\"#FFFFAA\" position=\"0 1.8 0\"&gt;&lt;\/a-light&gt;<\/code><br \/>\n<code>\u00a0 &lt;a-sphere id=\"sol\" radius=\"0.5\" color=\"#FFFFAA\" position=\"0 1.8 0\" shader=\"flat\"&gt;&lt;\/a-sphere&gt;<\/code><br \/>\n<code>\u00a0 &lt;a-entity id=\"planeta1\"&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;a-sphere radius=\"0.25\" color=\"#D62D59\" position=\"6 1.8 0\"&gt;&lt;\/a-sphere&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;a-animation attribute=\"rotation\" to=\"0 360 0\" easing=\"linear\" dur=\"3000\" repeat=\"indefinite\"&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;\/a-animation&gt;<\/code><br \/>\n<code>\u00a0 &lt;\/a-entity&gt;<\/code><br \/>\n<code>\u00a0 &lt;a-entity id=\"planeta2\"&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;a-entity&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 \u00a0 &lt;a-sphere radius=\"0.6\" color=\"#AD9397\" position=\"8 1.8 0\"&gt;&lt;\/a-sphere&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 \u00a0 &lt;a-ring radius-inner=\"1\" radius-outer=\"1.5\" color=\"#AD9397\" side=\"double\" rotation=\"30 40 50\" position=\"8 1.8 0\"&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 &lt;a-animation attribute=\"rotation\" from=\"30 40 50\" to=\"30 400 50\" easing=\"linear\" dur=\"4000\" repeat=\"indefinite\"&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 &lt;\/a-animation&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 \u00a0 &lt;\/a-ring&gt; <\/code><br \/>\n<code>\u00a0 \u00a0 &lt;\/a-entity&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;a-animation attribute=\"rotation\" to=\"0 360 0\" easing=\"linear\" dur=\"6000\" repeat=\"indefinite\"&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;\/a-animation&gt;<\/code><br \/>\n<code>\u00a0 &lt;\/a-entity&gt;<\/code><br \/>\n<code>\u00a0 &lt;a-entity id=\"planeta3\"&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;a-sphere radius=\"0.5\" color=\"#1D6B8D\" position=\"10 1.8 0\"&gt;&lt;\/a-sphere&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;a-animation attribute=\"rotation\" to=\"0 360 0\" easing=\"linear\" dur=\"10000\" repeat=\"indefinite\"&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;\/a-animation&gt;<\/code><br \/>\n<code>\u00a0 &lt;\/a-entity&gt; <\/code><br \/>\n<code>\u00a0 &lt;a-entity id=\"planeta4\"&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;a-sphere radius=\"0.8\" color=\"#9D463C\" position=\"12 1.8 0\"&gt;&lt;\/a-sphere&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;a-animation attribute=\"rotation\" to=\"0 360 0\" easing=\"linear\" dur=\"15000\" repeat=\"indefinite\"&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;\/a-animation&gt;<\/code><br \/>\n<code>\u00a0 &lt;\/a-entity&gt; <\/code><br \/>\n<code>\u00a0 &lt;a-sky color=\"black\"&gt;&lt;\/a-sky&gt;<\/code><br \/>\n<code>&lt;\/a-scene&gt;<\/code><br \/>\n<code>...<\/code><\/div>\n<p>Pod\u00e9is ver\u00a0el resultado del c\u00f3digo <a title=\"Planetas A-Frame\" href=\"http:\/\/codepen.io\/anon\/pen\/ezJWZp\" target=\"_blank\">aqu\u00ed<\/a>.<\/p>\n<p>En este otro ejemplo podemos ver como podemos animar diferentes objetos de forma sencilla sin necesidad de c\u00f3digo JavaScript. Debido a su sencillez y la no necesidad de escribir c\u00f3digo, A-Frame se plantea como una interesante herramienta para personas m\u00e1s pr\u00f3ximas al mundo del dise\u00f1o, que se sienten un poco desanimados al ver que para hacer cosas chulas en HTML5, suele ser necesario saber programar.<\/p>\n<p>En la p\u00e1gina de A-Frame podemos ver <a title=\"Ejemplos de A-Frame\" href=\"https:\/\/aframe.io\/examples\/showcase\/helloworld\/\" target=\"_blank\">muchos m\u00e1s ejemplos<\/a> de lo que es capaz, y el c\u00f3digo fuente necesario.<\/p>\n<div id=\"attachment_5385\" style=\"width: 750px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/animeui.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5385\" class=\"size-full wp-image-5385\" src=\"http:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/animeui.jpg\" alt=\"Anime UI, uno de los ejemplos de A-Frame\" width=\"740\" height=\"400\" srcset=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/animeui.jpg 740w, https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/animeui-300x162.jpg 300w\" sizes=\"auto, (max-width: 740px) 100vw, 740px\" \/><\/a><p id=\"caption-attachment-5385\" class=\"wp-caption-text\">Anime UI, uno de los ejemplos de A-Frame (hacer algo as\u00ed con A-Frame es m\u00e1s sencillo de lo que parece)<\/p><\/div>\n<h2>A-Frame y la Realidad Virtual<\/h2>\n<p>Una de las ventajas de A-Frame es que <strong>los diferentes elementos que creamos forman parte del documento<\/strong> y, por lo tanto, son manipulables con JavaScript como cualquier otro elemento HTML. Que sea posible trabajar con A-Frame sin usar JavaScript no quiere decir que debamos de evitar su uso. De hecho,<strong> el potencial de A-Frame con JavaScript es claramente superior<\/strong>. No hay que olvidar que A-Frame soporta un modo de <strong>realidad virtual<\/strong>, y la realidad virtual es m\u00e1s real si viene acompa\u00f1ada de <strong>interacci\u00f3n<\/strong>. Para lograr la interacci\u00f3n del usuario con el entorno A-Frame ofrece la posibilidad de que simplemente mirando a un sitio podemos interactuar con \u00e9l. Si bien existe <strong>la posibilidad de hacerlo sin JavaScript<\/strong>, las posibilidades de interacci\u00f3n son menores ya que el abanico de acciones es m\u00e1s limitado. En el caso de usar JavaScript el limite de dicha interacci\u00f3n tan solo est\u00e1 limitado por nuestra imaginaci\u00f3n (y las limitaciones que implica que el usuario solo puede interactuar moviendo la cabeza).<\/p>\n<p>Veamos un sencillo ejemplo;<\/p>\n<div style=\"padding: 10px; border: 1px solid orange;\"><code>&lt;!DOCTYPE html&gt;<\/code><br \/>\n<code>&lt;html&gt;<\/code><br \/>\n<code>&lt;head&gt;<\/code><br \/>\n<code>\u00a0 &lt;meta charset=\"utf-8\"&gt;<\/code><br \/>\n<code>\u00a0 &lt;title&gt;Ejemplo b\u00e1sico A-Frame&lt;\/title&gt;<\/code><br \/>\n<code>\u00a0 &lt;script src=\"https:\/\/aframe.io\/releases\/0.2.0\/aframe.min.js\"&gt;&lt;\/script&gt;<\/code><br \/>\n<code>&lt;\/head&gt;<\/code><br \/>\n<code>&lt;body&gt;<\/code><br \/>\n<code>\u00a0 &lt;a-scene&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;a-camera position=\"0 0 4\"&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 \u00a0 &lt;a-cursor color=\"blue\"&gt;&lt;\/a-cursor&gt;<\/code><br \/>\n<code>\u00a0 \u00a0 &lt;\/a-camera&gt;<\/code><br \/>\n<code>\u00a0 &lt;\/a-scene&gt;<br \/>\n&lt;script src=\"js\/main.js\"&gt;&lt;\/script&gt;<\/code><br \/>\n<code>&lt;\/body&gt;<\/code><br \/>\n<code>&lt;\/html&gt;<\/code><\/div>\n<p>C\u00f3digo del main.js;<\/p>\n<div style=\"padding: 10px; border: 1px solid orange;\"><code>\"use strict\";<\/code><code>var gScene = document.querySelector(\"a-scene\");<\/code><br \/>\n<code>if (gScene.hasLoaded) {<\/code><br \/>\n<code>\u00a0 init();<\/code><br \/>\n<code>} else {<\/code><br \/>\n<code>\u00a0 gScene.addEventListener(\"loaded\", init);<\/code><br \/>\n<code><code>}<\/code><\/code><code>function init() {<\/code><br \/>\n<code>\u00a0 var cubo = document.createElement(\"a-box\");<\/code><br \/>\n<code>\u00a0 cubo.setAttribute(\"color\", \"red\");<\/code><br \/>\n<code>\u00a0 cubo.setAttribute(\"scale\", \"1 1 1\");<\/code><br \/>\n<code>\u00a0 cubo.addEventListener(\"mouseenter\", enter);<\/code><br \/>\n<code>\u00a0 cubo.addEventListener(\"mouseleave\", leave);<\/code><br \/>\n<code>\u00a0 gScene.appendChild(cubo);<\/code><br \/>\n<code>}<\/code><code>function enter() {<\/code><br \/>\n<code>\u00a0 var cubo = document.querySelector(\"a-box\");<\/code><br \/>\n<code>\u00a0 cubo.setAttribute(\"color\", \"green\");<\/code><br \/>\n<code>\u00a0 var scl = cubo.getAttribute(\"scale\");<\/code><br \/>\n<code>\u00a0 scl.x = scl.y = scl.z = 1.5;<\/code><br \/>\n<code>\u00a0 cubo.setAttribute(\"scale\", scl);<\/code><br \/>\n<code>}<\/code><code>function leave() {<\/code><br \/>\n<code>\u00a0 var cubo = document.querySelector(\"a-box\");<\/code><br \/>\n<code>\u00a0 cubo.setAttribute(\"color\", \"red\");<\/code><br \/>\n<code>\u00a0 var scl = cubo.getAttribute(\"scale\");<\/code><br \/>\n<code>\u00a0 scl.x = scl.y = scl.z = 1;<\/code><br \/>\n<code>\u00a0 cubo.setAttribute(\"scale\", scl);<\/code><br \/>\n<code>}<\/code><\/div>\n<p>Pod\u00e9is ver\u00a0el resultado del c\u00f3digo <a title=\"Ejemplo de A-Frame con JavaScript (Escola Espai)\" href=\"http:\/\/codepen.io\/anon\/pen\/MeKxEv\" target=\"_blank\">aqu\u00ed<\/a>.<\/p>\n<p>En este caso, podemos ver como se pueden crear objetos 3D de A-Frame mediante JavaScript,\u00a0y como definir el comportamiento de los objetos cuando el usuario interacciona con ellos con la mirada. En el caso de no usar unas gafas de realidad virtual, la interacci\u00f3n se puede lograr mediante el mouse.<\/p>\n<p>As\u00ed que nada, espero que este art\u00edculo os haya sido de inter\u00e9s. Ya no ten\u00e9is excusa para hacer vuestros primeros pinitos en el mundo 3D y la Realidad Virtual dentro de vuestras Webs. Saludos desde Espai. \ud83d\ude09<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hola a todos y saludos desde el \u00e1rea Web de la Escola Espai.\u00a0Normalmente el mundo de las 3 dimensiones en la web ha estado restringido a programadores con avanzados conocimientos de matem\u00e1ticas y que dominaban tecnolog\u00edas como WebGL.\u00a0Hoy haremos una breve introducci\u00f3n a A-Frame. Exploraremos&#8230;<\/p>\n","protected":false},"author":23,"featured_media":5292,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_ef_editorial_meta_date_first-draft-date":"","_ef_editorial_meta_paragraph_assignment":"","_ef_editorial_meta_checkbox_needs-photo":"","_ef_editorial_meta_number_word-count":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[6,7,5,1],"tags":[],"class_list":["post-5282","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-animacion-3d","category-diseno-web","category-programacion","category-sin-categoria"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>A-Frame, 3D y Realidad Virtual en la Web - Blog Escola Espai<\/title>\n<meta name=\"description\" content=\"Descubre como el nuevo framework\u00a0A-Frame\u00a0basado en HTML5 permite introducir elementos 3D y\u00a0de Realidad Virtual en nuestras paginas web de forma sencilla.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A-Frame, 3D y Realidad Virtual en la Web - Blog Escola Espai\" \/>\n<meta property=\"og:description\" content=\"Descubre como el nuevo framework\u00a0A-Frame\u00a0basado en HTML5 permite introducir elementos 3D y\u00a0de Realidad Virtual en nuestras paginas web de forma sencilla.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Escola Espai\" \/>\n<meta property=\"article:published_time\" content=\"2016-06-28T12:12:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe-featured.png\" \/>\n\t<meta property=\"og:image:width\" content=\"360\" \/>\n\t<meta property=\"og:image:height\" content=\"234\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Abel Camarena\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Abel Camarena\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/\"},\"author\":{\"name\":\"Abel Camarena\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\"},\"headline\":\"A-Frame, 3D y Realidad Virtual en la Web\",\"datePublished\":\"2016-06-28T12:12:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/\"},\"wordCount\":1076,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe-featured.png\",\"articleSection\":[\"Animaci\u00f3n 3D\",\"Dise\u00f1o Web\",\"Programaci\u00f3n\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/\",\"url\":\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/\",\"name\":\"A-Frame, 3D y Realidad Virtual en la Web - Blog Escola Espai\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe-featured.png\",\"datePublished\":\"2016-06-28T12:12:06+00:00\",\"author\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\"},\"description\":\"Descubre como el nuevo framework\u00a0A-Frame\u00a0basado en HTML5 permite introducir elementos 3D y\u00a0de Realidad Virtual en nuestras paginas web de forma sencilla.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#primaryimage\",\"url\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe-featured.png\",\"contentUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe-featured.png\",\"width\":360,\"height\":234,\"caption\":\"A-Frame, un sencillo framework para 3D y Realidad Virtual en la Web\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.espai.es\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A-Frame, 3D y Realidad Virtual en la Web\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.espai.es\/blog\/#website\",\"url\":\"https:\/\/www.espai.es\/blog\/\",\"name\":\"Blog Escola Espai\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.espai.es\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\",\"name\":\"Abel Camarena\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g\",\"caption\":\"Abel Camarena\"},\"sameAs\":[\"http:\/\/www.espai.es\"],\"url\":\"https:\/\/www.espai.es\/blog\/author\/abel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A-Frame, 3D y Realidad Virtual en la Web - Blog Escola Espai","description":"Descubre como el nuevo framework\u00a0A-Frame\u00a0basado en HTML5 permite introducir elementos 3D y\u00a0de Realidad Virtual en nuestras paginas web de forma sencilla.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/","og_locale":"es_ES","og_type":"article","og_title":"A-Frame, 3D y Realidad Virtual en la Web - Blog Escola Espai","og_description":"Descubre como el nuevo framework\u00a0A-Frame\u00a0basado en HTML5 permite introducir elementos 3D y\u00a0de Realidad Virtual en nuestras paginas web de forma sencilla.","og_url":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/","og_site_name":"Blog Escola Espai","article_published_time":"2016-06-28T12:12:06+00:00","og_image":[{"width":360,"height":234,"url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe-featured.png","type":"image\/png"}],"author":"Abel Camarena","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Abel Camarena","Tiempo de lectura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#article","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/"},"author":{"name":"Abel Camarena","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897"},"headline":"A-Frame, 3D y Realidad Virtual en la Web","datePublished":"2016-06-28T12:12:06+00:00","mainEntityOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/"},"wordCount":1076,"commentCount":0,"image":{"@id":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe-featured.png","articleSection":["Animaci\u00f3n 3D","Dise\u00f1o Web","Programaci\u00f3n"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/","url":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/","name":"A-Frame, 3D y Realidad Virtual en la Web - Blog Escola Espai","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#primaryimage"},"image":{"@id":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe-featured.png","datePublished":"2016-06-28T12:12:06+00:00","author":{"@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897"},"description":"Descubre como el nuevo framework\u00a0A-Frame\u00a0basado en HTML5 permite introducir elementos 3D y\u00a0de Realidad Virtual en nuestras paginas web de forma sencilla.","breadcrumb":{"@id":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#primaryimage","url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe-featured.png","contentUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe-featured.png","width":360,"height":234,"caption":"A-Frame, un sencillo framework para 3D y Realidad Virtual en la Web"},{"@type":"BreadcrumbList","@id":"https:\/\/www.espai.es\/blog\/2016\/06\/a-frame-3d-y-realidad-virtual-en-la-web\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.espai.es\/blog\/"},{"@type":"ListItem","position":2,"name":"A-Frame, 3D y Realidad Virtual en la Web"}]},{"@type":"WebSite","@id":"https:\/\/www.espai.es\/blog\/#website","url":"https:\/\/www.espai.es\/blog\/","name":"Blog Escola Espai","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.espai.es\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897","name":"Abel Camarena","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g","caption":"Abel Camarena"},"sameAs":["http:\/\/www.espai.es"],"url":"https:\/\/www.espai.es\/blog\/author\/abel\/"}]}},"jetpack_featured_media_url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2016\/05\/aframe-featured.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/5282","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/comments?post=5282"}],"version-history":[{"count":23,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/5282\/revisions"}],"predecessor-version":[{"id":5491,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/5282\/revisions\/5491"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media\/5292"}],"wp:attachment":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media?parent=5282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/categories?post=5282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/tags?post=5282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}