<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated on Wed, 23 May 2012 11:05:24 -0700 -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="http://software.intel.com/en-us/articles/feed/" rel="self" type="application/rss+xml" />
    <title>Intel Software Network articles Feed</title>
    <link>http://software.intel.com/en-us/articles/</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Intel® Node Manager Programmer’s Reference Kit</title>
      <description><![CDATA[ <p>Intel® Node Manager is a server management technology that allows a platform's management software to accurately monitor and control the platform's power and thermal behaviors through an industry-defined standard <a href="http://www.intel.com/design/servers/ipmi/index.htm">Intelligent Platform Management Interface</a> (IPMI) and <a href="http://www.intel.com/technology/product/DCMI/index.htm">Datacenter Manageability Interface (DCMI)</a>.</p>
<p>Intel Node Manager allows data center managers to monitor server power and thermal behavior in real time. Using this technology, data center managers can set upper limits on the server power to maximize the rack density with confidence that rack power budgets will not be exceeded. During a power or thermal emergency, Intel Node Manager can automatically limit server power consumption and extend service uptime from stand-by power sources. Server power and thermal information can also be used to maximize overall data center efficiency by moving workloads, extending the life of stand-by power resources, etc.</p>
<p>The <a href="http://software.intel.com/file/43933">Intel® Node Manager Programmer's Reference Kit</a> contains the source code (C and C++), test application, and documents to manage servers that are Intel Node Manager capable. The Kit simplifies the complex IPMI encoding and decoding for commands and responses, hides the protocol details, and provides simple application programming interfaces (APIs) to monitor and control power and thermal capabilities on <a href="http://www.intel.com/content/www/us/en/data-center/data-center-management/node-manager-server-platforms-matrix-guide.html?wapkw=node+manager">Intel Node Manager capable platforms</a>.</p>
<p><b>DOWNLOAD NOW:</b> <a href="http://software.intel.com/file/43933">Intel® Node Manager Programmer's Reference Kit</a></p>
<p>Intel has three versions of server management technology: Intel Node Manager, Intel Node Manager Basic Edition, and Intel Node Manager Extended Edition. Intel Node Manager provides platform power and thermal capabilities to the baseboard management controller (BMC). Intel Node Manager Basic Edition provides simple management capabilities and does not need platform BMC. Intel Node Manager Extended Edition provides simple platform management capabilities along with power and thermal capabilities and does not need platform BMC. Intel® Node Manager Programmer's Reference Kit supports all three versions.</p>
<p>For more information about Intel Node Manager technology:</p>
<p><a href="http://www.intel.com/content/www/us/en/data-center/data-center-management/techrefresh-info-nodemanagerfull.html?wapkw=node+manager">Intel® Node Manager </a></p>
<p><a href="https://www-ssl.intel.com/content/www/us/en/data-center/data-center-management/node-manager-general.html?wapkw=intel%20node%20manager">Data Center Power Management with Intel® Node Manager</a></p>
<p><a href="http://www.intel.com/content/dam/doc/technical-specification/intelligent-power-node-manager-1-5-specification.pdf">Intel® Node Manager Specification</a></p> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-node-manager-programmers-reference-kit/</link>
      <pubDate>Tue, 22 May 2012 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-node-manager-programmers-reference-kit/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-node-manager-programmers-reference-kit/</guid>
      <category>ISN General</category>
    </item>
    <item>
      <title>Sample Live Event Expired</title>
      <description><![CDATA[ Live event content goes here.
<div id="vc-meta" >
<div id="vc-meta-pubdate">04-13-2012</div>
<div id="vc-meta-modificationdate">04-13-2012</div>
<div id="vc-meta-expirationdate">05-13-2012</div>
<div id="vc-meta-taxonomy">Live Events</div>
<div id="vc-meta-thumb">http://software.intel.com/file/43240</div>
<div id="vc-meta-abstract">Sample abstract. Lorem ipsum dolor sit amet, triton testandum ecce sit audivit ergo accipiet si non coepit dies recessissent fit.</div>
</div> ]]></description>
      <link>http://software.intel.com/en-us/articles/_sample-live-event-expired/</link>
      <pubDate>Tue, 22 May 2012 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/_sample-live-event-expired/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/_sample-live-event-expired/</guid>
      <category>Visual Computing Source</category>
    </item>
    <item>
      <title>Sample Webinar</title>
      <description><![CDATA[ Webinar content goes here.
<div id="vc-meta" >
<div id="vc-meta-pubdate">04-13-2012</div>
<div id="vc-meta-modificationdate">04-13-2012</div>
<div id="vc-meta-taxonomy">Online Events</div>
<div id="vc-meta-thumb">http://software.intel.com/file/43240</div>
<div id="vc-meta-abstract">Sample abstract. Lorem ipsum dolor sit amet, triton testandum ecce sit audivit ergo accipiet si non coepit dies recessissent fit.</div>
</div> ]]></description>
      <link>http://software.intel.com/en-us/articles/_sample-webinar/</link>
      <pubDate>Tue, 22 May 2012 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/_sample-webinar/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/_sample-webinar/</guid>
      <category>Visual Computing Source</category>
    </item>
    <item>
      <title>Sample Webinar Archived</title>
      <description><![CDATA[ Webinar content goes here.
<div id="vc-meta" >
<div id="vc-meta-pubdate">04-13-2012</div>
<div id="vc-meta-modificationdate">04-13-2012</div>
<div id="vc-meta-archivedate">05-13-2012</div>
<div id="vc-meta-taxonomy">Online Events</div>
<div id="vc-meta-thumb">http://software.intel.com/file/43240</div>
<div id="vc-meta-abstract">Sample abstract. Lorem ipsum dolor sit amet, triton testandum ecce sit audivit ergo accipiet si non coepit dies recessissent fit.</div>
</div> ]]></description>
      <link>http://software.intel.com/en-us/articles/_sample-webinar-archived/</link>
      <pubDate>Tue, 22 May 2012 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/_sample-webinar-archived/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/_sample-webinar-archived/</guid>
      <category>Visual Computing Source</category>
    </item>
    <item>
      <title>Sample Live Event</title>
      <description><![CDATA[ 
Live event content goes here.
<div id="vc-meta" >
<div id="vc-meta-pubdate">04-13-2012</div>
<div id="vc-meta-modificationdate">04-13-2012</div>
<div id="vc-meta-taxonomy">Live Events</div>
<div id="vc-meta-category-product">Intel® SDK for OpenCL* Applications</div>
<div id="vc-meta-thumb">http://software.intel.com/file/43240</div>
<div id="vc-meta-abstract">Sample abstract. Lorem ipsum dolor sit amet, triton testandum ecce sit audivit ergo accipiet si non coepit dies recessissent fit.</div>
</div> ]]></description>
      <link>http://software.intel.com/en-us/articles/_sample-live-event/</link>
      <pubDate>Tue, 22 May 2012 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/_sample-live-event/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/_sample-live-event/</guid>
      <category>Visual Computing Source</category>
    </item>
    <item>
      <title>HTML5 How-To Video Series for Ultrabooks</title>
      <description><![CDATA[ <p>HTML5 is fastly becoming an effective cross platform development language, helping developers write and manage code they can deploy on multiple devices. We've pulled together a series of videos to help developers get a basic understanding of HTML5 for development of Ultrabook applications.</p>
<ol>
<li class="playlist-video-item odd  ">Video 1 - HTML5 Screencasts: Introduction - This video will give you an introduction to HTML5. Why it is an important evolution of web technology, and an overview of the features.<br /><a href="http://www.youtube.com/watch?v=WbZx-ggJIOU&amp;list=PL81FA83F3A4266BBA&amp;index=1&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img width="124" src="http://i4.ytimg.com/vi/WbZx-ggJIOU/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">8:20</span></span></span><span class="video-info"><span class="video-overview"><span class="video-details"><span class="video-view-count"> </span></span></span></span></span></a></li>
<li class="playlist-video-item even  ">Video 2 - HTML5 Markup - This video will give you an overview of the markup changes in HTML5<br /><a href="http://www.youtube.com/watch?v=NJACjgQl6cQ&amp;list=PL81FA83F3A4266BBA&amp;index=2&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img width="124" src="http://i3.ytimg.com/vi/NJACjgQl6cQ/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">9:10</span></span></span><span class="video-info"><span class="video-overview"><span class="video-details"><span class="video-view-count"> </span></span></span></span></span></a></li>
<li class="playlist-video-item odd  ">Video 3 - HTML5 and CSS3 - This video will give you an introduction to CSS three and how it's used in HTML5 application<br /><a href="http://www.youtube.com/watch?v=_RBzyFaAehk&amp;list=PL81FA83F3A4266BBA&amp;index=3&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img width="124" src="http://i4.ytimg.com/vi/_RBzyFaAehk/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">13:32</span></span></span><span class="video-info"><span class="video-overview"><span class="video-details"><span class="video-view-count"> </span></span></span></span></span></a></li>
<li class="playlist-video-item even  ">Video 4 - HTML5 Interactivity - This video gives you an introduction to manipulating the DOM <br /><a href="http://www.youtube.com/watch?v=I3aryi7cqlA&amp;list=PL81FA83F3A4266BBA&amp;index=4&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img width="124" src="http://i2.ytimg.com/vi/I3aryi7cqlA/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">8:32</span></span></span><span class="video-info"><span class="video-overview"><span class="video-details"><span class="video-view-count"> </span></span></span></span></span></a></li>
<li class="playlist-video-item odd  ">Video 5 - HTML5 Forms - This video is an overview of HTML 5 forms including input types, new on attributes and client side validation.<br /><a href="http://www.youtube.com/watch?v=cXmWSSSjE2E&amp;list=PL81FA83F3A4266BBA&amp;index=5&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img width="124" src="http://i4.ytimg.com/vi/cXmWSSSjE2E/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">9:29</span></span></span><span class="video-info"><span class="video-overview"><span class="video-details"><span class="video-view-count"> </span></span></span></span></span></a></li>
<li class="playlist-video-item even  ">Video 6 - HTML5 Graphics - This video is an overview of SVG, web fonts and the canvas tag.<br /><a href="http://www.youtube.com/watch?v=8vXf1lQmKkI&amp;list=PL81FA83F3A4266BBA&amp;index=6&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img width="124" src="http://i1.ytimg.com/vi/8vXf1lQmKkI/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">17:01</span></span></span><span class="video-info"><span class="video-overview"><span class="video-details"><span class="video-view-count"> </span></span></span></span></span></a></li>
<li class="playlist-video-item odd  ">Video 7 - HTML5 Audio and Video - This video shows you the basics of audio and video in HTML5 application. <br /><a href="http://www.youtube.com/watch?v=Puz4U1zwJVE&amp;list=PL81FA83F3A4266BBA&amp;index=7&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img width="124" src="http://i1.ytimg.com/vi/Puz4U1zwJVE/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">4:46</span></span></span><span class="video-info"><span class="video-overview"><span class="video-details"><span class="video-view-count"> </span></span></span></span></span></a></li>
<li class="playlist-video-item even  ">Video 8 - HTML5 Communications: Part 1 - Ajax and Cross Origin Requests<br /><a href="http://www.youtube.com/watch?v=kJs47AJ64C8&amp;list=PL81FA83F3A4266BBA&amp;index=8&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img width="124" src="http://i4.ytimg.com/vi/kJs47AJ64C8/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">27:05</span></span></span><span class="video-info"><span class="video-overview"><span class="video-details"><span class="video-view-count"> </span></span></span></span></span></a></li>
<li class="playlist-video-item odd  ">Video 9 - HTML5 Communications: Part 2 - Cross-Document messaging and Web Workers<br /><a href="http://www.youtube.com/watch?v=poXWkZakUYA&amp;list=PL81FA83F3A4266BBA&amp;index=9&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img width="124" src="http://i1.ytimg.com/vi/poXWkZakUYA/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">9:10</span></span></span><span class="video-info"><span class="video-overview"><span class="video-details"><span class="video-view-count"> </span></span></span></span></span></a></li>
<li class="playlist-video-item even  ">Video 10 - HTML5 Communications: Part 3 - Server-Sent Events and WebSocket<br /><a href="http://www.youtube.com/watch?v=Yf0JpCHD8ic&amp;list=PL81FA83F3A4266BBA&amp;index=10&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img width="124" src="http://i2.ytimg.com/vi/Yf0JpCHD8ic/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">10:12</span></span></span><span class="video-info"><span class="video-overview"><span class="video-details"><span class="video-view-count"> </span></span></span></span></span></a></li>
<li class="playlist-video-item odd  ">Video 11 - HTML5 Storage - The video gives an overview of local storage, indexdb and WebSQL<br /><a href="http://www.youtube.com/watch?v=zxIWPHhUdJI&amp;list=PL81FA83F3A4266BBA&amp;index=11&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img width="124" src="http://i3.ytimg.com/vi/zxIWPHhUdJI/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">19:55</span></span></span><span class="video-info"><span class="video-overview"><span class="video-details"><span class="video-view-count"> </span></span></span></span></span></a></li>
<li class="playlist-video-item even  ">Video 12 - HTML5 Device Access - This video talks about how an HTML5 application uses Geolocation, Audio input, accelerometers, webcamera and file system access.<br /><a href="http://www.youtube.com/watch?v=lWayEo33NIo&amp;list=PL81FA83F3A4266BBA&amp;index=12&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img data-group-key="thumb-group-2" data-thumb="//i1.ytimg.com/vi/lWayEo33NIo/default.jpg" width="124" src="http://i1.ytimg.com/vi/lWayEo33NIo/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">10:46</span></span></span><span class="video-info"><span class="video-overview"><span class="video-details"><span class="video-view-count"> </span></span></span></span></span></a></li>
<li class="playlist-video-item odd  ">Video 13 - Offline and Packaging for AppUp - This video give the application developer an overview of how to package a web application and submit it to the Intel AppUp Center.<br /><a href="http://www.youtube.com/watch?v=wXsvClQ8PJU&amp;list=PL81FA83F3A4266BBA&amp;index=13&amp;feature=plpp_video" class="tile-link-block video-tile"><span class="playlist-video-item-base-content"> <span class="thumb-container"><span class="ux-thumb-wrap"><span class="video-thumb ux-thumb yt-thumb-default-124 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img data-group-key="thumb-group-2" data-thumb="//i4.ytimg.com/vi/wXsvClQ8PJU/default.jpg" width="124" src="http://i4.ytimg.com/vi/wXsvClQ8PJU/default.jpg" alt="Thumbnail" /></span></span></span> <span class="video-time">8:50</span></span></span></span></a></li>
</ol>
<p class="playlist-video-item odd  "><br />Learn more about developing apps for Ultrabooks as well as other HTML5 tools and packaging solutions for monetizing and distribution HTML5 apps to Ultrabook devices at our <a href="http://software.intel.com/en-us/ultrabook">Ultrabook Community</a>.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/html5-how-to-video-series-for-ultrabooks/</link>
      <pubDate>Sun, 20 May 2012 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/html5-how-to-video-series-for-ultrabooks/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/html5-how-to-video-series-for-ultrabooks/</guid>
      <category>Ultrabook</category>
    </item>
    <item>
      <title>Crossing platforms and boundaries with mobile applications</title>
      <description><![CDATA[ <div id="somaCodeMonkeys">
<h2>Crossing platforms and boundaries with mobile applications</h2>
<p><i>Soma Games and Code-Monkeys change the application game</i></p>
<p><strong>70%: Do what makes your heart come alive.</strong></p>
<p><strong>30%: Go where it takes you.</strong></p>
<p><strong>Is this utopia, or the business plan of two thriving development companies?</strong></p>
<p><strong>Read on and spend time in the alternate, but very real, universe of Soma Games and Code-Monkeys.</strong></p>
<h3>Nuts &amp; Bolts</h3>
<h4>Entering the Game</h4>
<p>Games depend on a compelling storyline and split-second decisions at each unanticipated fork in the road. Great play draws upon uncertainty, risk, an intuitive analysis of multiple variables, and resolute action. All of this describes the innovative creations and pioneering outlook of the founders of Soma Games and Code-Monkeys, sibling companies that have found the sweet spot in development for mobile platforms and are definitely enjoying every step of the ride.</p>
<div class="sidebar"><img alt="Bok Choy Boy" src="http://sites.cmdrm.com/5826/somaCodeMonkeys/bokChoyBoy.jpg" /> <img alt="Soma Games" src="http://sites.cmdrm.com/5826/somaCodeMonkeys/somaGames.jpg" /> <img alt="Code Monkeys: mobile - web - experts" src="http://sites.cmdrm.com/5826/somaCodeMonkeys/codeMonkeys.jpg" />
<p class="caption">"Making a game is an architectural work, not an individual sport."</p>
<p class="source">— John Bergquist<br /> Communications Director, Soma Games and Code-Monkeys</p>
<br /> <br />
<p class="caption">"We are going to be able to blend the virtual with the real world in ways never conceived before."</p>
<p class="source">— Chris Skaggs<br /> CTO, Soma Games and Code-Monkeys</p>
</div>
<p>Soma expected to jump into video game development for consoles, such as PlayStation* and Xbox*, but the barrier to entry—a development process too slow, cumbersome, and costly to keep up with creative potential and market demand—was a catalyst to explore other options. A move to applications for mobile platforms that could be designed, developed, and brought to market faster was a natural step. Cross-platform game development brought its own learning curve, one that also inspired Soma's sibling company, Code-Monkeys. Its developers collaborate with application creators at any and every level of the process, from building out application concepts to fine-tuning complex code.</p>
<h4>The Story of Soma's Success</h4>
<p>CTO of Soma Games and Code-Monkeys, Chris Skaggs, entered the industry because he wanted to tell compelling stories. He started with the broad strokes of multiple stories, but some of the most interesting turns of plot, character, and levels have come about through the process of development, and the exchange with active—and expressive— player communities. Says Skaggs, "Each story builds a life of its own that you discover while making it."</p>
<p>Another creative route has been the fabrication of a story world around an existing character. This is the origin of Bok Choy Boy*, which taps into an established consumer culture of ready-made symbols with exciting effect. Soma had to convince the toy company to convert to the virtual space, then deliver results through effective cross-vending and marketing.</p>
<p>Being both technically and marketing savvy comes naturally to the staff of Soma and Code-Monkeys, where curiosity and passion, rather than resumés, drive business growth. This cultivation of open- ended possibility and willingness to jump into untried areas has helped them to take advantage of a relatively new market for mobile game applications, do work that inspires them, and be profitable.</p>
<p>A team-based development approach is a natural outgrowth of this philosophy. Communications Director John Bergquist emphasizes the importance of forming a team with diverse talents, whether technical or artistic, "Making a game is an architectural work, not an individual sport." Soma has found creative people eager to use their talents and contribute to the whole.</p>
<h4>Connecting with Community</h4>
<p>Bergquist sees a direct link between interesting, surprising story content and building community, "Content is king. The storyline creates endless things to share and talk about with players."</p>
<p>Bergquist makes full use of digital communications, from Facebook* and blogs to YouTube* and the Internet, to build and sustain community. He places a high value on direct interaction with the full demographic of players. Gamers have responded to this personal approach, and are even enthusiastically engaged in game-related content creation, such as sending G*-like LEGO* ships to Soma.</p>
<h4>Multi-Platform as the Standard</h4>
<p>Soma and Code-Monkeys have embraced multi-platform development from the start. Their foresight is paying off as the market is rapidly positioning cross-platform play as a requirement. They favor tools that allow them to efficiently create and publish an engine on multiple platforms, such as Unity 3D*, HTML 5*, and Adobe Air*. The knowledge base is out there for novices. Says Skaggs, "Any developer with passion and drive can make a multi-platform game." Visibility can be immediate, Skaggs continues, "Distribution is the magic bullet. Tens of millions of people can access your application overnight."</p>
<p>Cross-platform design impacts technical decisions along the way. New technologies can spark retooling of game logic; for example, the introduction of Microsoft Kinnect* allowed for story interactions on the gameplay level.</p>
<p>Soma developers also take advantage of the Web for a relatively low-tech solution to the complexity of providing a multilayered game experience that extends past game boundaries. The Web potential is tapped for games such as G to support slick interactions between applications, cohesion across games, and tracking of "career" scores and level states.</p>
<h4>Mobile Inspiration</h4>
<p>For Soma, the capabilities and limitations of mobile platforms are waiting to be exploited for gameplay. The Finger-Twister* game was designed to turn multi-touch into a game experience. Accelerometers, which tilt and shift screens automatically based on user motion, allow devices to be used like "fishing rods." Location-based GPS services offer yet more creative possibilities. Skaggs sees more opportunity for innovation ahead, "We are going to be able to blend the virtual with the real world in ways never conceived before."</p>
<p>Bergquist values the opportunity to participate in thought leadership in technology innovation and mobile device usage, as well as in game development. As the mobile space explodes, he finds room for innovation and ample freedom to experiment. Skagg echoes this, seeing mobile as a profound change which is altering daily consumer behavior and expectations on a wide scale. Simply being able to bring games outside or use smartphones to manipulate a virtual reality expands a gamer's universe from the home console to the multi-player universe of a mobile world.</p>
<h4>Collaborating with the Intel AppUp<sup>SM</sup> and the Ultrabook™ Developer community</h4>
<p>Soma Games and Code-Monkeys find Intel software engineers share their passion for creating quality applications, and value this commitment. Bergquist explains, “The Intel AppUp team cares who we are as developers, and is supportive of our work and the communities we’re building.”</p>
Code-Monkeys has also been instrumental in helping other developers and game creators get their applications built, validated, and deployed on the Intel AppUpSM center. Because Code-Monkey’s staff understands cross-platform development best practices, they can help streamline the process from creation to troubleshooting.</div>
<div id="somaCodeMonkeys"><br />
<h3>Conclusion</h3>
<p>Digital distribution is evolving, the device market is rapidly increasing, and there are tremendous opportunities along the compute continuum to participate. Skaggs advises developers to take hold of the mobile market potential, "If developers are not paying attention to this, they're not paying attention." The process does not have to be perfect. At Soma, ideas are tested, tried, and adjustments made. At Code-Monkeys, developers stand ready to make it work for their wide customer base. "There are so many people to learn from in this business," says Bergquist, summing up the open attitude of these engaged inventors.</p>
<h4>Join the Ultrabook™ developer community</h4>
<p>Exchanging ideas with innovators like Chris Skaggs and John Bergquist, or taking advantage of Code-Monkeys to bring your application to market are just a few of the unique opportunities available to developers.</p>
<p><b>Access technical content, knowledge, and tools to optimize software for the performance, graphics, and power capabilities of Ultrabook™ devices—and quickly get your app to market through the Intel AppUpSM center and affiliate app stores.</b></p>
</div>
<div id="somaCodeMonkeys"><b>Intel® Software Network</b><br /><a href="http://software.intel.comintel.com/software/en-us/ultrabook">intel.com/software/en-us/ultrabook</a></div>
<div id="somaCodeMonkeys"><br /><b>Intel AppUpSM</b><br /><a href="http://software.intel.comappdeveloper.intel.com">appdeveloper.intel.com </a>
<h4></h4>
<h4>To learn more about Soma Games and Code-Monkeys, visit <a target="new" href="http://www.somagames.com">www.somagames.com</a> and <a target="new" href="http://www.code-monkeys.com">www.code-monkeys.com</a>.</h4>
<div id="footerContainer"><img alt="Intel AppUp(SM) developer program" src="http://sites.cmdrm.com/5826/somaCodeMonkeys/appUp_logo.jpg" /> <img alt="Soma Games" src="http://sites.cmdrm.com/5826/somaCodeMonkeys/somaGames.jpg" /> <img alt="Code Monkeys: mobile - web - experts" src="http://sites.cmdrm.com/5826/somaCodeMonkeys/codeMonkeys.jpg" /></div>
<div id="footerContainer" >This article has been republished here, and was originally published on appdeveloper.intel.com on November 16, 2011</div>
</div>
 ]]></description>
      <link>http://software.intel.com/en-us/articles/crossing-platforms-and-boundaries-with-mobile-applications/</link>
      <pubDate>Fri, 18 May 2012 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/crossing-platforms-and-boundaries-with-mobile-applications/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/crossing-platforms-and-boundaries-with-mobile-applications/</guid>
      <category>Ultrabook</category>
    </item>
    <item>
      <title>Using the Scalable Vector Graphics Library to Render Graphics on Android for Intel IA</title>
      <description><![CDATA[ <p><b>By Shwetha Doss, Sr. Application Engineer, Intel Corporation<br /> Shaun Lo, Application Engineer, Intel Corporation<br /> Cary Pai, Application Engineer, Intel Corporation</b></p>
<h2 class="sectionHeading">1. Introduction</h2>
<p>Scalable Vector Graphics* (SVG) is a family of specifications of an XML-based file format for two-dimensional vector graphics, both static and dynamic (i.e., interactive or animated), text or embedded raster graphics. The SVG specification is a royalty-free vendor-neutral open standard that has been under development by the World Wide Web Consortium* (W3C) since 1999.</p>
<p>SVG images and their behaviors are defined in XML text files. This means that they can be searched, indexed, scripted and, if required, compressed. As XML files, SVG images can be created and edited with any text editor.</p>
<p>SVG files are compact and provide high-quality graphics on the Web, in print, and on resource-limited handheld devices. In addition, SVG supports scripting and animation, so is ideal for interactive, data-driven, personalized graphics.</p>
<p>Using SVG has many benefits. First, you don't need to have pictures in different resolutions, no need to scale. Second, SVG is an XML file, so its size is much smaller than the raster size format for the same image. This also helps to change the picture on the fly.</p>
<p>SVG allows three types of graphic objects: vector graphics, raster graphics, and text. Graphical objects, including PNG and JPEG raster images, can be grouped, styled, transformed, and composited into previously rendered objects.</p>
<p>Native Android* applications do not support SVG XML files. But SVG XML files could be parsed in browsers starting with Android 3.0. This paper integrates the svg-android open source library into codebase and provides an example application on Intel® architecture (IA) Android Ice Cream Sandwich (ICS).</p>
<p><b>1.a SVG Functionality</b></p>
<p>The SVG 1.1 specification defines 14 functional areas of feature sets, which are:</p>
<ul>
<li>Paths</li>
<li>Basic shapes</li>
<li>Text</li>
<li>Painting</li>
<li>Color</li>
<li>Gradients and patterns</li>
<li>Clipping, masking, and compositing</li>
<li>Filter effects</li>
<li>Interactivity</li>
<li>Linking</li>
<li>Scripting</li>
<li>Animation</li>
<li>Font</li>
<li>Metadata</li>
</ul>
<p><b>1.b SVG Shapes</b></p>
<p>SVG's predefined shape elements are:</p>
<ul>
<li>Rectangle &lt;rect&gt;</li>
</ul>
<p> </p>
<pre><code>&lt;svg&gt;
&lt;rect x="50" y="20" width="150" height="150"  /&gt;
&lt;/svg&gt;</code></pre>
<p> </p>
<ul>
<li>Circle &lt;circle&gt;</li>
</ul>
<p> </p>
<pre><code>&lt;svg &gt;
&lt;circle cx="100" cy="50" r="40" stroke="black" stroke-width="2"
fill="red" /&gt;
&lt;/svg&gt;</code></pre>
<p> </p>
<ul>
<li>Ellipse &lt;ellipse&gt;</li>
<li>Line &lt;line&gt;</li>
<li>Polyline &lt;polyline&gt;</li>
<li>Polygon &lt;polygon&gt;</li>
<li>Path &lt;path&gt;</li>
</ul>
<p> </p>
<pre><code>&lt;svg xmlns="http://www.w3.org/2000/svg" version="1.1"&gt;
 &lt;path d="M150 0 L75 200 L225 200 Z" /&gt;
&lt;/svg&gt;</code></pre>
<p> </p>
<p ><img src="http://software.intel.com/file/43884" /></p>
<h2 class="sectionHeading">2. SVG Library Integration</h2>
<p>Create a file named svgandroid.xml to describe svgandroid.jar. Place svgandroid.jar in /system/framework folder and svgandroid.xml in the /etc/permissions folder. Applications will discover svgandroid.jar library through svgandroid.xml.</p>
<p>Put the following code into the svgandroid.xml:</p>
<p> </p>
<pre><code>
&lt;?xml version="1.0" encoding="utf-8"&gt;
&lt;permissions&gt;
&lt;libraryname="svgandroid" file="/system/framework/svgandroid.jar"/&gt;
&lt;/permissions&gt;</code></pre>
<p> </p>
<p>Use the &lt;use-library&gt; declaration in the AndroidManifest.xml file. This method loads the svgandroid packages. They will not be loaded automatically.</p>
<p> </p>
<p> </p>
<pre><code>&lt;uses-library android:name="svgandroid" android:required="true" /&gt;</code></pre>
<p> </p>
<p> </p>
<p>Set android:required="true". The Android system would not permit an application on a device without this library.</p>
<p>If this application is installed on Android devices without this library, the following error message occurs:</p>
<p>Failure [INSTALL_FAILED_MISSING_SHARED_LIBRARY]</p>
<p>This element also affects the availability of the application on Market. The Android device could not list this application on Market without the library.</p>
<h2 class="sectionHeading">3. Render a File Using Revised SVG</h2>
<p><b>3.a Why Use SAX?</b></p>
<div >
<p><b>3.a.a What is SAX?</b></p>
<p>SAX (Simple API for XML) is an event-based sequential access parser API generated by the XML-DEV mailing list for XML documents. SAX's mechanism for reading data from an XML document is very different than the one provided by the Document Object Model (DOM). Where the DOM operates on the document as a whole, SAX parsers operate on each piece of the XML document sequentially.</p>
<p><b>3.a.b Benefits</b></p>
<p>SAX parsers have certain benefits over DOM-style parsers. A SAX parser typically uses much less memory than a DOM parser. DOM parsers must have the entire tree in memory before any processing can begin, so the amount of memory used by a DOM parser depends entirely on the size of the input data. The memory footprint of a SAX parser, by contrast, is based only on the maximum depth of the XML file (the maximum depth of the XML tree) and the maximum data stored in XML attributes on a single XML element. Both of these are always smaller than the size of the parsed tree itself.</p>
<p>Because of the event-driven nature of SAX, processing documents can often be faster than DOM-style parsers. Memory allocation takes time, so the larger memory footprint of the DOM is also a performance issue.</p>
<p>Due to the nature of DOM, streamed reading from disk is impossible. Processing XML documents larger than main memory is also impossible with DOM parsers, but can be done with SAX parsers. However, DOM parsers can make use of disk space as memory to sidestep this limitation.</p>
<p><b>3.a.c Drawbacks</b></p>
<p>The event-driven model of SAX is useful for XML parsing, but it does have certain drawbacks.</p>
<p>Certain kinds of XML validation require access to the document in full. For example, a DTD IDREF attribute requires that there be an element in the document that uses the given string as a DTD ID attribute. To validate this in a SAX parser, one would need to keep track of every previously encountered ID and IDREF attributes to see if any matches are made. Furthermore, if an IDREF does not match an ID, the user only discovers this after the document has been parsed. If this linkage was important to building functioning output, then time has been wasted in processing the entire document only to throw it away.</p>
<p>Additionally, some kinds of XML processing simply require having access to the entire document. XSLT and XPath, for example, need to be able to access any node at any time in the parsed XML tree. While a SAX parser could be used to construct such a tree, the DOM already does so by design.</p>
</div>
<p><b>3.b How to implement SAX parser in Android:</b></p>
<p>When implementing SAX parser, the class need to inherit “DefaultHandler". And there are a few methodsthat need to be overridden when inherit “DefaultHandler"—default base class for SAX2 event handlers—in Android. These methods include startElement, endElement, startDocument, endDocument, etc. You can easily see what each function does by its name. For example, startDocument means when the SAX starts to parse the document, it will trigger the event and call the startDocument method.. Once the SAX parses any tag of XML file, it will call startElement, so you can get the tag name, attribute, and some other information relevant to the tag. The other methods, endDocument, startElement, and endElement, are self-explanatory.</p>
<p><b>3.c Why Revise the Original SVG Library?</b></p>
<p>Since the original library can't render the SVG file with attributes in the group tag (&lt;g&gt;), we must add a register to store the style attribute with a &lt;g&gt; tag. If there is already a style attribute in the inner render element, the style attribute will replace the one in the &lt;g&gt; tag.</p>
<p>We recommend using SAX to parse the SVG file. When we parsing the &lt;g&gt; tag, we retrieve the entire attribute into the instance –g_prop, which is an internal class of the properties.</p>
<pre name="code" class="cpp">public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException 

{
            			……
	} else if (localName.equals("g")) {
        	……
                pushTransform(atts);
                g_prop = new Properties(atts); 
	}
		……
}
</pre>
<p>When we parse the &lt;rectangle&gt;, &lt;path&gt; or any other rendering tags, we need to check if there is any style associated with the tag. If there is, we need to get the attributes. The methods doFill, doStroke help to initiate the style of fill and stroke of the canvas. After these methods are invoked, we can draw the parsed element onto the canvas.</p>
<pre name="code" class="cpp">Properties props = new Properties(atts);
                if (doFill(props, gradientMap)) 
    {
                    doLimits(p);
                    canvas.drawPath(p, paint);
                }
                else
                {
                	if(g_prop != null)
                	{
                		if(doFill(g_prop, gradientMap))
                		{
		                	doLimits(p);
		                	canvas.drawPath(p, paint);
                		}
                	}
                }
                
                if (doStroke(props))
                    canvas.drawPath(p, paint);
                else
                {
                	if(g_prop != null)
                	{
                		if(doStroke(g_prop))
                			canvas.drawPath(p, paint);
                	}
                }
                popTransform();
}
</pre>
<p><b>3.d SVG XML File with Attributes in the Rendering Tag</b></p>
<p> </p>
<div >
<pre>&lt;path display="none" <span >fill="#FFFFFF"</span> d="M268.461,471.01c2.526,0,4.575,2.048,4.575,4.571c0,2.529-2.049,4.576-4.575,4.576
c-2.525,0-4.574-2.047-4.574-4.576C263.887,473.058,265.936,471.01,268.461,471.01z"/&gt;</pre>
</div>
<p> </p>
<p ><img src="http://software.intel.com/file/43885" /></p>
<p><b>3.e SVG XML File with Attributes in Group Tag</b></p>
<p> </p>
<div >
<pre>&lt;g &gt;
&lt;path d="M-122.304 84.285C-122.304 84.285 -122.203 86.179 -123.027 86.16C-123.851 86.141 -140.305 38.066 -160.833 40.309C-160.833 40.309 -143.05 32.956 -122.304 84.285z"/&gt;
&lt;/g&gt;</pre>
</div>
<p> </p>
<p ><img src="http://software.intel.com/file/43886" /></p>
<h2 class="sectionHeading">References</h2>
<ul>
<li><a href="http://code.google.com/p/svg-android/" target="_blank">http://code.google.com/p/svg-android/</a></li>
<li><a href="http://www.w3.org/TR/SVG/" target="_blank">http://www.w3.org/TR/SVG/</a></li>
<li><a href="http://www.megginson.com/downloads/SAX/" target="_blank">http://www.megginson.com/downloads/SAX/</a></li>
<li><a href="http://www.w3schools.com/svg/" target="_blank">http://www.w3schools.com/svg/</a></li>
<li><a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics" target="_blank">http://en.wikipedia.org/wiki/Scalable_Vector_Graphics</a><span ></span></li>
<li><a href="http://en.wikipedia.org/wiki/Simple_API_for_XML" target="_blank">http://en.wikipedia.org/wiki/Simple_API_for_XML</a><span ></span></li>
</ul> ]]></description>
      <link>http://software.intel.com/en-us/articles/using-the-scalable-vector-graphics-library-to-render-graphics/</link>
      <pubDate>Wed, 16 May 2012 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/using-the-scalable-vector-graphics-library-to-render-graphics/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/using-the-scalable-vector-graphics-library-to-render-graphics/</guid>
      <category>Android* Developers</category>
    </item>
    <item>
      <title>Fluid Simulation for Video Games (part 13)</title>
      <description><![CDATA[ <p><b>By Dr. Michael J. Gourlay</b></p>
<h2 class="sectionHeading">Downloads</h2>
Download <a href="http://software.intel.com/file/43799">Fluid Simulation for Games (part 13)</a> [PDF 1.1MB]<br /> Download <a href="http://software.intel.com/file/43798">MjgIntelFluidDemo_Part13.rar</a> [RAR 2.3MB]<br /> <br /> <img src="http://software.intel.com/file/43797" height="471" width="740" /><br />
<p><b>Figure 1.</b> <i>Convex polyhedra interacting with a vortex particle fluid</i></p>
<p><i><br /></i></p>
<h2 class="sectionHeading">Convex Obstacles</h2>
<p>Video games are compelling because they are interactive. Even visual effects should respond to other entities in the environment, especially those the user controls. Particle effects, including fluids, should therefore respond to rigid bodies of any shape. Those shapes should include airfoils that can experience lift.</p>
<p>This article—the thirteenth in a series—describes how to augment the fluid particle system described earlier, interact with rigid bodies with any polyhedral shape, and generate a lift-like force on those bodies. <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-1/">Part 1</a> summarized fluid dynamics; <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-2/">part 2</a> surveyed fluid simulation techniques. <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-3/">Part 3</a> and <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-4/">part 4</a> presented a vortex-particle fluid simulation with two-way fluid–body interactions that runs in real time. <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-5/">Part 5</a> profiled and optimized that simulation code. <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-6/">Part 6</a> described a differential method for computing velocity from vorticity, and <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-7/">part 7</a> showed how to integrate a fluid simulation into a typical particle system. <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-8/">Part 8</a> explained how a vortex-based fluid simulation handles variable density in a fluid; <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-9/">part 9</a> described how to approximate buoyant and gravitational forces on a body immersed in a fluid with varying density. <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-10/">Part 10</a> described how density varies with temperature, how heat transfers throughout a fluid, and how heat transfers between bodies and fluid. <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-11/">Part 11</a> added combustion, a chemical reaction that generates heat. <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-12/">Part 12</a> explained how improper sampling caused unwanted jerky motion and described how to mitigate it.</p>
<p> </p>
<h2 class="sectionHeading">Collision Detection</h2>
<p>Detecting collisions between objects first entails computing the distance between them. Video games model most shapes with planar, polygonal faces and treat particles as though they have spherical shape. You therefore need to compute the distance between planes and spheres.</p>
<p> </p>
<b>The Math Behind Planes</b>
<p>A <i>plane</i> is a two-dimensional surface in a three-dimensional space. You can define a plane in various ways. One convenient representation uses a normal vector <img src="http://software.intel.com/file/43808" /> and a distance, <i>d</i>. The <i>plane equation</i> has this formulation:</p>
<p ><img src="http://software.intel.com/file/43809" /></p>
<p>All points with coordinates <img src="http://software.intel.com/file/43810" /> that satisfy this equation lie within the plane. When <img src="http://software.intel.com/file/43811" /> has unit length (<img src="http://software.intel.com/file/43812" />), <i>d</i> is the distance of the plane from the origin. You can use this value to represent a plane as a vector with four components (that is, a 4-vector plane): <img src="http://software.intel.com/file/43813" /> or <img src="http://software.intel.com/file/43814" />.</p>
<p>The distance, <i>D</i>, of a point <img src="http://software.intel.com/file/43815" /> from the plane <img src="http://software.intel.com/file/43814" /> is:</p>
<p ><img src="http://software.intel.com/file/43816" /></p>
<p>Notice that this equation has the same form as the equation for the plane, except that instead of equating it to zero, the formula tells you the distance of the point to the plane. This is obviously consistent because if a point has zero distance to the plane, then the point lies in the plane.</p>
<p>But wait a moment! This formula could result in negative values. For example, choose the point <img src="http://software.intel.com/file/43817" /> and the plane with <img src="http://software.intel.com/file/43818" /> and <i>d</i> = 1. The formula claims that point has negative distance from the plane. What the heck is <i>negative distance</i>?</p>
<p>A plane divides all of space into two halves. A <i>half-space</i> is the region of space on one side of a plane. The signed distance formula tells you whether a point lies in the positive half-space or the negative half-space of a plane, as Figure 2 depicts.</p>
<p ><img src="http://software.intel.com/file/43800" /></p>
<p ><b>Figure 2.</b> <i>Planes and half-spaces</i></p>
<p ><br /><i></i><i></i></p>
<p>Think of a plane as facing in the direction of its normal. Points behind the plane have negative distance. Points in front of the plane have positive distance. When a point lies behind a plane, we call its distance (which is negative) the <i>penetration depth</i>.</p>
<p>The <code>Plane</code> class shows an implementation of the planar formulae that builds upon a 4-vector class (Vec4):</p>
<img src="http://software.intel.com/file/43820" /><br /> <br />
<p>You can compute the distance of a sphere from a plane by computing the distance of the sphere's center (a point) from the plane, then subtracting the sphere's radius.</p>
<p> </p>
<p class="Note">Note: <i>Technically, planes exist in other dimensions. For example, in a two-dimensional space, a plane is also a line. In a four-dimensional space, a plane is a three-dimensional hyperplane. But this article discusses three-dimensional spaces, where planes are two dimensional.</i></p>
<p class="Note"><i><br /></i></p>
<p><b>Planes Make Convex Hulls</b></p>
<p>A <i>polytope</i> is a shape with flat sides. In two dimensions, polytopes are called <i>polygons</i>. In three dimensions, polytopes are called <i>polyhedra</i>.</p>
<p>A <i>convex shape</i> is one where any line segment between any two points in the shape is also in that shape. So, a <i>convex polytope</i> is such a shape with flat sides, as shown in Figure 3.</p>
<p>An array of planes can represent a convex polyhedron. You can describe each face, <i>i</i>, of the polyhedron using a plane representation, <img src="http://software.intel.com/file/43819" />. This is called a <i>half-space representation</i> (or <i>H-representation</i>).</p>
<p ><img src="http://software.intel.com/file/43894" /></p>
<p ><b>Figure 3.</b> <i>Convex versus non-convex polytopes</i></p>
<p ><i><br /></i></p>
<p>To determine whether a point is inside a polyhedron, compute the distance of that point to each face plane of the polyhedron. If all distances are negative, the point lies inside the polyhedron.</p>
<p ><img src="http://software.intel.com/file/43802" /></p>
<div ><b>Figure 4.</b> <i>Measuring distance or penetration depth between stationary spheres and polytopes<br /><br /></i></div>
<p>As Figure 4 depicts, computing the distance between a stationary point (or sphere) and the planes of a polytope does not always give an unambiguous measure of distance or penetration depth. Sometimes, the best measure of distance could be from an edge or vertex of the polytope. But the distance formula will always correctly tell whether a point (or sphere) is inside, outside, or overlapping a polytope.</p>
<p> </p>
<p><b>Alternative Method</b></p>
<p>The point-to-plane method suffices when detecting collisions between particles and polytopes. Other algorithms exist to compute the distance between two convex shapes. One of the most famous and useful, especially among game developers, is the Gilbert–Johnson–Keerthi (GJK) distance algorithm. Although its code is fast and simple, the concepts are not easy to explain and are not in the scope of this article. Furthermore, determining penetration depth can be even more problematic and usually entails more sophisticated approaches, such as the Expanding Polytope Algorithm (EPA). See the "For Further Study" section at the end of this article for more information.</p>
<p> </p>
<p><b>Collision Detection</b></p>
<p>Detecting a collision between objects entails computing their separation distance or penetration depth. Also, when objects collide, you usually want to know the region of contact and <i>contact normals</i>—that is, the direction along which to apply force or displacement to separate the objects.</p>
<p>Although the point-to-plane distance formula will tell you whether a point lies inside a polytope, it will not unambiguously tell you its distance or penetration depth. In addition to the edge cases described earlier, determining penetration depth entails the relative direction of travel of the two objects. The correct answer depends on the configuration of objects before and after the collision. If objects lie inside each other (or if a particle lies inside a polytope), then you have detected the collision after it occurred. This is called <i>interpenetration</i>, and it should be avoided or corrected when it happens.</p>
<p>For visual effects involving hundreds or thousands of tiny particles, you can get adequate results by using the following simple algorithm:</p>
<ol>
<li>Given a query point, a polytope, its position and orientation, initialize <code>largestDistance</code> to an extremely large negative value.</li>
<li>For each plane in the polytope: <ol >
<li>Compute the distance between the query point and the plane.</li>
<li>If that distance exceeds <code>largestDistance</code>, then: <ol >
<li>Assign <code>largestDistance</code> to that distance</li>
<li>Remember this plane index</li>
</ol></li>
</ol> </li>
<li>Return the plane index and <code>largestDistance</code>.</li>
</ol>
<p>For spheres, subtract their radius from the returned largest distance to get the separation distance. If that value is negative, the sphere interpenetrates the polytope.</p>
<p>From that information, you can compute a contact point and normal:</p>
<p>Given a query point, a plane, a polytope orientation, and the largest distance:</p>
<ol>
<li>Reorient the plane normal to world space.</li>
<li>Scale the normal for the returned plane index by the largest distance to get a penetration vector.</li>
<li>Subtract the penetration vector from the query point to get the contact point.</li>
</ol>
<p>Although this algorithm does not accurately measure distance for the edge cases, the distance and normal it returns yield sufficiently close results to work for collision response.</p>
<p>The <code>ConvexPolytope</code> class implements these algorithms. (See the demonstration code that accompanies these articles for more details.)</p>
<img src="http://software.intel.com/file/43821" /><br /> <br />
<p class="Body">The routine <code>ContactPoint</code> uses information computed by <code>ContactDistance</code>:</p>
<img src="http://software.intel.com/file/43822" /><br /> <br />
<p><b><br /></b></p>
<p><b>Broad Phase</b></p>
<p>The <code>ContactDistance</code> algorithm iterates over every face in a polyhedron. That process can get expensive. You can reduce that expense in a few ways:</p>
<ul>
<li>Only compute <code>ContactDistance</code> when the query point lies within a coarse bounding volume (such as a bounding sphere) that contains the polytope. That computation is much faster and can let you skip the more expensive <code>ContactDistance</code> until the query point is somewhat near the polytope. The accompanying code uses this technique.</li>
<li>If you only care about interpenetration, you can change <code>ContactDistance</code> to return immediately when it finds any distance-to-plane that is positive. The returned value will not necessarily be the largest distance, but when positive, you don’t care. Note that if you want to compute the distance to a sphere instead of to a point, then you would have to pass in the sphere radius and take that into account. The accompanying code includes a routine that uses this technique.</li>
</ul>
<p>To further reduce CPU cost , but at the expense of memory and complexity you can:</p>
<ul>
<li>Remember the plane from the previous iteration, and reuse that for the next attempt. If it’s still positive, there is no collision, and you can bail out after testing one plane. Note that this would entail storing another integer per particle. Because there can be tens of thousands of particles, that can add up.</li>
<li>Store face connectivity information and only visit adjacent faces whose distance would increase <code>largestDistance</code>. Doing so can significantly reduce the number of faces visited. Also, game engines often include such adjacency information. You might be able to exploit that information for particle collisions.</li>
</ul>
<br />
<p><b>Deepening Penetration</b></p>
<p>If a particle penetrates an object, it could end up closer to the opposite side of the object rather than the side it penetrated, as Figure 5 shows. This could happen for thin objects or fast particles. It is therefore useful to consider only those planes for which particles are moving farther behind.</p>
<p ><img src="http://software.intel.com/file/43803" /></p>
<p ><b>Figure 5.</b> <i>Measuring collision depth between a moving spherical particle and polytope</i></p>
<p> </p>
<p>The demo code accompanying this article contains a routine, <code>ConvexPolytope::CollisionDistance</code>, that implements this idea.</p>
<p> </p>
<p><b>Continuous Collision Detection</b></p>
<p>The most accurate way to determine contacts would entail <i>continuous collision detection</i> (CCD)—that is, detecting the collision just as it happens (instead of after the fact). CCD involves computing a <i>time of impact</i> (TOI) and either advancing the simulation up to that point or rewinding back to it. One way to approximate CCD to estimate TOI is to move into a reference frame where only the object moves. The other object will still be in motion. Now, <i>sweep</i> that moving object across space to span the region it would occupy at all points during the test interval. If the swept shape intersects with the stationary shape, the two objects probably collided during that interval.</p>
<p>Sweeping a shape is relatively easy if its motion is pure translation but more difficult if its motion includes rotation. Video games therefore either treat only linear motion for continuous collision detection or simply use discrete collision detection and allow objects to interpenetrate.</p>
<p>For spherical shapes, like particles, the swept shape is a line segment with hemispherical caps, also known as a <i>capsule </i>or<i> sausage</i>. You can compute intersections between capsules and planes using simple formulae. But particle effects for video games do not need that level of sophistication, and it takes longer to compute than most games budget for effects.</p>
<p> </p>
<p><b>Concave Shapes</b></p>
<p>The technique described in this article applies directly to convex shapes. To apply to concave shapes, you can either compute the convex hull of that shape or decompose the shape into convex components. See the "For Further Study" section for more information.</p>
<p> </p>
<h2 class="sectionHeading">Collision Response</h2>
<p>When the detection phase indicates that a particle interpenetrated an obstacle, the simulation must resolve the collision. In other words, it must push the particle outside the obstacle and adjust the fluid flow to satisfy boundary conditions.</p>
<p><a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-1/">Part 1</a>, <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-2/">part 2</a>, and <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-4/">part 4</a> explain boundary conditions and one way to solve them approximately, so I will not repeat that here. This article only describes changes that facilitate particles interacting with convex polyhedra.</p>
<p> </p>
<p><b>Simplified Vorton Interaction with Planes</b></p>
<p>The routine <code>SolveBoundaryConditions</code> iterates through each rigid body and collides vortons and tracers with that body by calling <code>CollideVortonsSlice</code> and <code>CollideTracersSlice</code>. As of this article, <code>ColideVortonsSlice</code> is a new routine, extracted from <code>SolveBoundaryConditions</code> from previous articles.</p>
<p>The code snippet below focuses on changes made to facilitate colliding with convex polytopes. Code in <span >purple bold</span> is new.</p>
<img src="http://software.intel.com/file/43823" /><br /> <br />
<p>Notice that this code first checks whether the particle lies within a bounding sphere, regardless of whether the obstacle is a sphere or polytope. That is a broad-phase collision test.</p>
<p>The routines <code>CollideTracersSlice</code> and <code>RemoveEmbeddedParticles</code> have similar changes. See the demonstration code accompanying this article for details.</p>
<p> </p>
<p><b>Parallelization</b></p>
<p>The routine <code>CollideVortonsSlice</code> was extracted from <code>SolveBoundaryConditions</code> to facilitate parallelizing it with Intel® Threading Building Blocks (Intel® TBB). In addition to extracting that code into its own routine, other changes were made. Previously, the corresponding code directly applied changes to the rigid body’s temperature and momentum. The old code performed operations like this:</p>
<ol>
<li>Read body temperature.</li>
<li>Compute heat exchange based on body temperature.</li>
<li>Write new body temperature.</li>
</ol>
<p>But when run in parallel, such updates cause a race condition, as shown in Table 1.</p>
<p> </p>
<p><b>Table 1.</b> <i>Parallel threads cause a race condition.</i></p>
<table  class="tableFormat1" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<th valign="top" width="339">Thread 1</th><th valign="top" width="339">Thread 2</th>
</tr>
<tr>
<td valign="top" width="339">
<p class="CellBody">Read body temperature.</p>
</td>
<td valign="top" width="339">
<p class="CellBody">Read body temperature.</p>
</td>
</tr>
<tr>
<td valign="top" width="339">
<p class="CellBody">Compute heat exchange based on body temperature.</p>
</td>
<td valign="top" width="339">
<p class="CellBody">Compute heat exchange based on body temperature.</p>
</td>
</tr>
<tr>
<td valign="top" width="339">
<p class="CellBody">–</p>
</td>
<td valign="top" width="339">
<p class="CellBody">Write new body temperature.</p>
</td>
</tr>
<tr>
<td valign="top" width="339">
<p class="CellBody">Write new body temperature.</p>
</td>
<td valign="top" width="339">
<p class="CellBody">–</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>Both threads update a value at the same address (temperature, in this example). Only one thread can "win."</p>
<p>You could solve this issue by synchronizing the code with mutex locks on the body temperature. But doing so would serialize that critical section of code, which would in turn defeat the purpose of parallelizing it.</p>
<p>Instead, have each thread accumulate changes in a variable local to each thread. When the thread terminates, have the parent thread accumulate those changes and apply them to the body. This might seem to be a perfect use case for Intel TBB’s <code>parallel_reduce</code> operation.</p>
<p>There is one more catch, however: That accumulation operation is not associative. (See <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-12/">Part 12</a> for details of a similar problem.) Even though addition is associative for real numbers, it is not for floating-point numbers. To ensure that this parallelized routine is deterministic, you have to spawn and join threads manually, because Intel TBB’s <code>parallel_reduce</code> does not split and join deterministically. Instead, use Intel TBB’s <code>parallel_invoke</code> and manually spawn and join threads.</p>
<img src="http://software.intel.com/file/43824" /><br /> <br />
<p>Create a functor to run <code>CollideVortonsReduce</code> with Intel TBB’s <code>parallel_invoke</code>:</p>
<img src="http://software.intel.com/file/43825" /><br /> <br />
<p>For comparison, the demonstration code accompanying this article also includes code for using Intel TBB’s <code>parallel_reduce</code>. It works—in the sense that it generates a usable result—but it is not deterministic, so using it would impede diagnosing issues.</p>
<p> </p>
<h2 class="sectionHeading">Results</h2>
<p>Let’s replace some of the spheres in previous articles with polytopes.</p>
<p>Although the demonstration code uses boxes, the algorithms and data structures support any convex polytope, as depicted later in Figure 8.</p>
<p> </p>
<p><b>Scenarios</b></p>
<p>Figure 6 shows a flat plate interacting with flames and smoke. Notice that particles move around the plate, and the plate causes vortices to shed from it.</p>
<img src="http://software.intel.com/file/43804" /><br />
<p><b>Figure 6.</b> <i>Various views of a plate above flames</i></p>
<p>Figure 7 shows a flat plate moving horizontally through fluid, leaving a wake with vortices. The code accompanying this article also includes demonstrations with the obstacle rotating about longitudinal and lateral axes, exhibiting the Magnus (curve ball) effect.</p>
<img src="http://software.intel.com/file/43805" /><br />
<p><b>Figure 7.</b> <i>Flat plate moving through fluid</i></p>
<p>Figure 8 shows a polyhedral airfoil moving horizontally through fluid, leaving a wake with vortices. This demonstrates that the technique applies to shapes other than boxes and spheres.</p>
<img src="http://software.intel.com/file/43806" /><br /> <br />
<p><b>Figure 8. </b>Airfoil moving through fluid. This comes from Gourlay (2010), which used a similar formulation to that presented in this article.</p>
<p> </p>
<p><b>Performance</b></p>
<p>Table 2 shows how the collision-detection and response routines perform for the scenario with flames and smoke passing by the flat plate. This scenario had, on average, 49,000 tracer particles and 981 vortex particles (per frame), two spheres, and one box. Tracers hit bodies 8876 times per frame, and vortons hit bodies 63 times per frame. The benchmark ran 6000 frames for each run. The processor was a four-core (eight hardware threads with hyperthreading) Intel® Core™ i7-2600 running at 3.4 GHz.</p>
<p> </p>
<p><b>Table 2.</b> <i>Collision-detection and response routines for the smoke and flame scenario</i></p>
<table  class="tableFormat1" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<th valign="bottom" width="79">No. of threads</th> <th valign="bottom" width="119">Solve boundary conditions</th> <th valign="bottom" width="119">SBC tracers</th> <th valign="bottom" width="119">SBC vortons</th> <th valign="bottom" width="119">Sim update</th> <th valign="bottom" width="119">Total (including render)</th>
</tr>
<tr>
<td valign="top" width="79">
<p class="CellBody">1</p>
</td>
<td valign="top" width="119">
<p class="CellBody">2.42</p>
</td>
<td valign="top" width="119">
<p class="CellBody">2.346</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.057</p>
</td>
<td valign="top" width="119">
<p class="CellBody">4.12</p>
</td>
<td valign="top" width="119">
<p class="CellBody">25.7</p>
</td>
</tr>
<tr>
<td valign="top" width="79">
<p class="CellBody">2</p>
</td>
<td valign="top" width="119">
<p class="CellBody">1.606</p>
</td>
<td valign="top" width="119">
<p class="CellBody">1.563</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.0423</p>
</td>
<td valign="top" width="119">
<p class="CellBody">2.52</p>
</td>
<td valign="top" width="119">
<p class="CellBody">16.3</p>
</td>
</tr>
<tr>
<td valign="top" width="79">
<p class="CellBody">3</p>
</td>
<td valign="top" width="119">
<p class="CellBody">1.134</p>
</td>
<td valign="top" width="119">
<p class="CellBody">1.095</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.0378</p>
</td>
<td valign="top" width="119">
<p class="CellBody">2.15</p>
</td>
<td valign="top" width="119">
<p class="CellBody">11.7</p>
</td>
</tr>
<tr>
<td valign="top" width="79">
<p class="CellBody">4</p>
</td>
<td valign="top" width="119">
<p class="CellBody">1.142</p>
</td>
<td valign="top" width="119">
<p class="CellBody">1.107</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.0348</p>
</td>
<td valign="top" width="119">
<p class="CellBody">2.03</p>
</td>
<td valign="top" width="119">
<p class="CellBody">11.4</p>
</td>
</tr>
<tr>
<td valign="top" width="79">
<p class="CellBody">6</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.804</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.774</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.0312</p>
</td>
<td valign="top" width="119">
<p class="CellBody">1.81</p>
</td>
<td valign="top" width="119">
<p class="CellBody">9.65</p>
</td>
</tr>
<tr>
<td valign="top" width="79">
<p class="CellBody">8</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.784</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.75</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.0303</p>
</td>
<td valign="top" width="119">
<p class="CellBody">1.76</p>
</td>
<td valign="top" width="119">
<p class="CellBody">9.34</p>
</td>
</tr>
<tr>
<td valign="top" width="79">
<p class="CellBody">12</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.69</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.657</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.0303</p>
</td>
<td valign="top" width="119">
<p class="CellBody">1.61</p>
</td>
<td valign="top" width="119">
<p class="CellBody">8.38</p>
</td>
</tr>
<tr>
<td valign="top" width="79">
<p class="CellBody">16</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.718</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.684</p>
</td>
<td valign="top" width="119">
<p class="CellBody">0.0336</p>
</td>
<td valign="top" width="119">
<p class="CellBody">1.64</p>
</td>
<td valign="top" width="119">
<p class="CellBody">8.59</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>Figure 9 shows a plot of the data in the table.</p>
<p ><img src="http://software.intel.com/file/43807" /></p>
<br />
<p ><b>Figure 9. </b><i>Run times for the benchmark scenario</i></p>
<p><b><br /></b></p>
<p><b>Lift</b></p>
<p>Nonrotating spheres do not generate lift. But lift occurs on asymmetric shapes like flat plates and airfoils.</p>
<p>The algorithm to solve boundary conditions generates lift-like impulses. A flat plate moving horizontally through the fluid at an appropriate angle of attack should encounter lift pushing the plate upward. And indeed, this simulation generates a qualitatively similar result—but it’s from deflecting particles that bounce off the obstacle with partially elastic collisions. In contrast, simulations used in science and engineering calculate the pressure the fluid exerts on bodies, and that calculation can include lift. This simulation does not calculate pressure.</p>
<p>Furthermore, the collision response algorithm does not generate new vortons; it only reassigns values for existing vortons in contact with the object. To be more physically accurate, objects should generate new vortons when necessary. For example, vorticity would be generated on the leeward side of the airfoil, and this would generate a low-pressure region behind and above the airfoil, the vertical component of which would be lift. See the "For Further Study" section for more information about more physically accurate ways to calculate realistic pressure and aerodynamic forces on objects immersed in a fluid.</p>
<p> </p>
<h2 class="sectionHeading">Summary</h2>
<p>Using a simple point-to-plane distance formula, you can make fluid effects interact with obstacles that have shapes commonly used to create models in a video game. The algorithm is easy to parallelize using Intel TBB and runs in less than a millisecond for tens of thousands of particles.</p>
<p> </p>
<h2 class="sectionHeading">Future Articles</h2>
<p>Liquids take the shape of their containers on all but one surface, so modeling liquids also implies modeling containers. Future articles will include extending boundary conditions to include interiors, which will allow for creating containers. That will pave the way for a discussion of free surface tracking and surface tension—properties of liquids.</p>
<p> </p>
<h2 class="sectionHeading">For Further Study</h2>
<ul>
<li>Casey Muratori posted a video (<a href="https://mollyrocket.com/849">https://mollyrocket.com/849</a>) that explains the GJK algorithm using straightforward geometry.</li>
<li>Lien and Amato ("Approximate Convex Decomposition of Polyhedra," 2006) describe an algorithm to decompose a concave model into nearly convex shapes. Lien’s Ph.D. dissertation (<a href="http://cs.gmu.edu/~jmlien/masc/uploads/Main/lien-dissertation.pdf">http://cs.gmu.edu/~jmlien/masc/uploads/Main/lien-dissertation.pdf</a>) contains pseudo-code for their algorithms and a comprehensive bibliography on the subject. Also see their technical report (<a href="http://cs.gmu.edu/~jmlien/masc/uploads/Main/cd3d_TR_2006.pdf">http://cs.gmu.edu/~jmlien/masc/uploads/Main/cd3d_TR_2006.pdf</a>).</li>
<li>The Wikipedia article on Convex Hull Algorithms (<a href="http://en.wikipedia.org/wiki/Convex_hull_algorithms">http://en.wikipedia.org/wiki/Convex_hull_algorithms</a>) describes algorithms to obtain the convex hull of a set of points, such as the vertices of a model.</li>
<li>In chapter 6 of <i>Vortex Methods: Theory and Practice</i>, Cottet and Koumoutsakos describe a vorticity creation algorithm to satisfy boundary conditions. In contrast to the algorithm presented here and in <a href="http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-4/">part 4</a>, their algorithm takes into account the entire body at once instead of only a single point at a time.</li>
<li>I presented a formulation similar to the one described in this article in "<a href="http://webstaff.itn.liu.se/~perla/Siggraph2010/content/posters/0008.pdf">Fluid-body simulation using vortex particle operations</a>," an animation poster session at the International Conference on Computer Graphics and Interactive Techniques (SIGGRAPH), Los Angeles in 2010.</li>
</ul>
<h2 class="sectionHeading">About the Author</h2>
<p>Dr. Michael J. Gourlay works as a senior software engineer on interactive entertainment. He previously worked at Electronic Arts Inc. (EA Sports) as the software architect for the Football Sports Business Unit, as a senior lead engineer on <i>Madden* NFL</i>, on character physics and the procedural animation system used by EA on <i>Mixed Martial Arts</i>, and as a lead programmer on <i>NASCAR</i>*. He wrote the visual effects system used in EA games worldwide and patented algorithms for interactive, high-bandwidth online applications. He also developed curricula for and taught at the University of Central Florida, Florida Interactive Entertainment Academy, an interdisciplinary graduate program that teaches programmers, producers, and artists how to make video games and training simulations. Prior to joining EA, he performed scientific research using computational fluid dynamics and the world’s largest massively parallel supercomputers. His previous research also includes nonlinear dynamics in quantum mechanical systems and atomic, molecular, and optical physics. Michael received his degrees in physics and philosophy from Georgia Tech and the University of Colorado Boulder.</p>
<p> </p>
<p><sup>*</sup>Other names and brands may be claimed as the property of others.</p>
<p> </p>
<div id="vc-meta" >
<div id="vc-meta-author">
<div></div>
</div>
<div id="vc-meta-pubdate">05-16-2012</div>
<div id="vc-meta-modificationdate">05-16-2012</div>
<div id="vc-meta-taxonomy">Tech Articles</div>
<div id="vc-meta-category-product">
<div></div>
</div>
<div id="vc-meta-category">
<div></div>
</div>
<div id="vc-meta-thumb">http://software.intel.com/file/43797</div>
<div id="vc-meta-abstract">This is a series on fluid simulation for games. This article describes how to augment the fluid particle system described earlier, interact with rigid bodies with any polyhedral shape, and generate a lift-like force on those bodies.</div>
</div> ]]></description>
      <link>http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-13/</link>
      <pubDate>Wed, 16 May 2012 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-13/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/fluid-simulation-for-video-games-part-13/</guid>
      <category>Visual Computing</category>
      <category>Visual Computing Source</category>
    </item>
    <item>
      <title>Intel® Atom™ x86 Image for Android* Ice Cream Sandwich Installation Instructions - Recommended</title>
      <description><![CDATA[ <p><b>Introduction</b></p>
<p>This document will guide you through installing the Intel® Atom™ x86 image for Android* Ice Cream Sandwich, which can be used for development on Intel’s x86 architecture.</p>
<p><b>Prerequisites</b></p>
<p>The Android x86 Emulator Image requires the Android SDK to be installed. For instructions on installing and configuring the Android SDK, refer to the Android developer website (<a href="http://developer.android.com/sdk/">http://developer.android.com/sdk/</a>).</p>
<p><i>Optional: The x86 Emulator Image for Android can be accelerated using Intel Hardware Accelerated Execution Manager (HAXM). For more information, refer to the “Optimization” section of this document.</i><br /> <br /> <i></i></p>
<p align="center"><b>Installation</b></p>
<p><b>Downloading through Android SDK Manager</b></p>
<ol>
<li>Start the Android SDK Manager.</li>
<li>Under Android 4.0.3 (API 15), select “Intel x86 Atom System Image”:<br /> <br /> <img src="http://software.intel.com/file/43826" /> </li>
<li>Once selected, click the Install Package button.</li>
<li>Review the Intel Corporation license agreement. If you accept the terms, select Accept and click Install.</li>
<li>The SDK Manager will download and extract the system image to the appropriate location within the Android SDK directory.</li>
</ol>
<p> </p>
<p><b>Using the System Image</b></p>
<ol>
<li>Start the Android AVD Manager and create a new AVD, setting “Target” to “Android 4.0.3 – API Level 15”, and “CPU/ABI” to “Intel Atom (x86):<br /> <br /> <img src="http://software.intel.com/file/43827" /><br /> <br /> <br /> <i>Note: if the “Intel Atom (x86)” CPU/ABI option is not available, please make sure that the system image is installed correctly.</i></li>
<li>Click the “Create AVD” button.</li>
<li>The AVD has been successfully created and is now ready to use:<br /> <br /> <img src="http://software.intel.com/file/43828" /> </li>
</ol>
<p><br /> <br /> <b></b></p>
<p align="center"><b>Optimization</b></p>
<p><b>CPU Acceleration</b></p>
<p>The performance of Intel Atom x86 Image for Android Ice Cream Sandwich can be improved using hardware-based virtualization using Intel VT-x technology.</p>
<p>If your computer has an Intel processor with VT-x support, it is recommended that Intel Hardware Acceleration Execution Manager (HAXM) be used in conjunction with this system image. For more information about Intel HAXM, visit <a href="http://www.intel.com/software/android">http://www.intel.com/software/android</a>.</p>
<p><b>Note: </b>Intel HAXM is for Windows and OS X operating systems only. For Linux hosts, Kernel-based Virtual Machine (KVM) can be used to accelerate emulation performance. For information on installing and configuring KVM on Ubuntu, refer to the following guide: <a href="https://help.ubuntu.com/community/KVM/Installation">https://help.ubuntu.com/community/KVM/Installation</a></p>
<p><b>GPU Acceleration</b></p>
<p>The Intel Atom x86 Image for Android Ice Cream Sandwich can make use of hardware GPU features to increase the performance of games, graphics-intensive programs, and user interface elements.</p>
<p><b><i>Note:</i></b><i> The functionality and performance of GPU acceleration is highly dependent on your computer’s graphics card and graphics drivers. </i></p>
<p>To use hardware GPU acceleration, perform the following steps:</p>
<ol>
<li>Open the Android AVD Manager.</li>
<li>Select the AVD, and click the “Edit” button.</li>
<li>The AVD editor window will appear. In the Hardware section, click the “New” button:<br /> <br /> <img src="http://software.intel.com/file/43829" /> </li>
<li>In the Property drop down box, select “GPU Emulation”.<br /> <br /> <img src="http://software.intel.com/file/43830" /> </li>
<li>Click OK.</li>
<li>After the GPU Emulation property has been added, change the “value” to “yes”.<br /> <br /> <img src="http://software.intel.com/file/43831" /> </li>
<li>Click the “Edit AVD” button to save the AVD.</li>
<li>After the AVD has been modified, a dialog will appear confirming the AVD settings:<br /> <br /><br /> <br /> <img src="http://software.intel.com/file/43832" /><br /> <br /> <i>In the confirmation dialog, the “hw.gpu.enabled=yes” line indicates that GPU acceleration is enabled for that particular AVD.<br /> <b>Note:</b> The GPU acceleration must be enabled on a per-AVD basis. </i></li>
</ol>
<p>Copyright (C) 2012 Intel Corporation.  All rights reserved.</p>
<p>Intel, Atom, and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries.</p>
<p>All products, computer systems, dates, and figures specified are preliminary based on current expectations, and are subject to change without notice.</p>
<p>* Other names and brands may be claimed as the property of others.</p> ]]></description>
      <link>http://software.intel.com/en-us/articles/intel-atom-x86-image-for-android-ice-cream-sandwich-installation-instructions-recommended/</link>
      <pubDate>Tue, 15 May 2012 00:00:00 -0700</pubDate>
      <comments>http://software.intel.com/en-us/articles/intel-atom-x86-image-for-android-ice-cream-sandwich-installation-instructions-recommended/#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/en-us/articles/intel-atom-x86-image-for-android-ice-cream-sandwich-installation-instructions-recommended/</guid>
      <category>Android* Developers</category>
    </item>
  </channel></rss>
