<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Virtual Reality - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Virtual Reality - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 16:31:11 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/virtual-reality/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ What is a Virtual Machine And How to Setup a VM on Windows, Linux, and Mac ]]>
                </title>
                <description>
                    <![CDATA[ A virtual machine is a program you run on a computer that acts like it is a separate computer. It is basically a way to create a computer within a computer.  A virtual machine runs in a window on the host computer and gives a user the same experience... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-a-virtual-machine-and-how-to-setup-a-vm-on-windows-linux-and-mac/</link>
                <guid isPermaLink="false">66b2071b08bc664c3c097f1a</guid>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                    <category>
                        <![CDATA[ VirtualBox  ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Beau Carnes ]]>
                </dc:creator>
                <pubDate>Thu, 19 Dec 2019 21:19:00 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9e98740569d1a4ca3df6.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>A virtual machine is a program you run on a computer that acts like it is a separate computer. It is basically a way to create a computer within a computer. </p>
<p>A virtual machine runs in a window on the host computer and gives a user the same experience they would have if they were using a completely different computer. Virtual machines are sandboxed from the host computer. This means that nothing that runs on the virtual machine can impact the host computer.</p>
<p>Virtual machines are often used for running software on operating systems that software wasn't originally intended for. For instance, if you are using a Mac computer you can run Windows programs inside a Windows virtual machine on the Mac computer. Virtual machines are also used to quickly set up software with an image, access virus-infected data, and test other operating systems.</p>
<p>A single physical computer can run multiple virtual machines at the same time. Often a server will use a program called a hypervisor to manage multiple virtual machines that are running at the same time. Virtual machines have virtual hardware, including CPUs, memory, hard drives, and more. Each piece of virtual hardware is mapped to real hardware on the host computer.</p>
<p>There are a few drawbacks with virtual machines. Since hardware resources are indirect, they are not as efficient as a physical computer. Also, when many virtual machines are running at the same time on a single computer, performance can become unstable.</p>
<h2 id="heading-virtual-machine-programs">Virtual Machine Programs</h2>
<p>There are many different virtual machine programs you can use. Some options are VirtualBox (Windows, Linux, Mac OS X), VMware Player (Windows, Linux), VMware Fusion (Mac OS X) and Parallels Desktop (Mac OS X).</p>
<p>VirtualBox is one of the most popular virtual machine programs since it is free, open source, and available on all the popular operating systems. We'll show you how to set up a virtual machine using VirtualBox.</p>
<h2 id="heading-setting-up-a-virtual-machine-virtualbox">Setting up a Virtual Machine (VirtualBox)</h2>
<p><img src="https://upload.wikimedia.org/wikipedia/commons/d/d5/Virtualbox_logo.png" alt="Image" width="512" height="512" loading="lazy"></p>
<p>VirtualBox is an open source Virtual Machine program from Oracle. It allows users to virtually install many operating systems on virtual drives, including Windows, BSD, Linux, Solaris, and more.</p>
<p>Since VirtualBox runs on Windows, Linux, and Mac, the process for setting up a virtual machine is pretty much the same in each operating system.</p>
<p>Start with downloading and installing VirtualBox. You can download it at this link: <a target="_blank" href="https://www.virtualbox.org/wiki/Downloads">VirtualBox Downloads</a></p>
<p>You will also need to download an .iso file for the operating system that you want to run in your virtual machine. For instance, you can download a Windows 10 .iso file here: <a target="_blank" href="https://www.microsoft.com/en-us/software-download/windows10ISO">https://www.microsoft.com/en-us/software-download/windows10ISO</a></p>
<p>Once you have VirtualBox running, click the "New" button</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/image-68.png" alt="Image" width="600" height="400" loading="lazy">
<em>Create a new virtual machine.</em></p>
<p>Next you will have to choose which OS you plan on installing. In the "Name" box, type the name of the OS you want to install. VirtualBox will guess the type and version based on the name you type in, but you can change these settings if you need to.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/image-69.png" alt="Image" width="600" height="400" loading="lazy">
<em>Configure the virtual machine.</em></p>
<p>The wizard will automatically select default settings based on the OS type and version you selected. You can always change the settings as you go through the wizard. Just keep clicking "Continue" and "Create" until you get through the wizard. It's usually fine to use the defaults.</p>
<p>Next, start the virtual machine you just created by clicking "Start".</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/image-71.png" alt="Image" width="600" height="400" loading="lazy">
<em>Start the virtual machine.</em></p>
<p>Once the virtual machine starts up, select the .iso image file you want to use.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/image-72.png" alt="Image" width="600" height="400" loading="lazy">
<em>Install the operating system on the virtual machine.</em></p>
<p>Your virtual machine will now load your selected operating system. The operating system may require some setup, but it will be the same setup that would be required if you had installed it on a standard computer. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/image-73.png" alt="Image" width="600" height="400" loading="lazy">
<em>Windows 10 is successfully running inside a virtual machine.</em></p>
<p>Congratulations! You’ve run your first Virtual Machine in VirtualBox.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Why you should do Augmented Reality if you are a JavaScript developer — and how to start ]]>
                </title>
                <description>
                    <![CDATA[ By Evaristo Caraballo If you are a JavaScript coder who is still late to making up a definitive list of resolutions for 2019, let me give you a hand: Start figuring out how to get into Augmented Reality (AR). The Augmented/Mixed/Virtual Reality (AR/M... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/an-intro-to-augmented-reality-for-the-javascript-developer-with-an-example-71875ab184ee/</link>
                <guid isPermaLink="false">66c343f242d4db64acf4cbc8</guid>
                
                    <category>
                        <![CDATA[ Augmented Reality ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tools ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Fri, 11 Jan 2019 16:43:29 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*hIfbsKuXmHPb0qEKvotZ4A.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Evaristo Caraballo</p>
<p>If you are a JavaScript coder who is still late to making up a definitive list of resolutions for 2019, let me give you a hand: Start figuring out how to get into Augmented Reality (AR).</p>
<p>The Augmented/Mixed/Virtual Reality (AR/MR/VR) combo has enjoyed frenetic growth since 2016, coming from a <a target="_blank" href="https://www.statista.com/statistics/591181/global-augmented-virtual-reality-market-size/">marginal market value</a> of bit more than $6 Billion to one that might reach the $210 Billion in sales (including hardware) by 2022. Of all, <a target="_blank" href="https://www.telecompetitor.com/ar-vr-forecast-bad-quarter-good-future/">Augmented Reality</a> is the one experiencing steady growth.</p>
<p>At first, a JavaScript (web) developer wanting to get into the AR boat might feel discouraged when finding <a target="_blank" href="https://blog.pusher.com/how-you-can-become-an-ar-vr-developer/">the usual required skills</a>; and then there is who ask <a target="_blank" href="https://medium.freecodecamp.org/8-ways-ai-makes-virtual-augmented-reality-even-more-real-25037707cfa1">Machine Learning</a> or Internet of Things. However if you are mainly a JavaScript developer, consider yourself blessed: the language is <a target="_blank" href="https://www.quora.com/What-programming-language-is-used-to-create-virtual-reality-experiences-and-programs">recurrently mentioned</a> as one you should know to enter this sector. The reason? Right now <strong>a lot of AR development goes on the web</strong>. And this is where JavaScript reigns.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*m3EEXIiH_ZXxVzl-7-grLg.png" alt="Image" width="800" height="567" loading="lazy">
_Mobile and Web were the last getting AR capabilities, and are still developing (extract from a [buildAR presentation](https://www.slideshare.net/robman/web-standards-adoption-in-the-ar-market/6" rel="noopener" target="<em>blank" title="))</em></p>
<h3 id="heading-augmented-jobs-for-the-javascript-fan-really">Augmented Jobs for the JavaScript-fan — Really?</h3>
<p>Maybe not too fast. There are many examples where AR/MR/VR shines on its own, specially in niche markets, but the industry hasn’t completely figured out the full value of the technology for the general consumer. Once that it solved, the industry would be certainly making more AR/MR/VR products, which would translate into more jobs.</p>
<p>For some analysts AR is expected to have the most pervasive impact, in part because it doesn't require <a target="_blank" href="https://www.quora.com/What-are-some-good-VR-AR-hardware-devices-that-not-many-people-know">specific devices and conditions</a> to be implemented as VR does.</p>
<blockquote>
<p>AR has utility for almost everything, overlaying useful and relevant information on the world around you. AR can be pervasive in a way that VR cannot.</p>
<ul>
<li>David McQueen -Strategy Analytics- <a target="_blank" href="https://www.twice.com/product/ces-2018-how-disruptive-can-vr-ar-become-roundtable-discussion">from an interview on Twice</a></li>
</ul>
</blockquote>
<p>It rests on the industry to find how to make AR a more every day life tech. According to some companies, particularly within the mobile phone realm, exploiting better the AR potential reduces to a well-known rule: <em>SIMPLICITY</em>.</p>
<blockquote>
<p>While Unity has become the default path for building AR apps, an increasing number need only a sprinkling of AR.</p>
<ul>
<li>from an <a target="_blank" href="https://medium.com/homestory-ar/building-an-ar-ai-furniture-app-with-react-native-1847bc1fcbaa">article</a> by <a target="_blank" href="https://www.freecodecamp.org/news/an-intro-to-augmented-reality-for-the-javascript-developer-with-an-example-71875ab184ee/undefined">Benjamin Devine</a>, Homestory AR</li>
</ul>
</blockquote>
<p>In many cases, resourcing onto the leading AR tools could be an overkill. Instead, a bunch of good UX-driven features over some 2D/3D assets could be more than enough to make striking products. Something a JavaScript developer regularly does.</p>
<p>It is then possible that any JavaScript developer will be embedding (non)standard AR/VR features as an extension of their traditional duties in the future. And if required, JavaScript is robust enough for more complex tasks. The sky is the limit.</p>
<h3 id="heading-becoming-javascript-augmented">Becoming JavaScript-Augmented</h3>
<p>Before starting, I would suggest to have a look at the several AR platforms and standards. The same technical constraints affecting the industry are also reflected in the AR world.</p>
<p>For example, there are several platforms, one for each Big Tech (Google = <a target="_blank" href="https://developers.google.com/ar/discover/">ARCode</a>, Apple = <a target="_blank" href="https://developer.apple.com/arkit/">ARKit</a>, MS = <a target="_blank" href="https://github.com/microsoft/chakracore">ChakraCore</a>, Facebook = <a target="_blank" href="https://developers.facebook.com/blog/post/2018/05/01/ar-studio-create-distribute/">AR Studio</a>, <a target="_blank" href="https://facebook.github.io/react-360/">React 360</a>, Mozilla = <a target="_blank" href="https://aframe.io/">aframe</a>).</p>
<p>After having a quick look at the options, starting fully JavaScript’ed Augmented Reality projects is relatively easy. You can begin by taking any web/app dev framework like <a target="_blank" href="https://cordova.apache.org/">Cordova</a>, <a target="_blank" href="https://ionicframework.com/">Ionic</a>, <a target="_blank" href="https://facebook.github.io/react-native/">React Native</a> or <a target="_blank" href="https://vue-native.io/">Vue Native</a> to embed the AR framework of your choice — and deploy 3D assets on top of the real world.</p>
<p>If what you want is to deploy on the web using mostly marker-based AR, you could use GitHub repos like <a target="_blank" href="https://github.com/jeromeetienne/AR.js">AR.js</a> (free), <a target="_blank" href="https://www.argonjs.io/">argon.js</a> (free but limited) or <a target="_blank" href="https://awe.media/">awe.js</a> (paid PaaS but with an old GitHub repository still available). There are a few tailored ones that are harder for the novice, many of them focused on things like facial/head recognition (such as <a target="_blank" href="https://trackingjs.com/">tracking.js</a> and <a target="_blank" href="https://github.com/auduno/headtrackr">headtrackr</a>).</p>
<p>Or you can boost your project capabilities if you are able to port available SDKs made by <a target="_blank" href="http://socialcompare.com/en/comparison/augmented-reality-sdks">AR-related companies</a>. There are many APIs that render as AR on browser too. For example, <a target="_blank" href="https://www.mapbox.com/">Mapbox</a> follows that path and it is developed on JavaScript.</p>
<p>I would suggest you to keep it simple but interactive.</p>
<p>However if your ambitions point to also mastering design and animation in JavaScript, you definitively have to learn at least one <a target="_blank" href="https://1stwebdesigner.com/3d-javascript-libraries/">3D Javascript package</a>, and <a target="_blank" href="https://threejs.org/">THREE.js</a> the most popular. Wait, though, until you have gained a good base of JavaScript and <a target="_blank" href="https://www.opengl.org/">OpenGl</a> as well as geometry, trigonometry, linear algebra or physics. And don’t expect more help from the existing 3D JS GUIs; in particular, THREE.js has none. Challenging but exciting!</p>
<h3 id="heading-bonus-example">Bonus Example</h3>
<p>I wanted to prepare a quick demo just to explore the technology, so I took a nice CodePen and modified it to fit a marker-based web-rendered AR animation ported within a clone of <a target="_blank" href="https://github.com/stemkoski/AR-Examples">Stemkoski's</a> <a target="_blank" href="https://stemkoski.github.io/AR-Examples/">great work</a> with AR.js.</p>
<p>For you to see the example you need <em>a mobile device with a camera</em> and internet (phone or tablet), and either a printed copy of <em>the marker</em> or another device to show it on screen.</p>
<p>Ready? Now open this <a target="_blank" href="https://evaristoc.github.io/ARexample/">link</a> using a browser in your mobile device:</p>
<p><a target="_blank" href="https://evaristoc.github.io/ARexample/">https://evaristoc.github.io/ARexample/</a></p>
<p>Give authorization to use your camera, and point the camera <strong>to a marker like below</strong>, either printed or in another screen.</p>
<p><strong>NOTE:</strong> works on Android and Chrome — it might not work for other devices and browsers ?.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*7g9MciK6LR-9VRcH-LePSQ.png" alt="Image" width="512" height="512" loading="lazy">
_The original animation can be found [here](https://codepen.io/rainner/details/LREdXd" rel="noopener" target="<em>blank" title=").</em></p>
<p>Happy New Year!</p>
<p>I hope you will find this technology as fascinating as I do. If so, don't stay alone: contact us at the <a target="_blank" href="https://www.freecodecamp.org/forum/">freeCodeCamp forum</a> and share your questions and ideas.</p>
<p>And if you liked this article, don't forget to give it a ? and to share it on social media.</p>
<p>Thanks for reading, enjoy AR and Happy Coding!!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to use Augmented Reality with JavaScript — a case study ]]>
                </title>
                <description>
                    <![CDATA[ By Apurav Chauhan In this experiment, I talk about how Augmented Reality with JS can be used to make learning more fun and interactive. The case study will discuss the design process, implementation and feedback from children in the age group 2 to 10... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/augmented-reality-with-javascript-a-case-study-c9cffaadcf07/</link>
                <guid isPermaLink="false">66c34510790a62b5fbf7b888</guid>
                
                    <category>
                        <![CDATA[ AR ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Augmented Reality ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Fri, 21 Dec 2018 13:28:42 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*evN61t_cenPxPZgDZOB2Mw.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Apurav Chauhan</p>
<p>In this experiment, I talk about how Augmented Reality with JS can be used to make learning more fun and interactive. The case study will discuss the design process, implementation and feedback from children in the age group 2 to 10 years.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*evN61t_cenPxPZgDZOB2Mw.png" alt="Image" width="800" height="276" loading="lazy">
<em>Education and Interactive Alphabets learning using Augmented Reality and Javascript</em></p>
<p>Augmented Reality (AR) has always attracted me, and in this experiment, I try to create a practical AR application. The use-case we will cover is primary education and we will see how we can make the learning fun and interactive. We will make an app to learn alphabets in three languages primarily: Punjabi, Hindi, and English.</p>
<p><em>The Javascript Augmented Reality app currently doesn’t have plane detection. For simplicity’s sake we are only superimposing our objects over the viewport with 3d motion tracking.</em></p>
<h4 id="heading-end-goal">END GOAL</h4>
<p>Below is a demo of our Javascript AR experiment. You can download and play with the app <a target="_blank" href="https://play.google.com/store/apps/details?id=com.webilm.games.arlearning&amp;hl=en">here</a>.</p>
<p>The full code has been open-sourced for learning purposes and is available <a target="_blank" href="https://github.com/apuravchauhan/augmented-reality-javascript">here</a>.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*nfxElKKhaa0zlcdODDdtPg.jpeg" alt="Image" width="800" height="1600" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*O6FCNchAd2dNaJwK32GL-A.jpeg" alt="Image" width="800" height="1600" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*UKBmHOO3uW7NIKuoHYDNXA.jpeg" alt="Image" width="800" height="1600" loading="lazy">
<em>Alphabets in augmented reality and javascript to make education more fun and engaging</em></p>
<h3 id="heading-the-design-process">The Design Process</h3>
<p>To make the learning fun and effortless, I am relying on the following points:</p>
<ol>
<li>Active participation of the child</li>
<li>Child’s physical activity instead of sitting in one place</li>
<li>A bit of effort in finding the alphabets.</li>
<li>Intuitive UX/UI.</li>
</ol>
<p>The core theme of the app will be quite similar to the famous Pokemon Go Augmented reality app. Only two main components will be involved: the <strong>Camera Viewport</strong> and <strong>Alphabets</strong>.</p>
<h4 id="heading-alphabet-ux-for-ar-game">Alphabet UX for AR Game</h4>
<p><em>Iteration 1</em></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*_711pNZKifCSaa9bXWbc5g.png" alt="Image" width="640" height="640" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*YdiDXaHGXYKPMD1gdGbZaw.png" alt="Image" width="640" height="640" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*EmkTDWxyVZYcqA9vn2Ixtg.png" alt="Image" width="640" height="640" loading="lazy">
<em>2d Alphabets in English, Hindi and Punjabi for our JS Augmented Reality Game</em></p>
<p>In our first iteration we have 2d alphabets which we will try to merge in our camera viewport. The idea of the Augmented Reality(AR) app is to have children find these alphabet letters in a room or space around them. The prototype after merging the space with 2d alphabets will look something like this:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*gu70VjYLyFLzzmMvhafZyA.gif" alt="Image" width="984" height="1132" loading="lazy">
<em>AR Motion sensor with 2d object</em></p>
<p>As you can see above, the immersive experience is missing with a 2d model because the human eye sees things in 3d.</p>
<p><em>Iteration 2</em></p>
<p>Lets try to create a 3d model and see if we can improve the experience of our Javascript-based Augmented Reality game:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*lHUszUcxZfFJj0f81Ebixg.gif" alt="Image" width="640" height="553" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*cyXqdHs11SmHwICi-P461g.gif" alt="Image" width="640" height="495" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*GK2PuNQlEEJU8FY9edCR8A.gif" alt="Image" width="640" height="512" loading="lazy">
<em>3D Alphabets in English, Hindi and Punjabi for our AR project</em></p>
<p>And below is the comparison of the experience of a motion sensor with 2d vs 3d alphabet models. As you can see, 3D naturally gives you a much more immersive experience when it comes to Augmented reality.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*gu70VjYLyFLzzmMvhafZyA.gif" alt="Image" width="984" height="1132" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*IPTMBO-kP6EcqhL0tDD_8A.gif" alt="Image" width="1020" height="1092" loading="lazy">
<em>2d vs 3d AR motion experience</em></p>
<h3 id="heading-the-ar-implementation-process">The AR Implementation process</h3>
<p>To implement the above AR concept, I’ll be using the following tools and technologies:</p>
<ol>
<li><a target="_blank" href="https://ionicframework.com">Ionic Framework</a>: For building the hybrid app</li>
<li><a target="_blank" href="https://aframe.io/">Aframe</a>: For bringing the Virtual reality (VR) and Augmented Reality (AR) experience to our app</li>
<li><a target="_blank" href="https://ephtracy.github.io/">MagicaVoxel</a>: For creating our 3D models</li>
</ol>
<p>The basic app building process is very simple. You can follow my earlier post to learn how to go about building and deploying an app using the Ionic framework <a target="_blank" href="https://codeburst.io/part-1-simple-ionic-tutorial-from-scratch-from-0-to-live-app-9a79db510a90">here</a>.</p>
<p>Once you have followed the above tutorial to create a simple app, it’s time to integrate Aframe to bring our 3D alphabets with motion sensors into our app.</p>
<p>Just load the below Aframe core and Aframe loader libraries in ionic’s project index.html file:</p>
<pre><code>&lt;script src=<span class="hljs-string">"https://aframe.io/releases/0.8.2/aframe.min.js"</span>&gt;&lt;/script&gt;
</code></pre><pre><code>&lt;script src=<span class="hljs-string">"https://rawgit.com/donmccurdy/aframe-extras/v2.1.1/dist/aframe-extras.loaders.min.js"</span>&gt;&lt;/script&gt;
</code></pre><p>With this we are ready to do some AR/VR magic in our Javascript code base.</p>
<p>Now in your home component’s home.html, let’s include our 3D models exported from magicavoxel:</p>
<p>And this should make a 3D scene ready for interaction with all motion sensors ready:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*fref3HwlAuN0AJ9VHRaWhQ.gif" alt="Image" width="2708" height="1092" loading="lazy">
<em>Final 3D Virtual Reality scene ready with 3D alphabets</em></p>
<h4 id="heading-adding-augmented-reality-effect">Adding Augmented Reality Effect</h4>
<p>The final part of this experiment is to add the Augmented Reality (AR) feeling in our Javascript-based hybrid app. As already explained, Augmented Reality is when you superimpose 3D models or other objects on top of your camera viewport. So the only thing missing is the camera viewport behind our scene.</p>
<p>To do this, we use the camera preview plugin as explained <a target="_blank" href="https://ionicframework.com/docs/native/camera-preview/">here</a>. And here is the full gist after integration with the camera preview plugin:</p>
<p>We also need to ensure that our backgrounds are transparent so that the camera preview is visible in mobile. This is very <strong>IMPORTANT</strong> otherwise you might feel that the plugin is not working. Here is the home.scss file with transparency css enabled:</p>
<p><strong>And this is what it would finally look like:</strong></p>
<h4 id="heading-user-reaction-to-our-augmented-reality-js-game">User reaction to our Augmented reality JS game</h4>
<p>The final step to measure the success of your concept is real user validation — in our case, kids :) And below is their live feedback recorded.</p>
<p>It was pretty clear that each one of them enjoyed the game and we got full points on fun part. However, initially I had to tell them to move the phone in space to find the letters. Points lost in terms of intuitiveness :(</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Fe97s79RI5BFONl9X5T27w.png" alt="Image" width="800" height="247" loading="lazy">
<em>Points scored out of 10</em></p>
<h4 id="heading-user-feedback-for-augmented-reality-js-game">User feedback for Augmented Reality JS game</h4>
<h3 id="heading-final-thoughts">Final Thoughts</h3>
<p>Well it was an exciting project and I could see a lot of potential for Augmented Reality in learning and education. Children really like it and it surely adds the missing fun factor to education, especially in our monotonous Education system.</p>
<p>Feel free to comment and share your feedback.</p>
<h3 id="heading-downloads">Downloads</h3>
<p>The code for this app is available in <a target="_blank" href="https://github.com/apuravchauhan/augmented-reality-javascript">github</a>. Feel free to play and push new features in it. I’ll be happy to push updates over production.</p>
<p>You can download the app for android <a target="_blank" href="https://play.google.com/store/apps/details?id=com.webilm.games.arlearning&amp;hl=en">here</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Build a Multiplayer Browser-based VR Game with A-Frame, PubNub, and WebVR ]]>
                </title>
                <description>
                    <![CDATA[ By Namratha Subramanya Advancements in technology have made Virtual Reality (VR) more immersive and affordable than ever. This immersive environment can be similar to the real world. Or it can be fantastical, creating an experience that is not possib... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/build-a-multiplayer-browser-based-vr-game-with-a-frame-pubnub-and-webvr-b7de33ba088/</link>
                <guid isPermaLink="false">66c346608ced2460cf9e9b65</guid>
                
                    <category>
                        <![CDATA[ coding ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                    <category>
                        <![CDATA[ vr ]]>
                    </category>
                
                    <category>
                        <![CDATA[ webvr ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 27 Aug 2018 20:50:01 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*Iu7_DRv1Pr_9dHfkr22ZVw.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Namratha Subramanya</p>
<p>Advancements in technology have made Virtual Reality (VR) more immersive and affordable than ever. This immersive environment can be similar to the real world. Or it can be fantastical, creating an experience that is not possible in ordinary reality.</p>
<p>Better yet, high-quality VR devices are available at low prices these days. With a number of smartphone-compatible VR headsets such as Google Cardboard, Samsung Gear VR, Oculus Rift and HTC Vive, VR is showing to be the next big thing.</p>
<p>In this tutorial, we’ll take advantage of that and build a real-time, multiplayer VR game using A-Frame, PubNub, Glitch, and WebVR.</p>
<p>The <a target="_blank" href="https://github.com/namrathasubramanya/VR-Bowling-game">full GitHub code repository can be found here</a>.</p>
<h3 id="heading-webvr">WebVR</h3>
<p><a target="_blank" href="https://webvr.info/">WebVR</a> is an open specification that makes it possible to experience VR in your browser. It is a JavaScript browser API that acts as an interface for the VR hardware. WebVR is cross-platform and can be used to develop, view and share VR content on any browser that supports VR. With WebVR, you can open up a browser and get into VR just by clicking a link. Working with WebVR directly requires knowledge of JavaScript and WebGL.</p>
<h3 id="heading-a-frame">A-Frame</h3>
<p><a target="_blank" href="https://aframe.io/">A-Frame</a> is a virtual reality framework that is built upon the WebVR API. It uses the WebVR API to gain access to VR headset sensor data (position, orientation) to transform the camera and to render content directly to VR headsets. A-Frame is an open community project that uses the WebVR API along with HTML, CSS, JavaScript, and Three.js. A-Frame aims for highly immersive and interactive VR content with native-like performance. At the same time, A-Frame wants everyone to be able to get involved with VR content creation. A-Frame supports all major headsets with their controllers.</p>
<h3 id="heading-glitch">Glitch</h3>
<p><a target="_blank" href="https://glitch.com/~aframe">Glitch</a> provides an online code editor with instant deployment and hosting of websites. The editor supports both front-end and back-end code as well as multiple files and directories. Glitch lets you remix (i.e., copy) existing projects and make them our own and instantly host and deploy changes for everyone to see. Firefox Nightly allows you to debug the VR content using debug console.</p>
<h3 id="heading-gaming-environment">Gaming Environment</h3>
<h4 id="heading-a-frame-physics-system">A-Frame Physics System</h4>
<p><code>aframe-physics-system</code> is middleware that initializes the physics engine and exposes A-Frame components for us to apply to entities. When we use its <code>static-body</code> or <code>dynamic-body</code> components, <code>aframe-physics-system</code> creates a <code>Cannon.Body</code> instance and attaches it to our A-Frame entities, so on every frame, it adjusts the entity’s position, rotation, etc. to match the body.</p>
<h4 id="heading-ball">Ball</h4>
<p><code>&lt;a-sphe</code>re&gt; primitive creates a spherical shape. You can define its radius color and position. Becau<code>se of aframe-physics-</code>system, the ball can be converted into a dynamic-body with a certain mass.</p>
<h4 id="heading-bowling-lane">Bowling Lane</h4>
<p><code>&lt;a-b</code>ox&gt; creates shapes such as boxes, cubes, or walls. You can create a rectangle box and make a bowling lane out of it by placing pins and ball on top of it.</p>
<h4 id="heading-pins">Pins</h4>
<p><code>&lt;a-cylind</code>er&gt; primitive is used to create tubes and curved surfaces. These cylinders can be used as bowling pins in the game. Be sure to define the radius, height, position, and mass of the cylinder.</p>
<h4 id="heading-tracks">Tracks</h4>
<p>The ball cannot roll in the same direction every time you throw it. You can define any number of tracks for the ball to roll, and this track can, in turn, define the direction. This game has 5 tracks, and the movement of the ball on these tracks is controlled by 5 triangles or, let’s say, pointers on the bowling lane.</p>
<h4 id="heading-surroundings">Surroundings</h4>
<p>A scene is represented by the <code>&lt;a-sce</code>ne&gt; element. The scene is the global root object, and all entities are contained within the scene. The objects’ friction, restitution, and iterations are set to values of 0.001, 0.3 and 30 respectively.</p>
<p>A-Frame has an asset management system that allows us to place our assets in one place and to preload and cache assets for better performance. We place such assets within <code>&lt;a-asse</code>ts&gt;.</p>
<p>The scale component defines a shrinking, stretching, or skewing transformation of an entity. You can use the scale component to transform a box into a wall behind the bowling lane.</p>
<p>On similar lines, a box can be converted into a button attached to the wall by using the scale component. <code>&lt;a-te</code>xt&gt; can add text into your virtual environment.</p>
<p><code>&lt;a-b</code>ox&gt; can also be used to build borders next to the bowling lane.</p>
<h3 id="heading-the-game">The Game</h3>
<h4 id="heading-rolling-the-ball">Rolling the Ball</h4>
<p>As discussed earlier, the ball can roll over 5 imaginary tracks on the bowling lane. This can be achieved using <code>&lt;a-animati</code>on&gt;. Animations can be attached in A-Frame th<code>rough &lt;a-a</code>nimation&gt; element by making it as a child of the entity to animate.</p>
<p>Now you can bind these animations of the ball with the 5 pointers so that the animation begins every time one of the triangles is clicked. This can be achieved by writing a component. We can register the component in JavaScript and use it declaratively from the DOM. Components are configurable, reusable, and shareable.</p>
<h4 id="heading-falling-of-pins">Falling of Pins</h4>
<p>When a dynamic-body of mass 17.5 rolls towards 10 dynamic bodies of mass 1.25, some of them tend to fall. After every knockdown, one can count the number of pins that are down. We can check the position of the pins at the end of the animation. If any of the pin’s rotation has its x-value not equal to 0 or -0 then it means that the pin isn’t standing upright. By counting the number of pins that are lying down, you can calculate the score of the player.</p>
<p>The above line captures the x-value of the rotation attribute of a pin. This way you can fetch x-value of rotation attribute of all the pins and save it into an array. Now you can loop through the array and check every value and increment the <code>strike</code> counter.</p>
<h4 id="heading-new-game">New Game</h4>
<p>The player can start a new game at any point of time by clicking on the New Game button on the wall. It automatically refreshes the game.</p>
<h4 id="heading-moving-camera">Moving Camera</h4>
<p>You can move the camera at any point during the game. Here, I have chosen to move the camera every time the player rolls the ball for a better view of the falling pins.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*kZFpH7Qepl0i1OtR7jwmrg.png" alt="Image" width="800" height="450" loading="lazy"></p>
<h3 id="heading-pubnub">PubNub</h3>
<p>With less than 1/4th of a second latency, PubNub can smoothly publish and subscribe messages between multiple VR devices. Let’s convert this single-player game into a 2-player game.</p>
<p>You’ll now have to initialize your PubNub keys. <a target="_blank" href="https://admin.pubnub.com/#/register/?utm_source=Syndication&amp;utm_medium=Medium&amp;utm_campaign=SYN-CY18-Q3-Medium-Aug-17">Sign up for a PubNub account</a> and create a project in the <a target="_blank" href="https://admin.pubnub.com/#/register?utm_source=Syndication&amp;utm_medium=Medium&amp;utm_campaign=SYN-CY18-Q3-Medium-Aug-17">Admin Dashboard</a>.</p>
<h4 id="heading-deciding-the-turns">Deciding the Turns</h4>
<p>Every player gets two turns. The player switch turns after every two shots. So after every two shots, PubNub can notify the other user that they can take control. In this game, every time the player gets his/her turn the 5 triangle pointers surface on the bowling lane. And when it’s not their turn, the 5 triangle pointers are hidden.</p>
<p>Hide the pointers when it’s not your turn. Here, instead of hiding, I am setting the position to 0.</p>
<p>Make the pointer surface back to the bowling lane when it is your turn. By doing this, you’ll be taking control of the tracks again.</p>
<h4 id="heading-replicating-the-state-of-pins-after-knockdown">Replicating the State of Pins After Knockdown</h4>
<p>After every knockdown, you can capture the position of pins that are down and send it to the other user using PubNub. By doing so, you can replicate one player’s screen on other players’ screens. In the code below, you can see that the position and rotation values of pin 1 are passed to other players using PubNub. On similar lines, you can send rotation and position values of all the pins through PubNub.</p>
<h4 id="heading-switching-between-static-and-dynamic-bodies">Switching Between Static and Dynamic Bodies</h4>
<p>Earlier we used <code>aframe-physics-system</code> to convert the A-Frame objects into dynamic bodies. When the player isn’t rolling the ball and is just replicating the screen of another player, the ball should not be a dynamic body in order to avoid falling of extra pins.</p>
<p>When it is the current player’s turn, dynamics is set to true, and the <code>dynamic-body</code> properties are added.</p>
<p>When it’s not the player’s turn, dynamics is set to false, and the <code>dynamic-body</code> properties are removed.</p>
<h4 id="heading-player-2">Player 2</h4>
<p>Once you are done with publishing data through PubNub from Player 1’s screen, you can read the data by subscribing to PubNub’s channel.</p>
<p>When PubNub receives data related to the position of fallen pins’ position and rotation, you can set the attribute of pins on player 2’s screen to the same values as Player 1 and hence make the two screens identical.</p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>Congratulations! Every time you roll the ball on Player 1’s screen, you can see Player 2’s screen replicating all the movements. Now you can revert this by publishing Player 2’s data back to Player 1 and convert your game into a fully functional 2-player game. It can be converted into a multiplayer game as well. Happy VR gaming!</p>
<p><strong>The <a target="_blank" href="https://github.com/namrathasubramanya/VR-Bowling-game">full GitHub code repository can be found here</a>.</strong></p>
<p>_Originally published at <a target="_blank" href="https://www.pubnub.com/blog/build-multiplayer-browser-based-vr-game-aframe-webvr/?utm_source=Syndication&amp;utm_medium=Medium&amp;utm_campaign=SYN-CY18-Q3-Medium-Aug-17">www.pubnub.com</a>._</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to create your first HoloLens app with Unity ]]>
                </title>
                <description>
                    <![CDATA[ By Max Huddleston Microsoft’s HoloLens is pretty freaking awesome. I was introduced to it at my internship this summer, and I’ve had a blast developing for it. HoloLens apps are created using either DirectX with C++ or Unity with C#. I found that it ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-create-your-first-hololens-app-with-unity-1afa364843d4/</link>
                <guid isPermaLink="false">66c3514bf41767c3c96bad12</guid>
                
                    <category>
                        <![CDATA[ hololens ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ unity ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 15 Aug 2018 21:38:16 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/0*LybjBzQe4KnxejOR.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Max Huddleston</p>
<p><a target="_blank" href="https://www.microsoft.com/en-us/hololens">Microsoft’s HoloLens</a> is pretty freaking awesome. I was introduced to it at my internship this summer, and I’ve had a blast developing for it.</p>
<p>HoloLens apps are created using either DirectX with C++ or Unity with C#. I found that it is generally quicker and easier to get an app up and running with Unity.</p>
<p>In this article, we’ll set up Unity for HoloLens development, create an interactive cube, and spin up the HoloLens emulator so you can see your creation. This article is meant for total beginners to Unity, so if you have experience with the editor, I’d recommend going through <a target="_blank" href="https://docs.microsoft.com/en-us/windows/mixed-reality/academy">Microsoft’s tutorials</a>.</p>
<h3 id="heading-prerequisites">Prerequisites</h3>
<ol>
<li>A Windows 10 PC with the April 2018 update</li>
<li>The HoloLens Emulator which you can download <a target="_blank" href="https://docs.microsoft.com/en-us/windows/mixed-reality/install-the-tools">here</a></li>
<li><a target="_blank" href="https://developer.microsoft.com/en-us/windows/downloads">Visual Studio 2017</a> — Community edition is fine</li>
<li><a target="_blank" href="https://store.unity.com/download">Unity</a> — Make sure you add the Windows .NET scripting backend component during installation</li>
<li>The <a target="_blank" href="https://github.com/Microsoft/MixedRealityToolkit-Unity/releases">HoloToolKi</a>t</li>
</ol>
<p>You can find the full source code <a target="_blank" href="https://github.com/cptn-neemo/FirstHoloLensApplication">here</a>.</p>
<h3 id="heading-set-up">Set up</h3>
<p>Open up Unity. If this is your first time using the editor, you will be prompted to sign in or sign up. I’d recommend Unity Personal unless you plan on monetizing your app.</p>
<p>After you sign in, create a new project and enter in a name. You should be greeted with this screen after the project completes the initial setup.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Nt1kDO3K0sfzQIOfT-gexw.png" alt="Image" width="800" height="434" loading="lazy">
<em>Unity editor at first startup</em></p>
<p>Right click on the Assets folder in the bottom left corner. Navigate to Import Package -&gt; Custom Package, and open the HoloToolKit unity file we downloaded earlier. A Unity popup will appear, click All and import the assets.</p>
<p>Next we’ll create our scene. Select File -&gt; New Scene and save it as Main.</p>
<p>Unity needs a special configuration in order to build a project for HoloLens. Luckily, the HoloToolKit has utility scripts which do this configuration for us. On the top toolbar, select Mixed Reality Toolkit -&gt; Configure -&gt; Apply Mixed Reality Project Settings. Use the default values. After the configuration is finished, apply the Mixed Reality Scene Settings. Delete the Directional Light GameObject.</p>
<p>Awesome! So far we’ve imported the HoloToolKit and set up Unity for HoloLens development. In the next section I’ll introduce you to the basics of Unity, and after that we’ll get a cube to render on screen.</p>
<h3 id="heading-familiarizing-yourself-with-the-editor">Familiarizing yourself with the editor</h3>
<p>This is what the editor should look like at this point. Notice the three boxed-in areas:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*-ilX9-KD5YD1BpmjBpHJVw.png" alt="Image" width="800" height="433" loading="lazy"></p>
<p>The red area to the left is the scene hierarchy panel. Here we can add new <strong>GameObjects</strong>, and get a high-level overview of the current application. A <a target="_blank" href="https://docs.unity3d.com/ScriptReference/GameObject.html">GameObject</a> is a base class for all Unity entities. They can be a physical object like a cube, or a collection of scripts like the Input Manager in the scene.</p>
<p>The bottom blue area contains the assets menu and console. The assets menu is exactly what it sounds like — it contains the C# scripts, materials, prefabs, and meshes required to run your app.</p>
<p>The right green area is the inspector menu. Here is where you can add and modify the <strong>Components</strong> of your GameObjects. <a target="_blank" href="https://docs.unity3d.com/ScriptReference/Component.html">Components</a> are what make up the behavior of your GameObjects. They determine the look, interactivity, and physics of their parent.</p>
<h3 id="heading-creating-a-cube">Creating a cube</h3>
<p>Now we’ll get our first GameObject to render on screen. In the scene hierarchy panel, right click and select 3D Object -&gt; Cube. A cube should appear in the editor.</p>
<p>Double click Cube in the in hierarchy panel, and in the right inspector panel change the position to (0,0,2). Set the scale to be (.25, .25, .25). Your inspector panel should look like this:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*KIYP5ws7ST6n_5thE7UmRg.png" alt="Image" width="392" height="465" loading="lazy">
<em>Cube inspector panel</em></p>
<p>Nice! Let’s go through the build steps so we can see our cube in the HoloLens emulator.</p>
<p>In Unity, select File-&gt;Build Settings. The build popup should appear, so hit the build button. In the folder popup, create a new folder called App and choose it as the build destination.</p>
<p>After the build is completed, open the Visual Studio solution in the App folder. Change the debug options to Release, x86, and target the HoloLens emulator. Your options bar should look like this:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*EJuVLjAtgMeuaLT10oikxw.png" alt="Image" width="486" height="65" loading="lazy">
<em>Debug options for HoloLens emulator</em></p>
<p>Run the solution, and after the emulator starts up and your application loads, you should see your cube on screen.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*4vCqc5n03DuxLsuhK1_z_A.png" alt="Image" width="800" height="510" loading="lazy">
<em>Cube in the emulator</em></p>
<h3 id="heading-making-the-cube-interactive">Making the cube interactive</h3>
<p>Now that we’ve figured out how to get a cube into our application, let’s make the cube actually do something. When we gaze at the cube, it will rotate, and when we click the cube, it will increase in size.</p>
<p>Navigate back to Unity and create a new script in the assets panel called InteractiveCube. To create a new script, right click on the assets panel and select Create -&gt; C# script.</p>
<p>To add the script to the cube, make sure the cube is selected, and drag and drop the script onto the inspector panel. It should look like this:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*dfj3gWXCP4EZOw8sxvUafA.png" alt="Image" width="386" height="516" loading="lazy"></p>
<p>Double click on the script in the assets tab and a Visual Studio instance should appear.</p>
<p>Import HoloToolkit.Unity.InputModule at the top of our script, and make InteractiveCube extend IFocusable and IInputClickHandler. Our code should look like this:</p>
<pre><code>using HoloToolkit.Unity.InputModule;
</code></pre><pre><code>public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">InteractiveCube</span> : <span class="hljs-title">MonoBehaviour</span>, <span class="hljs-title">IFocusable</span>, <span class="hljs-title">IInputClickHandler</span> </span>{...}
</code></pre><p>By extending the IFocuable and IInputClickHandler interfaces, our script component allows the parent GameObject to subscribe to focus and click events.</p>
<p>Let’s make the cube rotate when our gaze is on it. The IFocusable interface requires us to implement two public void methods: OnFocusEnter and OnFocusExit. Create a private boolean field and name it Rotating. When we focus the cube, set it to true, and when our focus exits, set it to false. Our code should look like this:</p>
<pre><code>public bool Rotating;
</code></pre><pre><code>public <span class="hljs-keyword">void</span> OnFocusEnter(){    Rotating = <span class="hljs-literal">true</span>;}
</code></pre><pre><code>public <span class="hljs-keyword">void</span> OnFocusExit(){    Rotating = <span class="hljs-literal">false</span>;}
</code></pre><p>We’ll do the actual rotation in Update(). Update() is a special Unity method that is called every frame. To control the speed of the rotation, add a public float field named RotationSpeed. Any public field in a component can be adjusted and initialized in the Unity editor.</p>
<pre><code>public float RotationSpeed;
</code></pre><pre><code><span class="hljs-keyword">void</span> Update() {    <span class="hljs-keyword">if</span> (Rotating)        transform.Rotate(Vector3.Up * Time.deltaTime            * RotationSpeed);}
</code></pre><p>In Unity, the transform is used to control the physical attributes such as size, rotation, and position of a GameObject. We are rotating the parent GameObject around the y-axis at one degree per second multiplied by the speed.</p>
<p>To make the cube respond to click events, add the OnInputClicked method required by IInputClickHandler. Create a public Vector3 variable called ScaleChange. In the OnInputClicked method, we’ll increase the cube’s scale by ScaleChange.</p>
<pre><code>public Vector3 ScaleChange;
</code></pre><pre><code>public <span class="hljs-keyword">void</span> OnInputClicked(InputClickedEventData eventData) {    transform.localScale += ScaleChange;}
</code></pre><p>Now that we’re finished with the script, navigate back to Unity. Make sure the Cube object is selected, and set the Speed and ScaleChange variables to 50 and (.025, .025, .025) respectively. Feel free to experiment with different values! Our script should look like this:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*voFzBQvBaHVcBtmoYQv6zg.png" alt="Image" width="387" height="82" loading="lazy"></p>
<p>Awesome! We’ve finished the InteractiveCube script. Build your app from the Unity editor, and run the solution from Visual Studio.</p>
<h3 id="heading-summary">Summary</h3>
<p>In this walkthrough, you learned how to set up Unity for HoloLens development, create an interactive GameObject, and run your application in the emulator.</p>
<p>If you enjoy HoloLens development, I encourage you to go through the <a target="_blank" href="https://docs.microsoft.com/en-us/windows/mixed-reality/academy">Microsoft Academy</a> tutorials. They go over the various HoloLens key concepts in detail and walk you through creating some pretty cool apps.</p>
<p>If you liked the article or have feedback, leave a comment below!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ More “Future” Tech That’s Hiding in Plain Sight: Augmented Reality ]]>
                </title>
                <description>
                    <![CDATA[ By James Hsu As I discussed in the previous article on hot future tech, artificial intelligence (AI), augmented reality (AR/VR), blockchain, and the Internet of Things (IoT) might seem a long way off from mainstream adoption. Movies like Ready Player... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/more-future-tech-thats-hiding-in-plain-sight-augmented-reality-fd9680391e8f/</link>
                <guid isPermaLink="false">66c35b829de50ee9ca7fa70f</guid>
                
                    <category>
                        <![CDATA[ Augmented Reality ]]>
                    </category>
                
                    <category>
                        <![CDATA[ ecommerce ]]>
                    </category>
                
                    <category>
                        <![CDATA[ marketing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 25 Jul 2018 22:51:42 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*F2fcFHKDbNC-iaE2oZ1zqg.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By James Hsu</p>
<p>As I discussed in the previous article on hot future tech, artificial intelligence (AI), augmented reality (AR/VR), blockchain, and the Internet of Things (IoT) might seem a long way off from mainstream adoption.</p>
<p>Movies like <strong>Ready Player One</strong> and <strong>Avengers: Infinity Wars</strong> only perpetuate this perception by mixing real technologies with fantasy, making the tech we wield in the real world seem primitive in the process.</p>
<p>The reality, though?</p>
<p>AI, AR/VR, blockchain, and IoT are already playing an important role in our everyday lives, with countless examples hiding in plain sight.</p>
<p>In <a target="_blank" href="https://medium.freecodecamp.org/future-tech-thats-hiding-in-plain-sight-artificial-intelligence-683cce8a7d7a">Part One</a> of our series, we explored how Artificial Intelligence (AI) is already deeply integrated into apps we use every day. In this article, we’ll dive into <strong>Augmented Reality (AR).</strong></p>
<h3 id="heading-what-is-augmented-reality">What is Augmented Reality?</h3>
<p>Not to be confused with virtual reality (VR), which is 100% driven by computer generated images, <strong>augmented reality (AR)</strong> is a technology that combines computer-generated visuals with a user’s live view of the real world, resulting in a composite view.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*fgPEedxdrtadrbl80ClZ4Q.jpeg" alt="Image" width="720" height="405" loading="lazy">
<em>The Pixels movie was a somewhat loose interpretation of augmented reality.</em></p>
<p>For the most part, AR today is meant to be experienced through the lenses of devices like smartphones. (Microsoft’s attempt to evangelize head-worn AR, or what it calls “mixed reality”, is gaining traction in some areas but can still be considered niche.)</p>
<p>Modern smartphones come equipped with everything you need to enjoy an engaging AR experience:</p>
<ul>
<li>A digital camera for providing a video feed of the real world.</li>
<li>A computer to store and run software applications.</li>
<li>A powerful processor capable of <strong>computer vision</strong> (CV), for accurate placement of the computer-generated images “into” the real world.</li>
<li>A high-res display capable of showing the real-time composite view.</li>
<li>Gyroscope sensors for sensing changes in orientation, to make the composite view more engaging/dynamic.</li>
</ul>
<p>There is a massive business opportunity tied to the fact that all the hardware needed to experience meaningful AR applications today can be found inside any modern smartphone.</p>
<h3 id="heading-ar-in-ecommerce">AR in Ecommerce</h3>
<p>It can be challenging to spend your hard-earned cash on furniture you’ve never actually laid eyes on in person. And, even if you have seen a piece of furniture in person, questions remain that might prevent you from pulling the trigger on a purchase.</p>
<p><em>How will it look with my coffee table and side tables? Is it too traditional for my living room? Will that color look tacky against the floral wall paper and shag carpet?</em></p>
<p>Likewise, with fashion ecommerce, how do you know whether that designer jacket will actually look good on you without taking it into a fitting room and seeing whether it jives with the jeans and boots you’re wearing?</p>
<p>This is where AR comes in.</p>
<p>Companies like <a target="_blank" href="https://www.amazon.com/adlp/arview">Amazon</a>, <a target="_blank" href="https://highlights.ikea.com/2017/ikea-place/">IKEA</a>, and <a target="_blank" href="https://techcrunch.com/2017/10/24/target-adds-ar-shopping-to-its-mobile-website/">Target</a> have already added AR functionality to their mobile apps, allowing you to “place” virtual objects into your environment to preview how they might actually look in your home or office. You can place a virtual vase onto your actual coffee table (thanks to plane detection), or “push” a virtual wardrobe against your bedroom wall without breaking a sweat.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*wjvkiudnCBarj29AlvDnBA.jpeg" alt="Image" width="800" height="533" loading="lazy">
<em>Native mobile ecommerce apps can be upgraded to provide AR previews, as Amazon has done on both iOS and Android.</em></p>
<p>In fashion, Michael Kors will be using a Facebook AR-based ad campaign to provide users with a simple way to <a target="_blank" href="https://www.marketingtechnews.net/news/2018/jul/12/facebook-bringing-augmented-reality-ads-news-feed/">“try on” sunglasses</a> and other fashion merchandise before they buy.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*HSvp1FIT1_InIzIPdWOABQ.png" alt="Image" width="800" height="508" loading="lazy">
<em>Soon, any Facebook advertiser will be able to launch AR-based ad campaigns.</em></p>
<p>Ecommerce companies that allow shoppers to try out merchandise with AR believe that doing so will provide a significant lift in conversion rates — and consequently will help grow sales revenues.</p>
<h3 id="heading-ar-in-marketing-amp-advertising">AR in Marketing &amp; Advertising</h3>
<p>Even beyond the conversion-focused world of ecommerce, businesses are finding that augmented reality can be the perfect way to attract and engage potential customers.</p>
<p>Snap, the photography-obsessed creator of Snapchat, <a target="_blank" href="https://forbusiness.snapchat.com/blog/introducing-lens-studio-a-new-way-to-create-branded-ar-experiences/">has already deployed a commercial platform called Lens Studio, which allows businesses to “create branded AR experiences”</a>. Snapchat’s AR experiences are AR-based camera filters, called “lenses”, that Snapchat users are already very familiar with, thanks in part to earlier lenses like the Internet sensation, “Dancing Hotdog.”</p>
<p>See BMW’s Snapchat Lens in action below:</p>
<p>Facebook has also begun testing AR-based advertising with select clients (including Michael Kors, mentioned previously,) and is expected to make AR ad campaigns available to a wider audience of advertisers later in 2018. Early results are promising. ASUS reported that its AR-based test campaign <a target="_blank" href="https://www.mobilemarketer.com/news/michael-kors-is-first-to-test-ar-ads-in-facebook-news-feed/527504/">saw 10x the engagement of its non-AR counterpart</a>.</p>
<p>Beyond these platforms, CPG companies are creating standalone AR experiences to bring life to food or beverage products, for no other reason than to increase customer engagement and create a buzz. Patrón, the Mexican tequila company, launched an AR app last year that lets you plant your own agave field, from which a distillery and bartender emerge to tell you everything you’ve ever wanted to know about creating Patrón tequila.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*pe6Hz7g4L8agf0iPaVpkpA.jpeg" alt="Image" width="800" height="450" loading="lazy">
<em>The Patrón Experience lets you plant your own agave field and distillery on any flat surface.</em></p>
<p>For companies planning a new product launch or corporate event, adding an AR experience can help dial up both audience engagement and the resulting media coverage.</p>
<p>Consider Samsung’s Galaxy S9 product launch, where attendees were able to witness their name badges become virtual and interactive Galaxy S9 phones right in their very hands.</p>
<h3 id="heading-ar-in-industrial-and-medical-procedures">AR in Industrial and Medical Procedures</h3>
<p>Even if you’re not an industrial technician or a medical surgeon, you can probably appreciate the complexities inherent to these professions. One false move, and lives could be at stake.</p>
<p>Thanks to AR, things are becoming a whole lot easier for these professionals.</p>
<p>Energy giant BP has begun <a target="_blank" href="https://www.fieldbit.net/news/fieldbit-expands-collaboration-with-bp-to-deploy-smart-glasses-and-fieldbit-hero/">using AR to help technicians</a> in the field perform equipment maintenance. With the new technology, BP engineers wear AR headsets that transmit a live video feed to a remote expert, who can diagnose issues and then place relevant instructions and diagrams onto the field technician’s visual field (via the AR headset) in real time. This keeps the technician’s hands free to perform the necessary repairs.</p>
<p>Similar use cases are being developed <a target="_blank" href="https://hbr.org/2018/03/how-augmented-reality-will-make-surgery-safer">in the medical field</a>, where AR headsets can provide real time and hands-free information on surgical procedures and vital health information without having to look away from the patient.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*OcLTY2AduIHs6_vyywM_UA.jpeg" alt="Image" width="800" height="450" loading="lazy">
<em>A glimpse of what AR-enabled surgery might look like. Source: The Augmentarium at the University of Maryland (illustration by Brian G. Payne)</em></p>
<h3 id="heading-ar-gaming">AR Gaming</h3>
<p>It’s been two years since Pokemon Go first grabbed the world with its killer combination of geolocation and AR-based exploration, allowing every man, woman, and child to live out their Pokemon trainer fantasies in the real world.</p>
<p>Pokemon Go’s massive popularity (<a target="_blank" href="https://variety.com/2018/gaming/news/pokemon-go-2-years-1-billion-1202867409/">with nearly $2 billion in revenue to date</a>) has piqued plenty of interest and funding in AR gaming.</p>
<p><a target="_blank" href="https://play.google.com/store/apps/details?id=com.ludia.jw2&amp;hl=en_US">Jurassic World: Alive</a> launched earlier this year and doesn’t diverge very far from the location-based and collections-oriented gameplay made popular by Pokemon Go.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*lM_UlkJXbVYr1zHMds7vvg.jpeg" alt="Image" width="800" height="424" loading="lazy">
<em>Pokemon Go, but with dinosaurs?</em></p>
<p>A Walking Dead AR mobile game (<a target="_blank" href="https://www.thewalkingdeadourworld.com/">Walking Dead: Our World</a>) came out just last month, and Pokemon Go creator, Niantic, is expected to launch AR-based Harry Potter: Wizards Unite at <a target="_blank" href="https://www.forbes.com/sites/davidthier/2018/07/02/harry-potter-wizards-unite-release-date-when-will-niantics-next-big-game-come-out/#12a0a9e65cde">some point this year</a>.</p>
<p>Admittedly, one major weakness of today’s AR games is that the AR component is often non-essential to the core gameplay.</p>
<p>Newly-released Walking Dead: Our World is an “AR-optional” game — and one in which the vast majority of users appear to skip the AR mode altogether (partly because it’s not essential to progress in the game, but also because the AR mode seems to struggle with plane detection.)</p>
<p>Even Pokemon Go — which has an excellent AR experience — is AR-optional. You can catch Pokemon without firing up the AR mode, though finding a rare Pokemon sitting on your laundry machine is MUCH more enjoyable.</p>
<p>Some of these limitations are inherent to the software development kits (SDK) the applications are built on. Apple’s ARKit and Google’s ARCore SDKs determine the ceiling for today’s mobile AR experiences on iOS and Android devices, respectively.</p>
<p>Both companies appear to be committed to enhancing support for richer AR experiences, though.</p>
<p>Announced earlier this year, Apple’s ARKit 2 will allow for much better AR-based gameplay experiences.</p>
<p>For example, consider this Apple demo of an AR game built on ARKit 2 , in which multiple players are able to interact with the SAME virtual objects in a “shared experience.” This mechanic opens up a universe of possibilities when it comes to multiplayer AR games.</p>
<h3 id="heading-why-ar-will-gain-mainstream-adoption-faster-than-vr">Why AR will Gain Mainstream Adoption Faster than VR</h3>
<p>Most modern smartphones come standard with every hardware component you need to experience meaningful AR right now.</p>
<p>This low barrier to entry stands in stark contrast to virtual reality (VR).</p>
<p>For VR to work, users must own a virtual reality headset, which enables users to see the virtual world while blocking out all traces of the real world. VR headsets are typically purchased separately from the computers or phones that run the VR applications. While low end VR experiences can be had using a smartphone slapped into an inexpensive, VR headset (like the $15 Google Cardboard), the more immersive and believable VR experiences (on Oculus Rift and HTC Vive, for example) require modern gaming computers and headsets that can cost upwards of $1,500 in total.</p>
<p>The other edge AR has over VR is its versatility.</p>
<p>AR apps are designed for a wide variety of real world use cases. And, because you maintain visibility of your actual surroundings when using AR, safety is not much of an issue — at least no more than when you’re playing Candy Crush or catching up on your Instagram feed.</p>
<p>VR, on the other hand, is best enjoyed in a room without other people, tethered to devices like a desktop computer and motion sensors. This limits VR’s usefulness, relegating VR to use cases around gaming, entertainment, and complex commercial or governmental simulations (for aviation or military training, for example).</p>
<p>Here’s how Apple CEO Tim Cook explained his bullishness on AR relative to VR:</p>
<blockquote>
<p><em>“I’m incredibly excited by AR because I can see uses for it everywhere. I can see uses for it in education, in consumers, in entertainment, in sports. I can see it in every business that I know anything about. I also like the fact that [AR] doesn’t isolate. I don’t like our products being used a lot. I like our products amplifying us. And I think AR can help amplify the human connection. I’ve never been a fan of VR like that because I think it does the opposite. There are clearly some cool niche-y kind of things for VR. But it’s not profound in my view. AR is profound.”</em></p>
</blockquote>
<h3 id="heading-ars-accessibility-is-profound-too">AR’s Accessibility is Profound, Too</h3>
<p>As jaw-dropping and eye-popping as some AR experiences can be, AR experiences are actually not difficult to create or enjoy.</p>
<p>From the consumer perspective (demand side), anyone with a modern smartphone can download AR-enabled applications and begin to enjoy the benefits of augmented reality.</p>
<p>From the business side (supply side), creating an AR experience is as easy as partnering with a <a target="_blank" href="https://citrusbits.com/">reputable software company with AR/VR development capabilities</a>.</p>
<p>The hardest part, as it often is with emerging technologies, is taking the initial plunge.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How we brought our product mascot to life with AR.js ]]>
                </title>
                <description>
                    <![CDATA[ By Mateusz Tarnaski Short answer: using a browser-based Augmented Reality (AR) application. For the long answer, read below. The idea of playing with AR started as a random interesting experiment. In our company, we strive to stay at the edge of the ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-we-brought-our-product-mascot-to-life-87830db12ff4/</link>
                <guid isPermaLink="false">66c35670c7095d76345eaf7d</guid>
                
                    <category>
                        <![CDATA[ Augmented Reality ]]>
                    </category>
                
                    <category>
                        <![CDATA[ coding ]]>
                    </category>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 19 Jul 2018 14:36:04 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/0*OWm5DKa9eQRjwPEn.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Mateusz Tarnaski</p>
<p>Short answer: using a browser-based Augmented Reality (AR) application. For the long answer, read below.</p>
<p>The idea of playing with AR started as a random interesting experiment. In our company, we strive to stay at the edge of the curve. We share technical novelties and new technologies with each other on a semi-regular basis. Since we are mostly dealing with web technologies, the concept of AR in the browser really took off.</p>
<p>Since AR is mostly an entertainment technology, a practical application was not obvious to us from the start. Luckily, two unrelated things happened at the same time:</p>
<ul>
<li>we had just created a mascot for our <a target="_blank" href="https://voucherify.io">product</a> — <a target="_blank" href="https://uploads-ssl.webflow.com/58fe5d0657dd045f17ae2345/5ab8c85eff9c8b50cbce8b28_voucherify_index_v2_03%20(2).png">Hubert</a>,</li>
<li>we had to do a marketing booth at <a target="_blank" href="https://devoxx.pl/">devoxxPL 2018</a></li>
</ul>
<p>We decided to bring Hubert to life during the event, in the form of an AR app for people to play with. In our heads, users should be able to:</p>
<ul>
<li>render Hubert on a wall background in their phones</li>
<li>take a picture of the rendered model</li>
<li>tweet the photo (not the subject of this article)</li>
</ul>
<p>The end result is available on <a target="_blank" href="https://meet-hubert.glitch.me/">glitch.com</a>, scaled down and rotated to be suitable for a desktop experience (you can also take a quick look into the <a target="_blank" href="https://glitch.com/edit/#!/meet-hubert?path=contestant_app/index.html:1:0">source code</a>).</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/vvpzSs7qYIixdMDjC8TY4kto2aRREFWKHJ4H" alt="Image" width="800" height="533" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/lTqvZf927WIlmukzwzK7qt-fN1PWfDDSKPYn" alt="Image" width="403" height="638" loading="lazy"></p>
<h3 id="heading-rendering-hubert-in-real-time">Rendering Hubert in real time</h3>
<p>We used <a target="_blank" href="https://github.com/jeromeetienne/AR.js/">AR.js</a> (version from <a target="_blank" href="https://github.com/jeromeetienne/AR.js/commit/bfe82a70eae397e02e457801052ca54a3dbd09e2">this commit</a>) as the main building block of our AR app — it packages webRTC camera access, marker recognition, and 3D scene rendering. We liked it mostly because you can have a basic demo running in around 20 lines of code.</p>
<p>Under the hood, AR.js can use either three.js or A-frame implementations to render your 3D scenes.</p>
<ul>
<li>three.js offers fine-grained control of 3D rendering, and is JavaScript-based. You have probably heard about it in the context of rendering 2D and 3D scenes in the browser.</li>
<li>A-frame is a web framework designed specifically for building VR and AR experiences. It has an HTML-like markup that is more declarative than three.js, but sacrifices some of the control in favor of ease of use.</li>
</ul>
<p>We didn’t have a VR or 3D expert (except <a target="_blank" href="https://twitter.com/mr_oova">Mrówa</a>, who prepared the 3D model). As A-frame’s HTML-like declarative syntax looked more familiar to us, we opted for A-frame to do the rendering.</p>
<p>Here you can see the code for rendering Hubert, 30 lines on the dot. We omitted some options and A-frame tweaking for the sake of simplicity. You can refer to the repo to see it all.</p>
<p>This gives us Hubert nicely rendered <strong>in the web browser in real time.</strong></p>
<h3 id="heading-capturing-a-photo-to-tweet">Capturing a photo to tweet</h3>
<p>Unfortunately, we don’t have a single video feed rendering the whole scene. There is the video from your camera and a rendered 3D scene. We quickly figured out that we would have to capture a frame from both sources and put them together for a nice photo of Hubert.</p>
<p>Taking frames out of a webRTC video stream is pretty straightforward. The <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Taking_still_photos">best material on the subject can be found here</a>. If your browser has the appropriate API, you need two elements:</p>
<ul>
<li>a reference to your source  tag</li>
<li>a destination  element in which to put your frame</li>
</ul>
<p>Then it’s just a simple matter of drawing a 2D image from video to canvas. In our case, both of these are a bit tricky.</p>
<p>The video take we are using is generated and embedded by AR.js. We had no idea how to get it gracefully, so we hacked our way around it with a loop and a DOM selector:</p>
<p>We also needed to hack some scaling. AR.js doesn’t present the raw video feed to the user, they scale it to fill the screen without losing aspect ratio. That means we need to apply the same scaling to our frame. If not, our screenshot will have “more” of the video feed than is shown on the screen. We don’t want to confuse the users here.</p>
<p>What the user sees:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/TqNXPoUowQqneSK0YcqTmW0Zs3IXHPXN8Ivv" alt="Image" width="640" height="327" loading="lazy"></p>
<p>If we take a frame <strong>without</strong> scaling and just try to copy from point (0,0) we lose margins imposed by AR.js. This is a totally different picture from what is presented to the user:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/G86uFDWwJ15KiGqWsBEJQdRy-hmnvD9qL8gM" alt="Image" width="640" height="329" loading="lazy"></p>
<p>Suffice it to say we just reverse-engineered the scaling and figured out the bounding box of what the user sees:</p>
<p>To achieve this final result (the same as what is presented live to the user, give or take some camera shake):</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/qanFbFOXGrc4HzplknO4E7PwqGzEw4ZVO1M5" alt="Image" width="640" height="329" loading="lazy"></p>
<p>Now we just need to get Hubert in the picture. Again, <a target="_blank" href="https://github.com/aframevr/aframe/blob/master/docs/components/screenshot.md">the API</a> for that is very straightforward. To capture a screenshot of a rendered A-frame scene, we need to get the scene’s canvas. The relevant part is copied to our destination canvas, on top of the previously taken video frame.</p>
<p>Getting the relevant part is the tricky bit in our case. Thanks to the AR.js scaling, we cannot simply get the “perspective” shot of the scene and use that. It will look too wide or too short, depending on orientation.</p>
<p>For landscape mode (width &gt; height), the scaling method we used for video works perfectly well.</p>
<p>For portrait mode, it works great on a PC… However, once you enter the realm of mobile devices, the scaling breaks and the screenshot doesn’t look nice. You get this skinny Hubert…</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/b6iPvi5VULuttWNr0fhEbL3Sb68rBHK9vXex" alt="Image" width="432" height="639" loading="lazy"></p>
<p>…instead of our lovely, bubbly mascot in all his glory:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/DpNxsKWRiI-WKImCfjd7PZCfg7HAFGk7dB95" alt="Image" width="411" height="640" loading="lazy"></p>
<p>We are still not sure why that is the case. We made the mistake of not testing it out thoroughly on actual mobile devices, thinking it would work the same as it does on the development machine. (Yes, we know how bad that sounds, but that’s the reality of it.) During the conference, we managed to figure out the formula for portrait scaling and introduced a fix:</p>
<p>It’s not pretty. It’s one of those “it’s late, it works, just leave it” fixes. The values presented above produced a satisfactory result and we left it at that.</p>
<p>With that, we have a picture of Hubert in the real world! It can be retrieved from the destination canvas element and displayed on the page or sent to the server to tweet out.</p>
<h3 id="heading-summary">Summary</h3>
<p>AR in the browser is possible. Even more, it is possible on mid-grade mobile hardware (as of June 2018). Getting it to work on every phone and browser is still a long shot, so don’t count on it for wide, diverse userbases.</p>
<p>However, if you have a somewhat controlled environment, augmented reality on a phone can be used to create unique experiences. These don’t require special hardware or workstations and that is a big, big plus. Just make sure to test it on actual devices ahead of time.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to wish someone Happy Birthday using Augmented Reality ]]>
                </title>
                <description>
                    <![CDATA[ I have a friend who’s birthday was coming up, so I wanted to do something special for her. As she is a TechGeek just like me, so I couldn’t just get her a simple birthday present like a teddy bear or chocolates. So, I started looking for unique ways ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-wish-someone-happy-birthday-using-augmented-reality-3809776cb655/</link>
                <guid isPermaLink="false">66bb8ede7a6500a14ba5b781</guid>
                
                    <category>
                        <![CDATA[ Apps ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Augmented Reality ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Pratik Parmar ]]>
                </dc:creator>
                <pubDate>Fri, 29 Jun 2018 17:43:43 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*R6c3P43LzQgB6d3khSNnRQ.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>I have a friend who’s birthday was coming up, so I wanted to do something special for her. As she is a TechGeek just like me, so I couldn’t just get her a simple birthday present like a teddy bear or chocolates. So, I started looking for unique ways to wish her a happy birthday on the Web.</p>
<p>I ended up watching a <a target="_blank" href="https://youtu.be/O_EUnGMJtLA">video</a> where a guy was proposing to a girl using VR. So, I decided — that was it! That was how I was gonna do it. Not the proposal part though.</p>
<p>While I was contributing to Mozilla, I’d created few small VR projects using <a target="_blank" href="https://aframe.io/"><strong>A-Frame</strong></a> <strong>—</strong> Mozilla’s web-framework for building virtual reality experiences. And believe me, even if you don’t know much about VR or AR, you can easily create a VR scene using A-Frame. The only prerequisite is HTML, which you can learn easily <a target="_blank" href="https://www.w3schools.com/Html/">here</a>. For a better understanding, though, I recommend that you go through <a target="_blank" href="https://aframe.io/aframe-school/#/">A-Frame School</a>, which is a great collection of tutorials intended for beginners.</p>
<p>So I’d decided that I was gonna use A-Frame, but I wanted more than just a simple VR scene displaying “Happy Birthday.” In the end, I chose to create an AR scene. I found a great project called <a target="_blank" href="https://github.com/jeromeetienne/AR.js/blob/master/README.md">AR.js</a><strong>.</strong> If you wanna get started with AR.js, here is a <a target="_blank" href="https://medium.com/arjs/augmented-reality-in-10-lines-of-html-4e193ea9fdbf">great article for beginners</a><strong>.</strong></p>
<h3 id="heading-building-a-basic-ar-web-app">Building a basic AR web app</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*R6c3P43LzQgB6d3khSNnRQ.jpeg" alt="Image" width="800" height="600" loading="lazy">
<em>AR Scene, created using AR.js</em></p>
<p>To watch the AR scene, you have to:</p>
<ul>
<li>Open this <a target="_blank" href="https://jeromeetienne.github.io/AR.js/data/images/HIRO.jpg">HIRO marker image</a> in your desktop browser.</li>
<li>Open this AR web app in your phone browser, and point it to your screen.</li>
</ul>
<p>When you scan a marker (here, a HIRO marker), it’ll display an AR scene on your phone, just like the image above. I used a plain HIRO marker, but you can <a target="_blank" href="https://medium.com/arjs/how-to-create-your-own-marker-44becbec1105">create your own marker as well</a>.</p>
<p>So, after adding all these libraries, my code looked like this:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*VpWtY3jmzmc5ftAM23SRPA.png" alt="Image" width="800" height="265" loading="lazy">
_Basic AR web app [ [Demo](https://hackyroot.github.io/A-Frame-Examples/Happy_Birthday/Basic.html" rel="noopener" target="<em>blank" title=") ]</em></p>
<p>Please note that while accessing any AR web app, if you get any prompt asking permission to access the webcam, please allow it. Otherwise the app won’t work.</p>
<h3 id="heading-add-3d-models-and-fonts">Add 3D models and fonts</h3>
<p>So, now we have simple AR web app working on our device. But what’s a birthday without <strong>cake</strong>?! Fortunately, A-Frame supports three types of 3D models: <a target="_blank" href="https://aframe.io/docs/0.8.0/components/gltf-model.html">glTF</a>, <a target="_blank" href="https://aframe.io/docs/0.8.0/components/obj-model.html">OBJ</a>, and <a target="_blank" href="https://aframe.io/docs/0.8.0/components/collada-model.html">COLLADA</a>. Learn more about 3D models in A-Frame <a target="_blank" href="https://aframe.io/docs/0.8.0/introduction/models.html">here</a>.</p>
<p>I downloaded some 3D model files of cake from <a target="_blank" href="https://poly.google.com/">Google Poly</a><strong>.</strong> You can import any asset files in A-Frame using the _ tag. You can also import separate fonts, in case you want to use a different font.</p>
<p>I was pretty convinced that A-Frame couldn’t be more awesome. But, wait…</p>
<h3 id="heading-add-audio">Add audio</h3>
<p>Birthdays are also not complete without the birthday song, right? And A-Frame supports Audio files as well. You can use the _ tag to import your files, under the  tag.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Z7Bj8EeI8PA_MfGnUzdv5w.png" alt="Image" width="800" height="78" loading="lazy">
<em>Import asset files</em></p>
<h3 id="heading-add-particles">Add particles</h3>
<p>What’s the thing that comes to your mind when you hear about a birthday — after cake, of course? A <strong>party,</strong> right? So, let’s add confetti to our AR scene, using <a target="_blank" href="https://github.com/IdeaSpaceVR/aframe-particle-system-component">A-Frame’s Particle System Component</a>.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*WRq3LqBLvxy8aQIuH3J2zA.png" alt="Image" width="800" height="50" loading="lazy">
<em>Add libraries for confetti and 3D text</em></p>
<h3 id="heading-lets-put-it-all-together">Let’s put it all together</h3>
<h4 id="heading-3d-models">3D Models</h4>
<p>This code will display the 3D model of the cake. But as you can see, I’ve added a few values in the <em>rotation</em> and <em>scale</em> fields. So, let’s discuss that. According to A-frame’s <a target="_blank" href="https://github.com/aframevr/aframe/blob/master/docs/components/rotation.md">GitHub page</a>:</p>
<ul>
<li><strong>Rotation</strong>: the rotation component defines the orientation of an entity in degrees. It takes the pitch (<code>x</code>), yaw (<code>y</code>), and roll (<code>z</code>) as three space-delimited numbers indicating degrees of rotation.</li>
<li><strong>Scale</strong>: the scale component defines a shrinking, stretching, or skewing transformation of an entity. It takes three scaling factors for the X, Y, and Z axes.</li>
<li><strong>MTL:</strong> stands for Material Library File (.<strong>mtl</strong>) Material library <strong>files</strong> contain one or more material definitions, each of which includes the color, texture, and reflection map of individual materials. These are applied to the surfaces and vertices of objects. Material <strong>files</strong> are stored in ASCII format and have the .<strong>mtl</strong> extension.</li>
<li><strong>OBJ</strong>: a file format that was created as a simple way to import and export geometry from different 3D applications. This is a common file type used by many 3D design solutions.</li>
<li><strong>Suggestion</strong>: If you don’t see your model, try scaling it down. OBJ models generally have extremely large scales in comparison to A-Frame’s scale.</li>
</ul>
<p>If you’re wondering how I knew the exact values for rotation, well I didn’t. I used an amazing tool created by the Mozilla team called <a target="_blank" href="https://github.com/aframevr/aframe-inspector">A-Frame Inspector</a>, built for this purpose only.</p>
<p>To learn more about <em>&lt;a-obj-model</em>&gt;, visit <a target="_blank" href="https://aframe.io/docs/0.8.0/primitives/a-obj-model.html">thi</a>s link.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*588pLp64QgtSVHgXeq-4rg.png" alt="Image" width="800" height="45" loading="lazy">
<em>Display 3D model of Cake</em></p>
<h4 id="heading-particles">Particles</h4>
<p>Well, this code may look overwhelming at first sight, but believe me, it’s not. We discussed Rotation earlier, but let’s talk about other fields as well:</p>
<ul>
<li><strong>Position</strong>: places entities at certain spots in 3D space. The Position takes a coordinate value as three space-delimited numbers.</li>
<li><strong>Preset</strong>: preset configuration. Possible values are: <code>default</code>, <code>dust</code>, <code>snow</code>, <code>rain</code>. Here we chose default in order to display starts.</li>
<li><strong>Color</strong>: describes a particle’s color. This property is a “value-over-lifetime” property, meaning an array of values can be given to describe specific value changes over a particle’s lifetime.</li>
<li><strong>Acceleration Value</strong>: describes this emitter’s base acceleration.</li>
<li><strong>Particle Count</strong>: the total number of particles this emitter will hold.</li>
<li><strong>Direction</strong>: the direction of the emitter. If the value is <code>1</code>, the emitter will start at beginning of particle's lifecycle. If the value is <code>-1</code>, the emitter will start at end of particle's lifecycle and work it's way backward.</li>
<li><strong>Rotation Axis</strong>: Describes this emitter’s axis of rotation. Possible values are <code>x</code>, <code>y</code> and <code>z</code>.</li>
</ul>
<p>To know more about A-Frame’s Particle Component System<em>,</em> visit this <a target="_blank" href="https://www.npmjs.com/package/aframe-particle-system-component">link</a>.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*lryKm0DHjxWdXL2on4uiig.png" alt="Image" width="800" height="72" loading="lazy"></p>
<h4 id="heading-text-and-audio">Text and Audio</h4>
<p>Well, you use can use _ as well, but I decided to go <a target="_blank" href="https://www.npmjs.com/package/aframe-text-geometry-component">with Text Geometry Com</a>ponent for more options. It’s used to generate text as a single geometry.</p>
<ul>
<li><strong>Material</strong> : The text geometry component defines just the geometry. We can apply any three.js material to the geometry.</li>
</ul>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">a-entity</span> <span class="hljs-attr">text</span>=<span class="hljs-string">"value: HELLO"</span> <span class="hljs-attr">material</span>=<span class="hljs-string">"color: red; src: #texture"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">a-entity</span>&gt;</span>
</code></pre>
<p>For more details, visit three.js’s <a target="_blank" href="https://threejs.org/docs/">documentation</a>.</p>
<ul>
<li><strong>Text Geometry</strong>: string and font value. (you should edit the text in this part, otherwise you’ll end up wishing happy birthday to my friend ??)</li>
<li><strong>Sound</strong>: defines the entity as a source of sound or audio.</li>
<li><strong>Autoplay</strong><em>:</em> describes whether to automatically play the sound once set.</li>
<li><strong>Loop</strong><em>:</em> describes whether to loop the sound once the sound finishes playing.</li>
<li><strong>On</strong>: an event for the entity to listen to before playing sound.</li>
</ul>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*YVFBn6QETdSUvbtRwLS5zw.png" alt="Image" width="800" height="119" loading="lazy"></p>
<h3 id="heading-resources">Resources:</h3>
<ul>
<li><a target="_blank" href="https://github.com/HackyRoot/A-Frame-Examples/tree/master/Happy_Birthday">Source code</a></li>
<li><a target="_blank" href="https://hackyroot.github.io/A-Frame-Examples/Happy_Birthday/demo.html">Demo</a></li>
</ul>
<p>Yes, you made it ? ? ?. You’ve created your fi<strong>rst AR application. I</strong>f you did everything correctly, you should now see something like the image below:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*zZc5N-LaMQm9iXPFOG6I5g.jpeg" alt="Image" width="720" height="720" loading="lazy">
<em>Finally, Happy Birthday Krupa!</em></p>
<p>If you like my work, please follow me on Medium @<a target="_blank" href="https://www.freecodecamp.org/news/how-to-wish-someone-happy-birthday-using-augmented-reality-3809776cb655/undefined">Pratik Parmar</a> or add me on <a target="_blank" href="https://www.linkedin.com/in/pratik-parmar-8853597a/">LinkedIn</a>. Feel free to reach out to me on Twitter: <a target="_blank" href="https://www.freecodecamp.org/news/how-to-wish-someone-happy-birthday-using-augmented-reality-3809776cb655/undefined">Pratik Parmar</a> or comment down below, in case you need any help.</p>
<p>Apart from Open-source contributions at Mozilla, I’m a Microsoft Student Partner and community member at GDG Baroda. I would like to thank <a target="_blank" href="https://www.freecodecamp.org/news/how-to-wish-someone-happy-birthday-using-augmented-reality-3809776cb655/undefined">Mozilla</a> and the <a target="_blank" href="https://twitter.com/MozillaIN">MozillaIN</a> community for providing me a chance and the resources to learn about VR/AR and Open Source.</p>
<p>This is me, <strong>Pratik Parmar</strong> signing off till the next tech adventure. Over and Out…</p>
<p>[ Edit: Thank you <a target="_blank" href="https://www.freecodecamp.org/news/how-to-wish-someone-happy-birthday-using-augmented-reality-3809776cb655/undefined">Vikranth Kanumuru</a> for drawing my attention that URL of source code was broken. It’s been updated now, please go ahead and try now. Keep coding, keep rocking ]</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Day 23: How to build an app with ARKit and Unity featuring Harry Potter PortKey ]]>
                </title>
                <description>
                    <![CDATA[ By Harini Janakiraman Augmented Reality. The future screams of it. The present is full of it: filters, games, and AR apps are popping up daily. Imagine a world where everywhere you look there are visual data aids to augment your comprehension. Now, I... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-build-an-app-with-arkit-and-unity-featuring-harry-potter-portkeys-7dd478b02735/</link>
                <guid isPermaLink="false">66c3501aa7aea9fc97bdfb88</guid>
                
                    <category>
                        <![CDATA[ Augmented Reality ]]>
                    </category>
                
                    <category>
                        <![CDATA[ iOS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Fri, 18 May 2018 15:22:37 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*QvstEQ294-nyHY7mJnViLA.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Harini Janakiraman</p>
<p>Augmented Reality. The future screams of it. The present is full of it: filters, games, and AR apps are popping up daily. Imagine a world where everywhere you look there are visual data aids to augment your comprehension.</p>
<p>Now, I would rather go all in on VR, especially after seeing Ready Player One. Oh how I wish I could be transported to Oasis right now! However, AR has more real world use cases from <a target="_blank" href="https://www.youtube.com/watch?v=UudV1VdFtuQ">furniture shopping</a> to building <a target="_blank" href="https://www.boeing.com/features/2018/01/augmented-reality-01-18.page">industrial factories</a> — the possibilities are endless.</p>
<blockquote>
<p>Augmented reality will be an essential part of your daily life. It will change everything.— Tim Cook</p>
</blockquote>
<p>Now, these claims have to hold the test of time (powerful use cases, realistic visuals, processing speed of hardware, and so on). Until then, Mobile AR is possibly the test bed for developers, before a headset or something similar is part of your everyday tech, along with a community of AR developers and a bevy apps.</p>
<p>Today we will be using Apple’s ARKit (which has made AR dev so much easier to explore) to get our feet wet and experiment with AR. We will build a basic superimposing object app in “additive” AR style to the camera view. To make things interesting, we will be placing Harry Potter PortKeys as our AR objects, which will transport you to fantasy land (this part is left to your imagination for now. I will be building a more comprehensive version of the app in the next part of this AR series, so stay tuned!).</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*QvstEQ294-nyHY7mJnViLA.jpeg" alt="Image" width="800" height="600" loading="lazy">
_Image [source](https://www.hp-lexicon.org/thing/portkey/" rel="noopener" target="<em>blank" title=")</em></p>
<h4 id="heading-what-is-a-portkey"><strong>What is a Portkey?</strong></h4>
<p><em>(For muggles, here is the definition <em>wink wink</em>):</em></p>
<p>A Portkey, in Harry Potter world, is an enchanted object which, when touched, will instantly transport a person from point A to point B. The object is usually a worthless piece of junk and is randomly placed around so as not to attract attention.</p>
<h3 id="heading-project-around-3-hours">Project (around 3 hours)</h3>
<p>In this tutorial, you’ll learn to build a Unity app with ARKit. We’ll add an augmented reality layer featuring Harry Potter PortKeys. Most of the time you spend will be on installations, so grab your coffee and get ready!</p>
<h3 id="heading-step-1-installation">Step 1: Installation</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*eynlod-95BXqY5K-GKsveg.png" alt="Image" width="800" height="594" loading="lazy"></p>
<p>In case you don’t have it already, download and install the latest version of <a target="_blank" href="https://developer.apple.com/develop/">Xcode</a> for your Mac and <a target="_blank" href="https://store.unity.com/">Unity</a>.</p>
<p>Install the personal free version of Unity, but make sure “iOS build Support” is checked.</p>
<p>You will also need a iOS developer account and iPhone, preferably, to take the AR app you build out for a spin.</p>
<h3 id="heading-step-2-setup-a-unity-project-with-arkit-plugin">Step 2: Setup a Unity project with ARKit plugin</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*XuIjqaU1t5tnuY95fiTWjg.png" alt="Image" width="800" height="456" loading="lazy"></p>
<p>Create a new 3D project called “ARHarryPotterApp”.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*PiyWLQ7TaZX6EyZJQ5PF9g.png" alt="Image" width="800" height="263" loading="lazy"></p>
<p>Once the project is created, from the “Asset Store” tab, download ARKit into your project.</p>
<h3 id="heading-step-3-create-the-ar-scene-and-add-assets">Step 3: Create the AR scene and add assets</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*-7JQn-VjoPPb9xSH5kqUpg.png" alt="Image" width="800" height="340" loading="lazy"></p>
<p>Let’s start off with an example scene that comes packaged with the downloaded ARKit asset. Navigate to the example scene on the left panel and double click open “UnityARKitScene”.</p>
<p>This will open up a basic cube asset placed in the “Scene” tab, which is your field of view. The “HitCube” asset here can easily to be replaced with any asset of your choice to create your own unique augmented reality scene.</p>
<p>There are several properties of each asset shown on the Inspector panel on the right, such as shadow/lighting/rending and so on. We will not go into detail about these properties here (but I’ll discuss them more in an upcoming post).</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*iBqQWR1_N-syc-BHTq3-XQ.png" alt="Image" width="634" height="534" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*rF93KoFWjh_24kC_IZMCdw.png" alt="Image" width="548" height="970" loading="lazy"></p>
<p>You need to watch out for two things here in the example. They’ll need to be repeated for any new asset added to the scene:</p>
<ol>
<li>On the inspector pane, Add “Unity AR Hit Test Example” component and attach it to a script.</li>
<li>Drag and drop “HitCubeParent” on the left panel onto the “Hit Transform” in the inspector panel on the right in the “Unity AR Hit Test Example” component.</li>
</ol>
<p>Make sure you complete these two steps for any new asset added to the scene, as this helps place the object in the horizontal plane.</p>
<p>For our app, we will place random Harry Potter PortKeys in the scene from the free “Halloween Pack” downloaded from the asset store.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*wE81t6xODD0Niv218kn5rA.png" alt="Image" width="612" height="648" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*STFbCHC77lsFps4WU0LygA.png" alt="Image" width="460" height="272" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*ZGis6PFJWX_Xss5iBCa7Vg.png" alt="Image" width="800" height="277" loading="lazy"></p>
<p>Place the assets that you fancy in the scene and make sure you add the components “Unity AR Hit Test Example” and “Hit Transform” to each of these assets as shown below.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*kNg_LCEkC3LkTtQHYTwRyw.png" alt="Image" width="436" height="358" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*SlEDCOP7yZpe6LcTu71R3A.png" alt="Image" width="420" height="340" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*7a3lEN3Yb5AJ4iaYq_Tt_Q.png" alt="Image" width="544" height="738" loading="lazy"></p>
<h3 id="heading-step-4-building-the-app">Step 4: Building the app</h3>
<p>Finally, now it’s time to build the app. Select File -&gt; Build Settings. Check “Unity ARKitScene” and select iOS platform, and then click “Switch Platform”. This will import assets and setup the stage.</p>
<p>You can then click player settings and check the inspector to make sure “Target device”, “Target min iOS version”, and “sdk” are all set up as you want through your system settings.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Q9LAj2ePvzMHVPQtDZging.png" alt="Image" width="800" height="762" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*_-IVH0I3OGDKM7Y3RUxggw.png" alt="Image" width="712" height="1288" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*nakY_b7Ovalv1O9Hp6fSwA.png" alt="Image" width="770" height="130" loading="lazy"></p>
<p>At this point, you are ready to “Build” the app and select your destination directory…this could take a while.</p>
<h3 id="heading-step-5-run-your-very-first-ar-app">Step 5: Run your very first AR app</h3>
<p>Once the build is complete, open the xcodeproj from the destination folder of the build. Connect your iPhone (with compatible iOS and xcode versions), sign the project to your Team (you will need an iOS dev account), and launch the app.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*LvM8Hk781OKOHtacf3xaHg.png" alt="Image" width="440" height="366" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*lWfin4S-HbYGkWg3Y7fLRg.png" alt="Image" width="800" height="209" loading="lazy"></p>
<p>Violà, your very first AR app is ready! Look around in the field of view, spot the Harry Potter PortKeys, and be transported away to a magical land ;)</p>
<p><em>If you enjoyed this, please clap <strong>? s</strong>o others can see it as well! Follow me on Twitter @<a target="_blank" href="https://twitter.com/harinilabs">H<strong>ariniLabs</strong></a> or M<a target="_blank" href="https://medium.com/@harinilabs"><strong>edium</strong></a> to get the latest updates on other stories or just to say Hi :)</em></p>
<p><em>PS: Sign up for my newsletter <a target="_blank" href="http://harinilabs.com/womenintech.html"><strong>here</strong></a> to be the first to get fresh new content and it’s filled with a dose of inspiration from the world of #<a target="_blank" href="http://harinilabs.com/womenintech.html"><strong>WomenInTech</strong></a> and yes men can signup too!</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How you can build your own VR headset for $100 ]]>
                </title>
                <description>
                    <![CDATA[ By Maxime Coutte My name is Maxime Peroumal. I’m 16 and I built my own VR headset with my best friends, Jonas Ceccon and Gabriel Combe. And it ended up costing us $100. I started programming when I was 13, thanks to my math teacher. Every Monday and ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/build-your-own-vr-headset-for-100-13d6f2b06385/</link>
                <guid isPermaLink="false">66c34680c577a44239cd7b2b</guid>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                    <category>
                        <![CDATA[ startup ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Sat, 20 Jan 2018 11:44:27 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*S7v2UiCN4mJV2Llk98tuCA.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Maxime Coutte</p>
<p>My name is Maxime Peroumal. I’m 16 and I built my own VR headset with my best friends, Jonas Ceccon and Gabriel Combe. And it ended up costing us $100.</p>
<p>I started programming when I was 13, thanks to my math teacher. Every Monday and Tuesday, my friends and I used to go to his classroom to learn and practice instead of having a meal at the cafeteria.</p>
<p>I spent one year building a very basic 8-bit OS from scratch and competing in robotics contests with my friends.</p>
<p>I then got interested in VR and with my friends we agreed that it would be really cool to create our own world in VR where we could spend time after school. But facing the fact that an Oculus was $700 at the time, we decided to build our own headset.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/RVxl0N2jdbFhf7gESlIURUc0QYT3dPctNRaK" alt="Image" width="800" height="404" loading="lazy">
<em>3D printed parts of the headset</em></p>
<h3 id="heading-making-vr-accessible-to-everyone">Making VR accessible to everyone?</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/F5NUB8PwLFyV9FIyG4IMAXNrju71nMZwbzmw" alt="Image" width="800" height="584" loading="lazy">
<em>DARROW; J. R. EYERMAN/THE LIFE PICTURE COLLECTION/GETTY IMAGES</em></p>
<p>It was because of an anime called <em>Sword Art Online</em> where the main character is in a virtual reality RPG that I fell in love with VR. I wanted to understand every aspect of it.</p>
<p>I bought the cheapest components I could and we started by learning the very basics of the physics and math behind VR (proper acceleration, antiderivatives, quaternions…). And then we re-invented VR. I wrote <a target="_blank" href="https://medium.freecodecamp.org/you-can-now-create-an-arduino-and-unity3d-interactive-experience-without-latency-2d7388dcc0c">WRMHL</a>, and then <a target="_blank" href="https://github.com/relativty/fastVR-sdk">FastVR</a> with Gabriel. Putting all of this together, we ended up with a $100 VR headset.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/r7lT43yWgmgvO8r8GMeFRz1PSeZQEp2ABZPw" alt="Image" width="640" height="480" loading="lazy"></p>
<h3 id="heading-a-fully-hackable-vr-headset-and-development-kit">A fully hackable VR headset and development kit</h3>
<p>To speed up VR development time, we built FastVR, an open-source SDK for developers that is easy to understand and customize. It works like this:</p>
<ul>
<li>The core headset computes the position of the headset in space;</li>
<li>The position is sent from the headset to <a target="_blank" href="https://medium.freecodecamp.org/you-can-now-create-an-arduino-and-unity3d-interactive-experience-without-latency-2d7388dcc0c"><strong>WRMHL</strong></a>, and part of the CPU’s power is dedicated to reading those messages;</li>
<li>Then <a target="_blank" href="https://github.com/relativty/fastVR-sdk"><strong>FastVR</strong></a> retrieves the data and uses them to render the VR game.</li>
</ul>
<p>Everything you need to build the headset has been open-sourced and can be hacked.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/-2xejLIdyQa9BFuKKVnrnMsBOGPEaXcBJCgW" alt="Image" width="800" height="505" loading="lazy"></p>
<h3 id="heading-why-open-source">Why open source?</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/lEfatukim7bZsKDWueEyw77FPkqm3WOiWXtR" alt="Image" width="800" height="673" loading="lazy"></p>
<p>I want to make VR mainstream. So I reached out to <a target="_blank" href="https://www.freecodecamp.org/news/build-your-own-vr-headset-for-100-13d6f2b06385/undefined">Oussama Ammar</a>, one of the co-founders at The Family. I talked to him about setting up a company and launching a Kickstarter.</p>
<p>But he convinced me that for now, it’s better to wait on starting a business, to keep meeting others who have the same goals, and to keep learning.</p>
<p>We took a trip to Silicon Valley and Oussama introduced me to the chief architect at Oculus, Atman Brinstock. And they gave me some precious advice: make all of this open source.</p>
<h3 id="heading-the-next-step">The Next Step?</h3>
<p>There are still a lot of technical points that we want to improve.</p>
<p>Our big focus right now is on a standalone VR headset, which we already have as a simple version, and cheaper 3D tracking.</p>
<p>All of this will be released soon.</p>
<h3 id="heading-how-do-i-get-started">How do I get started?</h3>
<p>If you want to learn more about the technical side and build your headset, just follow the guide by <a target="_blank" href="https://github.com/relativty/Relativ"><strong>clicking here</strong></a>. Star the repo if you liked it ⭐️</p>
<p>I would love to hear about what you’ve experienced while building the headset, or if you need any help or have any questions. Ping me at <a target="_blank" href="mailto:maxime@relativty.com"><strong>maxime@relativty.com</strong></a> or <a target="_blank" href="https://twitter.com/MaximePeroumal">@MaximePeroumal</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Hello, Kitty! How to make an augmented reality app using ARKit and Unity. ]]>
                </title>
                <description>
                    <![CDATA[ By Francesco Pallotta We’ve all heard of Augmented Reality (AR), but at this point there are few opportunities to see this technology in action. We know that AR allows us to see virtual elements fused with the real world around us. For example, with ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-make-an-augmented-reality-app-using-arkit-and-unity-ba16515a32fa/</link>
                <guid isPermaLink="false">66c3534fbf3e128ced96e93d</guid>
                
                    <category>
                        <![CDATA[ Apple ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 07 Nov 2017 16:57:37 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*sybYCmTLY_r_rmRrim2AgA.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Francesco Pallotta</p>
<p>We’ve all heard of Augmented Reality (AR), but at this point there are few opportunities to see this technology in action. We know that AR allows us to see virtual elements fused with the real world around us. For example, with AR we can see a virtual sofa in our room. Apple now lets us see new items added to the real world using the cameras in our phones.</p>
<p>Apple introduced ARKit, the framework for creating experiences in Augmented Reality, in iOS11. ARKit uses Visual Inertial Odometry (VIO) to map the surrounding environment. VIO blends the data provided by the camera sensor with Core Motion data. Core Motion data are collected through the accelerometer, gyroscope, pedometer, magnetometer, and barometer.</p>
<p>All these inputs allow the device to understand its movement within a room. With ARKit, the iPhone and iPad can analyze a scene and find the horizontal planes of a room. ARKit can locate tables and floors, and can trace and position objects at precise points.</p>
<p>ARKit also uses the room sensor to measure ambient light and apply the correct amount of light to virtual objects. ARKit is compatible with Apple’s A9, A10, and A11 processors. To develop with ARKit you can use Metal, Scenekit, and third-party tools such as Unity and Unreal Engine.</p>
<p>Let’s now see how to create an AR application using ARKit.</p>
<h3 id="heading-development-environment">Development environment</h3>
<p>To get started we need:</p>
<ul>
<li>The release version of <a target="_blank" href="https://unity3d.com/get-unity/download?thank-you=update&amp;download_nid=47505&amp;os=Mac">Unity 2017.1.0</a> or later. ARKit is also compatible with the <a target="_blank" href="http://beta.unity3d.com/download/c92f68c59a22/public_download.html">Experimental VR build</a> used for macOS VR content creation and Unity 5.x versions of <a target="_blank" href="https://unity3d.com/get-unity/download?thank-you=update&amp;download_nid=47271&amp;os=Mac">Unity 5.6.2</a> or later.</li>
<li>iOS 11 or later</li>
<li>XCode 9 beta or later, with iOS SDK that includes ARKit Framework</li>
<li>iOS that supports ARKit (iPhone 6S or later, iPad 2017 or later)</li>
</ul>
<h3 id="heading-procedure">Procedure</h3>
<p>Start Unity. The project window will open.</p>
<p>At this point, we have to create a new, empty project:</p>
<ol>
<li>In the window, click on <strong>New</strong> for a new project.</li>
<li>Write “ARKitty” in the <strong>Project name</strong> text box.</li>
<li>On the same window, press the <strong>Create project</strong> button.</li>
</ol>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*bA4I0lnMGQeNJOJB3l3sMQ.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>We have created our AR project!</p>
<p>Open the <strong>Asset Store</strong> by clicking on that tab.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*M27Cvn-q9LT5ihs3Ue4tDA.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>Next, search within the store: write “ARKit” in the text box and click on the magnifying glass icon.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Tx44H1h35r166e552nzLKw.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>Scroll through the Asset Store window until you find “Unity ARKit Plugin.” This is the plugin that integrates ARKit within Unity.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*uk87mkA8rHUP_Lcq.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>Click on Unity ARKit Plugin and scroll down to the <strong>import</strong> button and press it. Press import again to import the same project, and import once more on the plugin element window.</p>
<p>Now go back to the Asset store, press the <strong>Home</strong> symbol, and write “Cute Kitten” in the search text field. Press the search symbol and import the Cute Kitten model as you just did with the ARKit plug-in.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*ghwgXn4-isL8Eqd8.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>Scroll with the cursor to the import button and press it. Press import again on the plug-in element window.</p>
<p>Search the “UnityARKitScene” scene in the UnityARKitScene folder under “Asset/Examples.”</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*ZMRD69z37L17Kk7inyHEdQ.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>Drag the scene “UnityARKitScene” under Hierarchy.</p>
<p>Go to the assets and find Kitten.</p>
<p>Go under <strong>Model</strong> and drag “kitten” under “Hierarchy-&gt; HitCubeParent”.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*_4Zd0hg2Zun7zyoN.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>Remove HitCube and RandomCube from the scene by right-clicking and then hitting <strong>Delete</strong>. Select GeneratePlanes, ARKitControl, and click on the inspector and uncheck <strong>Tag</strong>.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*9h5UqsdDgKxbRFKJ.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>Go to <strong>Main Camera</strong> under CameraParent and, in Inspector, set <strong>Near</strong> to 0.01.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*Ms5CohAnYnk_b5Ce.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>Click the <strong>Scene</strong> tab. Click on the kitten in <strong>Hierarchy</strong> to select it. Now we see our kitten in the Scene view in three-dimensional space. Go to the asset “UnityARKitPlugin-&gt; Plugins-&gt; Helpers” and take the UnityARHitTestExample.cs script. Drag the script into the kitten inspector.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*3ZKr9R10-rGC8vTe.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>Drag the kitten in the <strong>Hit transform</strong> field of the “UnityARHitTestExample.cs” script.</p>
<p>Save the scene by selecting “File-&gt; Save Scenes” and call it “ARKittyTest”.</p>
<p>Finished! It’s time to try the new application in Augmented Reality.</p>
<p>Go to the <strong>File</strong> menu and choose <strong>Build Settings</strong>. In the window that opens, under <strong>Platform</strong>, choose IOS.</p>
<p>Press the <strong>Player Settings</strong> button and scroll down until you find <strong>Bundle Identifier</strong>. Here, write an identifier of the type: “com.  .arkittytest”.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*FslQzB0A7GIYuC9G.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>Click the Build button in the Build Settings window and save the project to iOS as “ARKittyTest”.</p>
<p>At the end of the process, find the XCode project in the Finder named “Unity-iPhone.xcodeproj”. Double-click to open the project with XCode. In XCode, click Unity-iPhone and go to <strong>General</strong>. In the identity field, write the same Bundle Identifier inserted in Unity’s Build Settings.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*eA4vOjDQ05994iL9pWHceA.png" alt="Image" width="800" height="452" loading="lazy"></p>
<p>Under <strong>Signing</strong> in the <strong>Team</strong> pull-down menu, select the registered team name.</p>
<p>Select the device (iPhone / iPad) before connecting to the Mac as the target device.</p>
<p>Press the XCode arrow key to “Build and Run the Current Scheme.”</p>
<p>In the end, when we frame a surface near us and tap on the phone screen, we can see our Kitten live in front of us.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*g9WcAK0FTjQiM1F0.png" alt="Image" width="608" height="1080" loading="lazy"></p>
<p>Mission accomplished! The following video shows the complete procedure.</p>
<p><strong>Francesco Pallotta</strong> is a senior software engineer expert in software design and development. He works in the field of Space and Defense and deals with application development techniques for virtual reality and augmented reality<em>.</em></p>
<p>Do you want to read more about Virtual Reality, Augmented Reality and Mixed Reality? <strong>Follow me</strong> on <a target="_blank" href="https://medium.com/@pallotta.francesco">Medium</a> and <a target="_blank" href="https://twitter.com/FranPallotta">Twitter</a>.</p>
<p>Did you enjoy this post? <strong>Recommend it</strong>, by give it some claps. Thanks!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Here’s how you can make a 360 VR app in 10 minutes with Unity ]]>
                </title>
                <description>
                    <![CDATA[ By Adriana Vecchioli Virtual Reality (VR) is exciting. It’s also the New Frontier of app development. VR is poised to give birth to new forms of storytelling and emotionally powerful experiences. Yet making VR is perceived as intimidating: it’s expen... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-make-a-360-vr-app-with-unity-51cbe41ad8f1/</link>
                <guid isPermaLink="false">66c3532fc2631756f9f063e4</guid>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ unity ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 23 May 2017 03:54:34 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*US4qmns1r1F0BKMxBpeYcg.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Adriana Vecchioli</p>
<p>Virtual Reality (VR) is exciting. It’s also the New Frontier of app development.</p>
<p>VR is poised to give birth to new forms of storytelling and emotionally powerful experiences. Yet making VR is perceived as intimidating: it’s expensive and requires both special hardware and skills.</p>
<p>But that’s changing, as intuitive tools and affordable hardware are making VR development accessible. This tutorial will show you how to build a 360 video app on Android and Google Cardboard in just a few minutes. And barely any coding required ;)</p>
<p>VR development should not be a barrier to bringing your ideas to life. Let’s get started:</p>
<h3 id="heading-what-you-need"><strong>What you need</strong></h3>
<p>Here’s our grocery list:</p>
<p>? An A<a target="_blank" href="https://www.amazon.com/gp/product/B01MU9RKP2/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B01MU9RKP2&amp;linkCode=as2&amp;tag=vrtiginous-20&amp;linkId=445c8c7a351006a6f5239b3667c29fc3"><strong>ndroid phone</strong></a> <strong>w</strong>ith a gyroscope to sense head movements, running on KitKat or newer OS.</p>
<p>? A C<strong>ardboard headset.</strong> If you don’t own one, you can find many on Amazon for less than 10 dollars. T<a target="_blank" href="https://www.amazon.com/gp/product/B06X6B9YVG/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B06X6B9YVG&amp;linkCode=as2&amp;tag=vrtiginous-20&amp;linkId=86c04570070ba858568f715166805857">his one</a> is my favorite.</p>
<p>? U<a target="_blank" href="https://unity3d.com/fr/get-unity/download"><strong>nity3D,</strong></a> a cross-platform game engine, that you need to install on your computer, version 5.6 or newer. We will use this software to build our whole project.</p>
<p>? The <strong>G<a target="_blank" href="https://developers.google.com/vr/unity/download">oogleVR SDK for Unity,</a></strong> which you can download beforehand.</p>
<p>? A 3<strong>60 video.</strong> Shoot one with a 360 camera (h<a target="_blank" href="https://www.amazon.com/gp/product/B06Y5YTQGV/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B06Y5YTQGV&amp;linkCode=as2&amp;tag=vrtiginous-20&amp;linkId=0660c5b49b36c9b42e46c759c7629008">ere’s one you can plug into your phone)</a> or find one online.</p>
<h3 id="heading-how-are-we-building-this-app"><strong>How are we building this app?</strong></h3>
<p>Unlike regular video that has a rectangular frame, 360 video has the shape of a sphere. So, we first need to create a spherical screen to project our 360 video onto. The player (or viewer) will be located inside this sphere and will be able to watch the video in any direction.</p>
<p>The steps below should make you feel empowered to make your own changes, by explaining how it all works under the hood. For step-by-step instructions, refer to the video</p>
<h3 id="heading-step-1-build-a-sphere"><strong>Step 1: Build a Sphere ?</strong></h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*jvbDMcNGQU9l9lnNSFij5w.png" alt="Image" width="800" height="500" loading="lazy"></p>
<p>First, let’s open a new Unity Project if you are starting from scratch (or a new Scene if you want to integrate the 360 video player in an existing project.) Think of a Scene as one level of a video game, and a Project as a full game.</p>
<p>Afterwards, add a sphere object in the Scene, placed at its center (<em>Position = 0, 0, 0</em>), with a radius of 50 (<em>Scale = 50, 50, 50</em>). The Camera’s position should also be set to 0, 0, 0. The Camera is the player/viewer’s eyes so we want it at the center of the Sphere. Placing it elsewhere would make the video look distorted.</p>
<p>Once the Camera is placed inside the Sphere, the latter is no longer visible in the Scene. Don’t worry, there is an explanation for that! Indeed, most game engines do not, by default, render by default the inner side of 3D objects. This is because we rarely need to see them, it would be a waste of resource to render them. We’ll fix that next.</p>
<h3 id="heading-step-2-flip-the-spheres-normals"><strong>Step 2: Flip the Sphere’s Normals ?</strong></h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*NXKLWLDirFigK2Zx9L8IoQ.png" alt="Image" width="800" height="600" loading="lazy"></p>
<p>In our case, we do need to see our Sphere from the inside. That’s the whole point of the app, so we are going to turn it inside-out.</p>
<p>In Unity, spheres are not actually spheres (what? We’ve been lied to all along!), they are polygons made with thousands of teeny, tiny facets. The external sides of the facets are visible, but not the internal ones. For that reason, we are going to make a program to flip these little facets like pancakes.</p>
<p>In 3D geometry, we call this transformation « reversing normals » or « flipping normals ».</p>
<p>We’ll use a program called a <em>Shader</em>, that we’ll apply to the <em>Material</em> of the Sphere. Materials control the appearance of objects in Unity. Shaders are small scripts that calculate the color of each pixel rendered, based on lighting and information pulled from their Materials.</p>
<p>Hence create a new Material for the Sphere, then a new Shader applied to this Material. We need to write custom code for the Shader… but have no fear, you can copy-paste the code below:</p>
<p>This little Shader is going to turn each pixel of the sphere inside out. Now our Sphere appears like a big white ball, viewed from inside, within our Scene. The next step is to turn this white sphere into a video player.</p>
<h3 id="heading-step-3-project-your-360-video-inside-the-sphere">Step 3: Project your 360 video inside the Sphere ?</h3>
<p>Here you need to have a 360 mp4 video on hand. Import it in the project, then drag it onto the Sphere. And that’s when the magic happens: a ‘Video Player’ component appears and boom, the video is ready to play.</p>
<p>You can play with the settings like loops and audio. It also supports streaming!</p>
<h3 id="heading-step-4-set-up-google-cardboard">Step 4: Set up Google Cardboard ?</h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*nLFO9-K8swJjfRYTByT15g.png" alt="Image" width="800" height="451" loading="lazy"></p>
<p>In this step, we’ll make the experience <em>really</em> feel immersive. That’s why we want to view it in a VR headset, here a Google Cardboard.</p>
<p>We are going to create a “stereoscopic” view (the screen will be split in two, with some fisheye effects on both sides — one side for each eye), using the GoogleVR SDK. The fisheye effect on each eye, combined with the distortion of the Cardboard’s plastic lenses, is what gives you the illusion of depth and immersion.</p>
<p>To add the <a target="_blank" href="https://developers.google.com/vr/unity/download">GoogleVR SDK</a> to our project, download and import the plugin, then we’ll adjust a bunch of Android settings:</p>
<ul>
<li>Go to _top bar menu &gt; File &gt; Build Se_ttings. Add your open scene if it isn’t already added, then select Android in the list of supported platforms.</li>
<li>Click on <em>Switch Platform</em>. It should take a little while the first time you make the switch.</li>
<li>Click on <em>Player Settings</em>. Components appear in the Instructor panel.</li>
</ul>
<p>In the Player Settings’ Instructor, under the ‘Other Settings’ section:</p>
<ul>
<li>Check <em>Virtual Reality Supported</em>. Under <em>Virtual Reality SDKs</em>, select the + icon, then select <em>Cardboard</em> to add it to the list.</li>
<li>Enter a package name into the <em>Bundle Identifier</em> field (for example, <em>com.yourdomain.demo360</em>). It has to be unique and is used to distinguish our app from others in the Google Play store.</li>
<li>Set the <em>Minimum API Level</em> drop-down menu to “<em>Android 4.4 ‘Kit Kat’ (API level 19)</em>”.</li>
</ul>
<p>Afterwards, take the ‘<em>GvrViewerMain</em>’ element from the <em>GoogleVR\Prefabs</em> folder in the Project Browser, and drag it into the scene. In the Inspector, give it the same <em>Position</em> as the center of the Sphere — (<em>0, 0, 0</em>).</p>
<p>The <em>GvrViewerMain</em> prefab controls all VR Mode settings, such as adapting the screen to the Cardboard’s lenses. It also communicates with your phone’s gyroscope to track your head movements. When you turn your head, the Camera and what you see also turn inside the 360 video player.</p>
<p>Now you can look in all directions when the video is on and the screen is split in two, to accommodate both lenses of the Cardboard.</p>
<h3 id="heading-step-5-run-the-app-on-android"><strong>Step 5: Run the app on Android ?</strong></h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*6ZeCWw1dEKNNT7iLtXfndQ.png" alt="Image" width="800" height="400" loading="lazy"></p>
<p>For our final step, we’ll run the app on an Android phone and share it with friends!</p>
<p>There are two ways to do that:</p>
<ul>
<li>Go back to _File &gt; Build Setti_ngs. You can plug an Android phone with a USB cable to your computer and click <em>on Build &amp;</em> Run. This installs the app straight to your phone.</li>
<li>The other option is to click on <em>Build only</em>. This does not install it on a phone, but instead generates an APK file. You can share the APK by email with anyone who wants to try the masterpiece you just built. They have to double-tap on the APK attachment to install it on their phones.</li>
</ul>
<p>During the build process, you may be asked to select the root Android SDK folder. If that’s the case, download the <a target="_blank" href="https://developer.android.com/studio/index.html#downloads">Android SDK</a> then select its folder location.</p>
<p>Launch the app, pop your phone into a Cardboard headset, you’re good to go! You can replace the video with anything in 360 format and experience VR 360 immersion at home.</p>
<h3 id="heading-going-further"><strong>Going further</strong></h3>
<p>Congratulations, you made a <em>360</em> video app, and you are one step away from creating a <em>VR</em> video app! While the terms are often used alike, 360 and VR define two different experiences:</p>
<ul>
<li>360 video is recorded from all angles, with a special camera or an assembly of multiple ones. The user can watch in any direction desired, but there’s no interactivity to the experience.</li>
<li>VR usually refers to a computer-generated environment in which the user is immersed. It is an interactive experience: the player can move around and control objects, in addition to looking in all directions.</li>
</ul>
<p>Your new app can serve as a starting point to build a richer VR experience. Unity has plenty of features you can leverage, such as adding 3D elements or cool particle effects ✨ to overlay and enhance your video, or throwing in some interactive elements.</p>
<p>You can also place a full 3D environment inside the 360 video player and use the latter as a skybox. The user can navigate in the scenery, using this nifty <a target="_blank" href="https://github.com/JuppOtto/Google-Cardboard/blob/master/Autowalk.cs">walking script</a>.</p>
<p>Let your imagination run wild and show me your creations: tweet me <a target="_blank" href="http://twitter.com/adrianavecc">@AdrianaVecc</a> or leave a comment.</p>
<p>Crafting beautiful VR stories is hard. Building them shouldn’t be.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*9iyrdtDJfikdkJBKpmWzPQ.png" alt="Image" width="425" height="179" loading="lazy"></p>
<p><strong><em>If you liked this article, please press the</em> ? <em>below so other people will see it.</em></strong></p>
<p><em>Adriana is an artist &amp; product designer who makes VR experiences that build empathy. If you want to bring your VR ideas to life, shoot us an email: hello@vrtiginous.com ?</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 8 Ways AI Makes Virtual & Augmented Reality Even More Real ]]>
                </title>
                <description>
                    <![CDATA[ By Mariya Yao This piece was written & edited in collaboration with TOPBOTS writer Nick Hall. Regular reality is being disrupted by virtual and augmented reality (VR/AR). The biggest names in tech are battling to power the next generation of entertai... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/8-ways-ai-makes-virtual-augmented-reality-even-more-real-25037707cfa1/</link>
                <guid isPermaLink="false">66c341ab160da468ed76f0fc</guid>
                
                    <category>
                        <![CDATA[ Artificial Intelligence ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Augmented Reality ]]>
                    </category>
                
                    <category>
                        <![CDATA[ social media ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Sat, 13 May 2017 03:57:55 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*h-6Gme8XSErFIHnyag174A.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Mariya Yao</p>
<p><em>This piece was written &amp; edited in collaboration with TOPBOTS writer <a target="_blank" href="http://www.topbots.com/staff">Nick Hall</a>.</em></p>
<p>Regular reality is being disrupted by virtual and augmented reality (VR/AR). The biggest names in tech are battling to power the next generation of entertainment, education, and communication.</p>
<p>Facebook acquired Oculus to make next generation social networking virtual. Apple CEO Tim Cook <a target="_blank" href="http://fortune.com/2017/02/13/apple-tim-cook-ar-augmented-reality-iphone/">claims</a> augmented reality will be “as big as the iPhone.” Microsoft’s HoloLens, Google’s Tango, and Intel’s Project Alloy are just a few of the myriad of developments underway to make VR/AR devices as ubiquitous as computers and phones.</p>
<p>Another major trend, artificial intelligence (AI), boosts the technical complexity behind compelling VR/AR experiences. Despite the hype, the progress that AI drives in VR/AR are by no means artificial.</p>
<p>Here are 8 specific ways that AI makes our virtual realities even more real.</p>
<h3 id="heading-1-physical-environment-mapping">1. Physical environment mapping</h3>
<p>Occipital’s Bridge is one example of how AI can help to map entire environments in real time and blend the results with a virtual world. The external ‘<a target="_blank" href="https://www.youtube.com/watch?v=Iys8yo0sjYg">structure sensor</a>’ on Bridge feeds into an AI system and allows a ‘mixed reality’ experience entirely in the headset. This works thanks to the magic of instant depth perception and precise positioning with six degrees of freedom. The result is that you get a fully immersive VR experience with real world structures.</p>
<p>The fledgling system can already produce CAD-quality models of your house, so you can try furniture and decorations before you buy. This mixed version of reality could provide <a target="_blank" href="http://gizmodo.com/googles-project-tango-will-power-augmented-reality-shop-1594886458">precise AR shopping experiences</a> in local retail stores. The company is also inviting developers to build new apps and is taking an open-source approach.</p>
<p>Google Tango is arguably more advanced and already in the wild on the Lenovo Phab 2. So far, most of the apps targeted at the phone have been <a target="_blank" href="https://get.google.com/tango/apps/">relatively simple games</a>. We expect that to change rapidly.</p>
<h3 id="heading-2-precise-depth-perception">2. Precise depth perception</h3>
<p>It’s one thing to map the walls of a building, it’s quite another to map the constantly shifting internal organs of a patient on the operating table. We’re closing in on a world where a surgeon will <a target="_blank" href="http://www.livescience.com/23233-improving-our-depth-perception-in-augmented-reality.html">see your major organs through a headset</a>, with a modern-day slant on X-ray vision. Indeed, we have the first concepts from the likes of mbits imaging and the ‘<a target="_blank" href="https://www.youtube.com/watch?v=T4mboj-GbEA">Surgery Pad</a>’.</p>
<p>Looking further into the future, <a target="_blank" href="http://spectrum.ieee.org/the-human-os/robotics/medical-robots/autonomous-robot-surgeon-bests-human-surgeons-in-world-first">surgical robots will take over routine procedures</a>. An essential part of these devices will be automatic depth perception and instant, accurate adjustments. Even regulated breathing causes slight shifts in the patient’s position, so only the precision of AI can cope with the vast number of calculations that will make the difference between a clean cut and a severed artery.</p>
<h3 id="heading-3-selective-hazard-warnings">3. Selective hazard warnings</h3>
<p>Soldiers in the field make split-second decisions under heavy fire that can separate life from death. At the same time, they are bombarded with information from eyes in the sky and the crew back at base.</p>
<p>Artificial intelligence has the power to make complex decisions for them and has <a target="_blank" href="https://www.army.mil/article/148549/Army_applies_computer_automation_to_operational_decision_making">already been employed</a> in military strategies. An AR system powered with AI can run millions of simulations, compare current situations to archives, and determine the best course of action before any bullets are fired. Soldiers of the future will have a video game-style field of view with all the assists turned on.</p>
<p>AR can also highlight clear and present danger, which allows the soldiers on the ground to make informed choices and deal with the threats in order. <a target="_blank" href="https://www.youtube.com/watch?v=UL-eao0_GLc">ARC4</a> is a small step towards this future vision. A system connected to the might of military drones, satellites and more, the battleground of the future will be a much more high-tech environment.</p>
<p>The military technology will trickle down to civilian use cases. The same AR system that helps Marines win the day can save cyclists from oncoming cars. Garmin’s <a target="_blank" href="https://www.digitaltrends.com/wearables/garmin-varia-vision-news/">radar-equipped Varia Vision</a> is an idea of what’s to come, but future models will see around corners and give you advance warning before you’re even in danger.</p>
<h3 id="heading-4-customized-simulation-amp-training">4. Customized simulation &amp; training</h3>
<p>The combination of artificial intelligence and VR/AR is a powerful tool for educating the next generation of surgeons, pilots and <a target="_blank" href="https://www.pearson.com/content/dam/corporate/global/pearson-dot-com/files/innovation/Intelligence-Unleashed-Publication.pdf">even youngsters in school</a>.</p>
<p>Doctors already get countless hours of <a target="_blank" href="https://mic.com/articles/132148/virtual-reality-is-giving-doctors-a-chance-to-practice-life-saving-surgery-on-infants#.LtpDTQrnw">virtual surgery time</a> so they can encounter every complication before they hit the wards. Emergency medical teams (EMTs) deal with car crashes and natural disasters, firemen navigate the worst blazes, and pilots experience how engines go down — all in virtual worlds without a single life at stake.</p>
<p>AI can improve simulated training by incorporating more data points, comparing and contrasting different techniques, and personalizing the education. The system will act more like a customizable trainer than a static simulator. Children could get their own personal tour guide through ancient Rome and the Amazon jungle. They’ll get to ask questions, see the world in action, and experience an interactive education that books just cannot deliver.</p>
<p>With a simple set of sensors and a headset that monitors every move, we should be able to learn everything from the perfect golf swing to the Chinese language. Virtually anybody should be able to access world class coaching at any academic or sporting discipline. The combination of AI with VR/AR has the potential to <a target="_blank" href="https://techcrunch.com/2016/12/16/what-the-coming-educational-vr-revolution-teaches-us-about-the-techs-future/">democratize education</a> and give every student a chance to learn.</p>
<h3 id="heading-5-truly-social-media">5. Truly Social Media</h3>
<p>One day we will look back and laugh at Facebook’s measly chat window as we <a target="_blank" href="https://www.youtube.com/watch?v=s2U9lXEnHns">relax over a virtual coffee</a> with a friend who is halfway around the world. In the near future, we can meet our friends in both real or virtual environments, from a pool hall to the Taj Mahal, and interact as if they’re in the same room. The processing power required for this is mind-boggling, but also within our grasp thanks to AI.</p>
<p>Facebook, which invested heavily in VR with the <a target="_blank" href="https://www.cnet.com/news/facebook-mark-zuckerberg-shows-off-live-vr-virtual-reality-chat-with-oculus-rift/">purchase of Oculus Rift</a>, is already using generative models from deep learning to automatically design <a target="_blank" href="http://www.gizmodo.co.uk/2017/04/facebook-researchers-used-celebrity-bitmoji-to-help-create-vr-avatars/">believable character avatars</a> based on your photos.</p>
<h3 id="heading-6-character-modeling">6. Character Modeling</h3>
<p>Right now, we employ two methods for animating characters: motion capture and manual CG work. Handcrafted animations are laborious, while motion capture is limited to the physical capabilities of the actor being modeled. change thanks to AI methods, such as <a target="_blank" href="http://www.topbots.com/bringing-ai-robot-characters-avatars-life/">learning by demonstration</a>, <a target="_blank" href="http://www.topbots.com/humans-need-not-apply-mit-teaches-robots-train/">self-teaching AI</a>, and <a target="_blank" href="http://theorangeduck.com/media/uploads/other_stuff/phasefunction.pdf">phase-functioned neural networks</a>.</p>
<p>Motion capture involves painstakingly recording a vast array of movements that are essentially repeated over and over. New systems like phase-functioned neural networks, developed by the University of Edinburgh, uses machine learning to combine a vast library of stored movements and map them onto new characters.</p>
<p>The team applied the neural network to a character it called The Orange Duck and the results are remarkable.</p>
<p>This will open up a new world of realistic animation in video games, cartoons, and Virtual Reality environments. A relatively simple session of motion capture can turn into a full range of movement with the help of a neural network. It means realistic characters can, theoretically, be created on the fly.</p>
<p>Not everyone is happy with AI-driven animation. Studio Ghibli founder Hayao Miyazaki <a target="_blank" href="https://www.youtube.com/watch?v=ngZ0K3lWKRc">notoriously reflected</a> that AI represented the “end of times” when shown automated character models from Japanese company DWANGO. Perhaps you shouldn’t be surprised it upsets a man who has spent his entire life drawing with AI that replaces drawing.</p>
<h3 id="heading-7-conversational-non-player-characters-npcs">7. Conversational Non-Player Characters (NPCs)</h3>
<p>Auxiliary, non-playable characters (NPCs) in video games are <a target="_blank" href="http://www.gamesradar.com/10-absurd-things-npcs-do-all-time/">notorious for behaving in odd ways</a>. They act nonchalant when crimes are committed in front of them or when strangers barge into their homes. Their conversation is stilted and they just don’t adapt to circumstances.</p>
<p>Even in conversation-driven games like Mass Effect, NPCs are an afterthought. The console only has so much processing power to offer, so NPCs often become part of the background. But with AI to power their realism, NPCs could adapt to events and even participate in a proper conversation. Game consoles, especially for VR, could <a target="_blank" href="https://www.extremetech.com/extreme/236362-how-ibms-neuromorphic-brain-chips-will-begin-the-next-era-in-computing">carry neuromorphic chips that send AI-related tasks to cloud servers</a>, so even the sideline characters can evolve based on the input of other players.</p>
<h3 id="heading-8-rendering-optimization">8. Rendering Optimization</h3>
<p>One of the biggest challenges in VR / AR is rendering realistic graphics with today’s consumer hardware. Too much complexity leads to <a target="_blank" href="https://medium.com/visbit/why-do-all-the-360-vr-videos-today-look-so-pixelated-b1ab3cba6f95">pixelated images and lag</a>. This leads to headaches for VR headset wearers. The result is that most VR experiences are simplistic and lacking in convincing detail.</p>
<p>The application of AI to game rendering is so obvious that Nvidia even offers <a target="_blank" href="https://developer.nvidia.com/deep-learning-games">formal courses</a> teaching 3D and graphics artists how to apply deep learning techniques to tasks like super resolution, photo to texture mapping, and texture multiplication. In VR, machine learning can be used for selective rendering, where only the portions of a scene where a viewer is looking are dynamically generated in full visual fidelity, saving on computing costs. Images can also be <a target="_blank" href="http://www.pcworld.com/article/3111938/software/google-is-using-ai-to-compress-images-better-than-jpeg.html">more intelligently compressed</a> with AI techniques, enabling faster transmission over wireless connections without a discernible loss in quality.</p>
<p>High cost barriers and lagging hardware have caused VR/AR to become overhyped in the past years. By using AI to overcome technical barriers and improve realism, you can now examine the intricate and alien landscape of Mars to <a target="_blank" href="https://community.plm.automation.siemens.com/t5/NX-Design-Blog/Rendering-VR-and-AI-Oh-my-The-Inside-Scoop-on-NVIDIA-GTC-2016/ba-p/342428">within 30 cm of the true topology</a>. Given that NASA’s acceptance rate for astronauts is less than 0.08%, VR — powered by AI — is the closest you’ll probably get to a space adventure.</p>
<p>_Love what you read? You can find more stories like this one at <a target="_blank" href="http://www.topbots.com/8-ways-ai-enables-realistic-virtual-augmented-reality-vr-ar/?utm_medium=article&amp;utm_source=medium&amp;utm_campaign=realistic-virtual">www.topbots.com</a>. Or join the <a target="_blank" href="http://www.topbots.com/bot-news-pro-newsletter/?utm_medium=article&amp;utm_source=medium&amp;utm_campaign=newsletter">TOPBOTS</a> community to get the best bot news &amp; exclusive industry content._</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Get a front-row seat in Harvard’s largest class, thanks to virtual reality ]]>
                </title>
                <description>
                    <![CDATA[ By Dhawal Shah With an acceptance rate of 6%, Harvard University is one of toughest universities to get into. But now, with the magic of virtual reality, you can pretend to be a student in Harvard’s largest on-campus class. You sit front and center, ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/virtual-reality-harvard-cs50-16970919ebb2/</link>
                <guid isPermaLink="false">66d45ed38812486a37369cbf</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Life lessons ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Fri, 23 Sep 2016 18:03:07 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/0*LxaI9UMALMvSgt4j.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Dhawal Shah</p>
<p>With an acceptance rate of 6%, Harvard University is one of toughest universities to get into.</p>
<p>But now, with the magic of virtual reality, you can pretend to be a student in Harvard’s largest on-campus class. You sit front and center, able to look around at the students in the auditorium around you.</p>
<h3 id="heading-this-is-cs50"><strong>This is CS50</strong></h3>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/FsYdgKO4AQU" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p>CS50 is Harvard University’s “introduction to the intellectual enterprises of computer science and the art of programming.” The same class is also <a target="_blank" href="https://www.class-central.com/mooc/442/edx-cs50x-introduction-to-computer-science">offered on edX</a> (know as CS50x), where it’s edX’s largest class. Since the course debuted in 2012, more than a million students have enrolled.</p>
<p>It’s also one of Class Central’s <a target="_blank" href="https://www.class-central.com/report/top-moocs/">Top 50 MOOC of All Time</a>. And one of our users wrote an in-depth <a target="_blank" href="https://www.class-central.com/report/review-david-malan-cs50-introduction-to-cs/">review of CS50x here</a>.</p>
<p>The course is taught every fall by David Malan. It sometimes features guest lectures from tech luminaries like Facebook founder Mark Zuckerberg, and the previous CEO of Microsoft Steve Ballmer. Currently this class is also being taught in parallel at Yale.</p>
<p>Every time the course is taught, the lectures are recorded and <a target="_blank" href="https://cs50.harvard.edu/">put online</a>. In previous years they were also streamed live directly from Harvard’s Sanders Theatre.</p>
<h3 id="heading-this-is-cs50-vr"><strong>This is CS50 VR</strong></h3>
<p><img src="https://cdn-media-1.freecodecamp.org/images/0*ZeQi9TsX7wu2r0Cf.jpg" alt="Image" width="800" height="533" loading="lazy">
<em>Nokia Ozo Virtual Reality camera</em></p>
<p>But this year, the CS50 team is trying something different. They had previously <a target="_blank" href="https://www.class-central.com/report/harvard-cs50-virtual-reality/">announced</a> that the class would be shot in virtual reality.</p>
<p>The lectures are being shot in stereoscopic 360º on <a target="_blank" href="https://ozo.nokia.com/">Nokia OZO</a> VR camera. Each camera costs $45,000.</p>
<p>The first lecture videos in VR finally went live a few hours ago. Now, anyone in the world can get a front row seat to probably one of the largest classrooms in the world.</p>
<p>You can watch the videos are on their <a target="_blank" href="https://www.youtube.com/user/cs50tv/videos">YouTube channe</a>l and on their <a target="_blank" href="https://www.facebook.com/cs50/">Facebook page</a>. For best experience, watch it using YouTube/Facebook app via a Google Cardboard, Samsung Gear VR, Oculus Rift, or HTC Vive.</p>
<p>You can still watch it, if you don’t have the appropriate hardware. Just click and drag the video below to look around. Here’s the first lecture, to give you a taste:</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/0C8a6GBF8Bg" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p><em>I’m the founder and CEO of <a target="_blank" href="https://www.class-central.com">Class Central</a>, the most popular search engine for online courses. You can see which courses he is taking here: <a target="_blank" href="https://www.class-central.com/@dhawal">class-central.com/@dhawal</a></em></p>
<p><em>Stay up to date with the lastest and greatest in online education by signing up for MOOCWatch, a monthly monthly digest of everything related to MOOCs: <a target="_blank" href="https://www.class-central.com/moocwatch">https://www.class-central.com/moocwatch</a></em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Building Online Communities: Pupil Labs ]]>
                </title>
                <description>
                    <![CDATA[ By Gitter Will Patera and Moritz Kassner are the founders of Pupil — a mobile eye tracking platform, which they are building working closely with an open source community. Find out more about their exciting project & feel free to drop by the Pupil La... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/building-online-communities-pupil-labs-feb3999ccc44/</link>
                <guid isPermaLink="false">66c346ef160da468ed76f17c</guid>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                    <category>
                        <![CDATA[ startup ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Virtual Reality ]]>
                    </category>
                
                    <category>
                        <![CDATA[ vr ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 17 Aug 2016 14:06:12 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*GkWBYwtyuYJyjiP706QG-Q.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Gitter</p>
<p><em>Will Patera and Moritz Kassner are the founders of Pupil — a mobile eye tracking platform, which they are building working closely with an open source community. Find out more about their exciting project &amp; feel free to drop by the Pupil Labs <a target="_blank" href="https://gitter.im/orgs/pupil-labs/rooms">community channel on Gitter.</a></em></p>
<p><strong>Tell us about a little bit about</strong> <strong>yourself.</strong></p>
<p>Will Patera and Moritz Kassner founded <a target="_blank" href="https://pupil-labs.com">Pupil Labs</a> in 2013. Andreas Bulling joined as the scientific adviser and partner in 2014. We develop open source software and build accessible hardware for mobile eye tracking and eye tracking integrations for VR/AR. We have backgrounds in computer science, industrial design, and architecture.</p>
<p><strong>What is Pupil? How did it all begin?</strong></p>
<p><a target="_blank" href="https://github.com/pupil-labs/pupil">Pupil</a> is an open source eye tracking platform. Pupil started as a part of our <a target="_blank" href="http://dspace.mit.edu/handle/1721.1/72626">joint Master’s thesis</a> at MIT. We wanted to be able to record and visualize what someone was looking at (gaze) while navigating through buildings. At the time, there were no accessible or open source mobile tracking tools. So, we decided to build our own hardware and software. We developed a mobile eye tracking headset with our own cameras and proof of concept along with capture and visualization software.</p>
<p>After finishing our thesis, we released the code (on Google Code — yes Google Code was still a thing in 2012) and published DIY instructions, and bill of materials, so that others could build their own mobile eye tracking headset and conduct research.</p>
<p>The community, developed organically around the initial open source codebase and wiki. We started receiving requests from the community to purchase eye tracking hardware, and in late 2013 we formed the company Pupil Labs. The company provides a way for us continue working on Pupil and pursuing the vision of the platform.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/oCEFneuXjtW0l8rznmrAjBnwhENLWxKXMJL8" alt="Image" width="800" height="600" loading="lazy">
<em>Pupil binocular mobile eye tracking headset.</em></p>
<p>Eye tracking is exciting because it intersects with a diverse range of research fields, application areas, and development topics. It’s fun to meet new people and learn about new areas where eye tracking is employed. Research areas include (but are not limited to): psychology, cognitive science, neuroscience, UI/UX, artificial intelligence, music, education, assistive technology, optics, ophthalmology, optometry, transportation and wayfinding, urban design, architecture, computer graphics, VR, AR, and more. Here are <a target="_blank" href="https://docs.google.com/spreadsheets/d/1ZD6HDbjzrtRNB4VB0b7GFMaXVGKZYeI0zBOBEEPwvBI/edit?usp=sharing">some academic publications</a> that cite Pupil.</p>
<p>On the development side it is equally diverse. Problems/projects address: ergonomics and physiology, optics, electrical engineering, computer vision, pupil detection algorithms and eye movement classification, visualization and more.</p>
<p><strong>What common goals do you have as a community?</strong></p>
<p>We share a common desire to make eye tracking accessible and reducing the barriers to obtaining robust eye tracking data for research and novel interfaces.</p>
<p><strong>What issues related to your project are you most excited about these days?</strong></p>
<p>We are really excited about our latest project called hmd-eyes — a community driven platform for open source eye tracking tools in VR, AR, and MR. We outline the goals of the project in this <a target="_blank" href="https://pupil-labs.com/blog/2016-04/eye-tracking-head-mounted-displays/">blog post</a>. The <a target="_blank" href="https://github.com/pupil-labs/hmd-eyes">github repo</a> for this project is somewhat bare-bones right now, but more coming soon. We also have a Gitter channel for this project at <a target="_blank" href="https://gitter.im/pupil-labs/hmd-eyes?utm_source=share-link&amp;utm_medium=link&amp;utm_campaign=share-link">hmd-eyes</a>.</p>
<p><strong>How do you expect VR to evolve in the next coming years? What will be the most interesting use cases in your opinion?</strong></p>
<p>There is certainly a lot of speculation and excitement surrounding VR and AR right now, and a lot of interest for eye tracking in VR/AR.</p>
<p>We think that it is only a matter of time — maybe only one to two more release cycles — until eye tracking will be integrated into consumerware HMDs (VR, AR, MR). This is exciting. But, will these consumerware platforms be accessible and open, or a black box? Will researchers and developers be able to access the fundamental pupil detection and mapping algorithms or develop their own methods? Will the work that you do within one SDK be portable or locked into one system?</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/pf6Dk9frJ3c8oI4dBH2npkKP9iXbLA87MdZU" alt="Image" width="800" height="457" loading="lazy">
<em>Pupil Labs recently released an eye tracking addon for the HTC Vive AR Headset.</em></p>
<p>We develop eye tracking hardware add-ons for VR and AR headsets, and have initiated a project called hmd-eyes to create open source building blocks for eye tracking in HMDs. Our goal is to work with and support a community of researchers and developers in creating reusable open-source software modules for eye tracking in HMDs. We know that many developers have already thought of or implemented eye tracking software for HMDs and instead of re-inventing wheels, we should form a community to share knowledge and tools.</p>
<p>Foveated rendering has gotten a lot of press. It is exciting, but maybe just the tip of the application-iceberg. There is so much that can be done within AR/VR that requires robust eye tracking data. There is interesting research into cognition aware computing using eye tracking.</p>
<p><strong>What are the main issues discussed in the Pupil channel on Gitter?</strong></p>
<p>Before Gitter, our only way to get in touch with our community was through Github and a Google Group (mailing list). We still use the Google Group, but have found that Gitter is really nice for quick feedback and sharing within the community.</p>
<p>A lot of the questions from our community are about setup and workflow. When both software and hardware (especially something you wear) is involved, workflows can quickly get complicated. It’s nice to be able to give and receive rapid feedback on Gitter. This helps the community to improve documentation and understand critical areas where improvements can be made.</p>
<p>We also maintain a wiki for Pupil. The wiki is open for anyone in the community to edit and can serve as both reference for developers and a “getting started” for new members.</p>
<p>The Pupil channel is also used to share development progress and post videos to project demos and research papers. It’s always fun to see video demos!</p>
<p><strong>What are the factors that you have taken into account while creating and maintaining the community? What factors contribute to the success of your community?</strong></p>
<p>In the beginning it required a lot of fostering. Most of knowledge was with the maintainers, and we had to answer almost all questions. Now the community has matured to a level that it is self perpetuating and there is more active exchange among its users.</p>
<p><strong>How do you encourage participants’ commitment and contribution to the community?</strong></p>
<p>It is our duty as maintainers to make sure the community is welcoming and supportive, and try our best to give quick feedback. That being said, we feel like we are still learning on how to best encourage participation in the community.</p>
<p>It’s great when contributors step forward and answer questions, share their work in progress, improve documentation, open issues, and make pull requests.</p>
<p>We really envision the community to be driven by others as much as us. With members taking ownership over certain areas of expertise.</p>
<p><strong>Based on your experience, do you feel that the open source communities have changed and evolved over the past years? If so, how?</strong></p>
<p>The great thing about community driven open source work is that, in the best case, it is always changing and evolving. There are certainly more tools now than ever before, that enable people to work together from around the world and to facilitate getting work done online. As communities evolve, so do the enabling technologies.</p>
<p><strong>What advice would you give to someone who wants to start an online open source community?</strong></p>
<p>Just start your project publicly. Initially you may be writing to yourself. Do your best to write docs, updates and code that are concise and a pleasure to read.</p>
<p><strong>Anything else you want to add?</strong></p>
<p>We ❤ Gitter. Its great to connect with community members and interested newcomers. We also rely on it heavily for internal communication; keeping our distributed team connected and coordinated.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
