<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>*drawlogic &#187; INTERFACE</title>
	<atom:link href="http://drawlogic.com/tag/interface/feed/" rel="self" type="application/rss+xml" />
	<link>http://drawlogic.com</link>
	<description>interactive and game development technologies for the web - flash, flex, unity3d, silverlight, javascript</description>
	<lastBuildDate>Thu, 17 May 2012 13:12:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>AS3 Geocode with Flex, Papervision3D Tutorial and Other 3D in Flash Goodness</title>
		<link>http://drawlogic.com/2008/06/11/as3-geocode-with-flex-papervision3d-tutorial-and-other-3d-in-flash-goodness/</link>
		<comments>http://drawlogic.com/2008/06/11/as3-geocode-with-flex-papervision3d-tutorial-and-other-3d-in-flash-goodness/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 19:16:52 +0000</pubDate>
		<dc:creator>drawk</dc:creator>
				<category><![CDATA[ACTIONSCRIPT3]]></category>
		<category><![CDATA[ARCHITECT]]></category>
		<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[GAMEDEV]]></category>
		<category><![CDATA[PROGRAMMING]]></category>
		<category><![CDATA[TECHNOLOGY]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[ACTIONSCRIPT]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[FLASH]]></category>
		<category><![CDATA[FLEX]]></category>
		<category><![CDATA[geocode]]></category>
		<category><![CDATA[globe]]></category>
		<category><![CDATA[INTERFACE]]></category>
		<category><![CDATA[maps]]></category>

		<guid isPermaLink="false">http://drawk.wordpress.com/?p=211</guid>
		<description><![CDATA[Ever wanted to geocode in 3d with flex and AS3?  Mark Walters added a great simplified approach to this on the EDGE Adobe site that helps get you started.  It uses Yahoo maps to get the lat/long and then has a globe that you can add markers onto. Some other great uses of 3d and [...]]]></description>
			<content:encoded><![CDATA[<p>Ever wanted to <a href="http://www.adobe.com/newsletters/edge/june2008/articles/article2/index.html?trackingid=DEKYF" target="_blank">geocode in 3d with flex and AS3</a>?  <a href="http://www.digitalflipbook.com/archives/2008/06/adobe_edge_arti.php" target="_blank">Mark Walters</a> added a great simplified approach to this on the EDGE Adobe site that helps get you started.  It uses Yahoo maps to get the lat/long and then has a globe that you can add markers onto.</p>
<p><a href="http://www.adobe.com/newsletters/edge/june2008/articles/article2/index.html?trackingid=DEKYF" target="_blank"><img src="http://farm4.static.flickr.com/3119/2570419347_1e504e5ac8_o.png" alt="" width="450" height="371" /></a></p>
<p>Some other great uses of 3d and interface are here, link roundup:</p>
<ul>
<li><a href="http://acrobat.com" target="_blank">New acrobat.com which includes buzzword (one app that makes RIA look good) </a></li>
<li><a href="http://labs.bigspaceship.com/2008/04/28/morphing-objects-in-pv3d/" target="_blank">Morphing objects in papervision 3d from Bigspaceship Labs</a></li>
<li><a href="http://www.hitta.se/3d/3d_splash.aspx" target="_blank">Absolutely sick 3D maps in some cases better than Google Earth (slow to load but worth it)</a></li>
<li><a href="http://www.cleoag.ru/labs/flex/parkseasons/" target="_blank">Den Ivanov&#8217;s Seasons</a></li>
<li><a href="http://taggalaxy.de/" target="_blank">Tagworld (flickr tag globe)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://drawlogic.com/2008/06/11/as3-geocode-with-flex-papervision3d-tutorial-and-other-3d-in-flash-goodness/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>AS3 Vector 3D Engine Five3D from Mathieu Badimon Released</title>
		<link>http://drawlogic.com/2008/04/15/as3-vector-3d-engine-five3d-from-mathieu-badimon-released/</link>
		<comments>http://drawlogic.com/2008/04/15/as3-vector-3d-engine-five3d-from-mathieu-badimon-released/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 13:54:52 +0000</pubDate>
		<dc:creator>drawk</dc:creator>
				<category><![CDATA[ACTIONSCRIPT]]></category>
		<category><![CDATA[ACTIONSCRIPT3]]></category>
		<category><![CDATA[ARCHITECT]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[FLASH]]></category>
		<category><![CDATA[FLEX]]></category>
		<category><![CDATA[PROGRAMMING]]></category>
		<category><![CDATA[TECHNOLOGY]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[ENGINE]]></category>
		<category><![CDATA[five3d]]></category>
		<category><![CDATA[INTERFACE]]></category>
		<category><![CDATA[labs]]></category>
		<category><![CDATA[VECTOR]]></category>

		<guid isPermaLink="false">http://drawk.wordpress.com/?p=183</guid>
		<description><![CDATA[Mathieu Badimon released the sweet Five3D vector 3d engine recently. Zeh noted this (and has some experiments) but this is a tracking and howto blog and I like to keep a timeline of influential releases. You might have seen the Mathieu Badimon labs previously with the very nice scroll handle and technique and ability to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://five3d.mathieu-badimon.com/" target="_blank"><img class="alignright alignnone size-medium wp-image-184" style="float:right;margin:10px;" src="http://drawk.files.wordpress.com/2008/04/five3d.png" alt="" /></a><a href="http://www.mathieu-badimon.com/" target="_blank">Mathieu Badimon</a> released <a href="http://five3d.mathieu-badimon.com/" target="_blank">the sweet Five3D vector 3d engine</a> recently.  <a href="http://labs.zeh.com.br/blog/?p=146" target="_blank">Zeh</a> noted this  (<a href="http://labs.zeh.com.br/blog/?p=130" target="_blank">and has some experiments</a>) but this is a tracking and howto blog and I like to keep a timeline of influential releases.</p>
<p>You might have seen the <a href="http://lab.mathieu-badimon.com/" target="_blank">Mathieu Badimon labs</a> previously with the very nice scroll handle and technique and ability to rotate and translate the vector objects in 3d space.  Now you too can <a href="http://five3d.mathieu-badimon.com/" target="_blank">make interfaces with the same cool library</a>.</p>
<p>The one thing I like about this vector engine is well first of all it is vector and secondly it is pretty fast and not too processor intensive, but looks killer.</p>
]]></content:encoded>
			<wfw:commentRss>http://drawlogic.com/2008/04/15/as3-vector-3d-engine-five3d-from-mathieu-badimon-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AS3 Real-Time Raytracing</title>
		<link>http://drawlogic.com/2008/03/22/as3-real-time-raytracing/</link>
		<comments>http://drawlogic.com/2008/03/22/as3-real-time-raytracing/#comments</comments>
		<pubDate>Sat, 22 Mar 2008 22:36:39 +0000</pubDate>
		<dc:creator>drawk</dc:creator>
				<category><![CDATA[3d]]></category>
		<category><![CDATA[ACTIONSCRIPT]]></category>
		<category><![CDATA[ACTIONSCRIPT3]]></category>
		<category><![CDATA[AIF]]></category>
		<category><![CDATA[ALGORITHM]]></category>
		<category><![CDATA[ANIMATION]]></category>
		<category><![CDATA[ARCHITECT]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[EFFECTS]]></category>
		<category><![CDATA[FLASH]]></category>
		<category><![CDATA[FLEX]]></category>
		<category><![CDATA[GAMEDEV]]></category>
		<category><![CDATA[GAMES]]></category>
		<category><![CDATA[OPEN SOURCE]]></category>
		<category><![CDATA[PERFORMANCE]]></category>
		<category><![CDATA[PIXEL]]></category>
		<category><![CDATA[PROGRAMMING]]></category>
		<category><![CDATA[RENDERING]]></category>
		<category><![CDATA[TECHNOLOGY]]></category>
		<category><![CDATA[VISUALIZATION]]></category>
		<category><![CDATA[INTERFACE]]></category>
		<category><![CDATA[raytrace]]></category>
		<category><![CDATA[render]]></category>

		<guid isPermaLink="false">http://drawlogic.com/?p=172</guid>
		<description><![CDATA[Forrest Briggs throwing down with a real-time raytracer in AS3. Also a C++ OpenGL version sample on the page. Real-time pixel manipulation in flash is getting faster, but is still probably going to have to be faked in AS3, maybe AS4 will provide us per pixel speeds that Andre Michelle has been harping on since [...]]]></description>
			<content:encoded><![CDATA[<p>Forrest Briggs throwing down with a <a href="http://www.laserpirate.com/as3raytracer/" target="_blank">real-time raytracer in AS3</a>.  Also a C++ <a href="http://www.laserpirate.com/as3raytracer/" target="_blank">OpenGL version sample on the page</a>.</p>
<p>Real-time pixel manipulation in flash is getting faster, but is still probably going to have to be faked in AS3, maybe AS4 will provide us per pixel speeds that Andre Michelle has been harping on since flash 8.5. Native operations can be much faster in that area. AIF might look to change some of that but that is Flash 10.</p>
<p><a href="http://www.laserpirate.com/as3raytracer/" target="_blank"><img src="http://i81.photobucket.com/albums/j223/drawkbox/raytracer.png" height="304" width="420" /></a></p>
<p>Here is the code for the as3 raytracer.  Read more at <a href="http://www.laserpirate.com/as3raytracer/" target="_blank">laserpirate</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">package</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">import</span> flash.<span style="color: #660066;">display</span>.<span style="color: #660066;">Sprite</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">import</span> flash.<span style="color: #660066;">display</span>.<span style="color: #660066;">Bitmap</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">import</span> flash.<span style="color: #660066;">display</span>.<span style="color: #660066;">BitmapData</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">import</span> flash.<span style="color: #660066;">events</span>.<span style="color: #660066;">Event</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">import</span> flash.<span style="color: #660066;">utils</span>.<span style="color: #660066;">getTimer</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">import</span> flash.<span style="color: #660066;">events</span>.<span style="color: #660066;">MouseEvent</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">import</span> flash.<span style="color: #660066;">text</span>.<span style="color: #660066;">TextField</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">import</span> flash.<span style="color: #660066;">text</span>.<span style="color: #660066;">TextFormat</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">class</span> RayTracer <span style="color: #003366; font-weight: bold;">extends</span> Sprite
<span style="color: #009900;">&#123;</span>
 <span style="color: #003366; font-weight: bold;">private</span> <span style="color: #003366; font-weight: bold;">var</span> t<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">private</span> <span style="color: #003366; font-weight: bold;">var</span> dt<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> .01<span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">private</span> <span style="color: #003366; font-weight: bold;">var</span> frameTimeTxt<span style="color: #339933;">:</span>TextField<span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #003366; font-weight: bold;">public</span> static <span style="color: #003366; font-weight: bold;">const</span> BUFFER_WIDTH<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span> <span style="color: #CC0000;">160</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> static <span style="color: #003366; font-weight: bold;">const</span> BUFFER_HEIGHT<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span> <span style="color: #CC0000;">120</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> static <span style="color: #003366; font-weight: bold;">const</span> BUFFER_SCALEDDOWN<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span> <span style="color: #CC0000;">320</span> <span style="color: #339933;">/</span> BUFFER_WIDTH<span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #003366; font-weight: bold;">public</span> static <span style="color: #003366; font-weight: bold;">const</span> HALF_BUFFER_WIDTH<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span> BUFFER_WIDTH <span style="color: #339933;">/</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> static <span style="color: #003366; font-weight: bold;">const</span> HALF_BUFFER_HEIGHT<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span> BUFFER_HEIGHT <span style="color: #339933;">/</span> <span style="color: #CC0000;">2</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #003366; font-weight: bold;">private</span> <span style="color: #003366; font-weight: bold;">var</span> outputBitmapData<span style="color: #339933;">:</span>BitmapData<span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">private</span> <span style="color: #003366; font-weight: bold;">var</span> outputBitmap<span style="color: #339933;">:</span>Bitmap<span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> FOV<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> <span style="color: #CC0000;">20</span><span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> sphereCenterX<span style="color: #339933;">:</span>Array 	<span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>	<span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>		<span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> 		<span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> sphereCenterY<span style="color: #339933;">:</span>Array 	<span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span>.2<span style="color: #339933;">,</span>	.4<span style="color: #339933;">,</span> 		<span style="color: #CC0000;">100.5</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> sphereCenterZ<span style="color: #339933;">:</span>Array 	<span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">4</span><span style="color: #339933;">,</span> 	<span style="color: #CC0000;">4</span><span style="color: #339933;">,</span>		<span style="color: #CC0000;">4</span><span style="color: #339933;">,</span> 		<span style="color: #CC0000;">10</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> sphereRadius<span style="color: #339933;">:</span>Array 	<span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>.35<span style="color: #339933;">,</span> .35<span style="color: #339933;">,</span>	.25<span style="color: #339933;">,</span> 	<span style="color: #CC0000;">100</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> sphereR<span style="color: #339933;">:</span>Array 		<span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">255</span><span style="color: #339933;">,</span>	<span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>		<span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>		<span style="color: #CC0000;">20</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> sphereG<span style="color: #339933;">:</span>Array 		<span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> 	<span style="color: #CC0000;">150</span><span style="color: #339933;">,</span>	<span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>		<span style="color: #CC0000;">20</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> sphereB<span style="color: #339933;">:</span>Array 		<span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> 	<span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>		<span style="color: #CC0000;">255</span><span style="color: #339933;">,</span>	<span style="color: #CC0000;">20</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> sphereReflects<span style="color: #339933;">:</span>Array <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> sphereReflectiveness<span style="color: #339933;">:</span>Array <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>.3<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> sphere2dX<span style="color: #339933;">:</span>Array <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span>sphereCenterX.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> sphere2dY<span style="color: #339933;">:</span>Array <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span>sphereCenterX.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> sphere2dR<span style="color: #339933;">:</span>Array <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span>sphereCenterX.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">var</span> numSpheres <span style="color: #339933;">=</span> sphereCenterX.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> skyR<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span>  <span style="color: #CC0000;">20</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">var</span> skyG<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span>  <span style="color: #CC0000;">20</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">var</span> skyB<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span>  <span style="color: #CC0000;">20</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">var</span> skyColor<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>skyR<span style="color: #339933;">&lt;</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span><span style="color: #CC0000;">16</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>skyG<span style="color: #339933;">&lt;&amp;</span>lt<span style="color: #339933;">;</span><span style="color: #CC0000;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> skyB<span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">var</span> ambientIllumination<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> .1<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> canvas<span style="color: #339933;">:</span>BlankClip<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> theta<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">var</span> mouseIsDown<span style="color: #339933;">:</span>Boolean <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">var</span> mouseDownTheta<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">var</span> mouseDownX<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">function</span> RayTracer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
 	outputBitmapData <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> BitmapData<span style="color: #009900;">&#40;</span>BUFFER_WIDTH<span style="color: #339933;">,</span> BUFFER_HEIGHT<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	outputBitmap <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Bitmap<span style="color: #009900;">&#40;</span>outputBitmapData<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	addChild<span style="color: #009900;">&#40;</span>outputBitmap<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	<span style="color: #006600; font-style: italic;">//outputBitmap.smoothing = true;</span>
&nbsp;
		outputBitmap.<span style="color: #660066;">width</span><span style="color: #339933;">=</span> <span style="color: #CC0000;">320</span><span style="color: #339933;">;</span>
 	outputBitmap.<span style="color: #660066;">height</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">240</span><span style="color: #339933;">;</span>
&nbsp;
		canvas <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> BlankClip<span style="color: #339933;">;</span>
 	addChild<span style="color: #009900;">&#40;</span>canvas<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	canvas.<span style="color: #660066;">buttonMode</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
 	canvas.<span style="color: #660066;">useHandCursor</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
&nbsp;
		frameTimeTxt <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> TextField<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	frameTimeTxt.<span style="color: #660066;">defaultTextFormat</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> TextFormat<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Arial&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	frameTimeTxt.<span style="color: #660066;">x</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">8</span><span style="color: #339933;">;</span>
 	frameTimeTxt.<span style="color: #660066;">y</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">8</span><span style="color: #339933;">;</span>
 	frameTimeTxt.<span style="color: #660066;">width</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">640</span><span style="color: #339933;">;</span>
 	frameTimeTxt.<span style="color: #660066;">textColor</span> <span style="color: #339933;">=</span> 0xFFFFFF<span style="color: #339933;">;</span>
 	frameTimeTxt.<span style="color: #660066;">selectable</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
 	addChild<span style="color: #009900;">&#40;</span>frameTimeTxt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		t <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
 	addEventListener<span style="color: #009900;">&#40;</span>Event.<span style="color: #660066;">ENTER_FRAME</span><span style="color: #339933;">,</span> update<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		canvas.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span>MouseEvent.<span style="color: #660066;">MOUSE_DOWN</span><span style="color: #339933;">,</span> mouseDownHandler<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	canvas.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span>MouseEvent.<span style="color: #660066;">MOUSE_UP</span><span style="color: #339933;">,</span> mouseUpHandler<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">function</span> mouseDownHandler<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">void</span>
 <span style="color: #009900;">&#123;</span>
 	mouseIsDown <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
 	mouseDownX <span style="color: #339933;">=</span> stage.<span style="color: #660066;">mouseX</span><span style="color: #339933;">;</span>
 	mouseDownTheta <span style="color: #339933;">=</span> theta<span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">function</span> mouseUpHandler<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">void</span>
 <span style="color: #009900;">&#123;</span>
 	mouseIsDown <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">function</span> update<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:*</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
 	<span style="color: #006600; font-style: italic;">// start frame timer and update global time</span>
 	<span style="color: #003366; font-weight: bold;">var</span> timer<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> getTimer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	t <span style="color: #339933;">+=</span> dt<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// handle mouse rotation</span>
 	<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> mouseIsDown <span style="color: #009900;">&#41;</span> theta <span style="color: #339933;">=</span> mouseDownTheta <span style="color: #339933;">-</span> .0015 <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span>stage.<span style="color: #660066;">mouseX</span> <span style="color: #339933;">-</span> mouseDownX<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	theta <span style="color: #339933;">+=</span> dt<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// do some funky animation</span>
 	sphereCenterX<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> .5<span style="color: #339933;">*</span>Math.<span style="color: #660066;">sin</span><span style="color: #009900;">&#40;</span>theta<span style="color: #339933;">*</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	sphereCenterZ<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span><span style="color: #CC0000;">1</span> <span style="color: #339933;">+</span> .5<span style="color: #339933;">*</span>Math.<span style="color: #660066;">cos</span><span style="color: #009900;">&#40;</span>theta<span style="color: #339933;">*</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		sphereCenterX<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> .5<span style="color: #339933;">*</span>Math.<span style="color: #660066;">sin</span><span style="color: #009900;">&#40;</span>theta<span style="color: #339933;">*</span><span style="color: #CC0000;">5</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">2</span> <span style="color: #339933;">*</span> Math.<span style="color: #660066;">PI</span> <span style="color: #339933;">/</span> <span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	sphereCenterZ<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span> <span style="color: #339933;">+</span> .5<span style="color: #339933;">*</span>Math.<span style="color: #660066;">cos</span><span style="color: #009900;">&#40;</span>theta<span style="color: #339933;">*</span><span style="color: #CC0000;">5</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">2</span> <span style="color: #339933;">*</span> Math.<span style="color: #660066;">PI</span> <span style="color: #339933;">/</span> <span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		sphereCenterX<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> .5<span style="color: #339933;">*</span>Math.<span style="color: #660066;">sin</span><span style="color: #009900;">&#40;</span>theta<span style="color: #339933;">*</span><span style="color: #CC0000;">5</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">4</span> <span style="color: #339933;">*</span> Math.<span style="color: #660066;">PI</span> <span style="color: #339933;">/</span> <span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	sphereCenterZ<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span> <span style="color: #339933;">+</span> .5<span style="color: #339933;">*</span>Math.<span style="color: #660066;">cos</span><span style="color: #009900;">&#40;</span>theta<span style="color: #339933;">*</span><span style="color: #CC0000;">5</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">4</span> <span style="color: #339933;">*</span> Math.<span style="color: #660066;">PI</span> <span style="color: #339933;">/</span> <span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// reused variables</span>
 	<span style="color: #003366; font-weight: bold;">var</span> x<span style="color: #339933;">:</span>int<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> y<span style="color: #339933;">:</span>int<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">:</span>int<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> j<span style="color: #339933;">:</span>int<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> r<span style="color: #339933;">:</span>int<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> g<span style="color: #339933;">:</span>int<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> b<span style="color: #339933;">:</span>int<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> dx<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> dy<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> rayDirX<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> rayDirY<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> rayDirZ<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> rayDirMag<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> reflectRayDirX<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> reflectRayDirY<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> reflectRayDirZ<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> intersectionX<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> intersectionY<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> intersectionZ<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> reflectIntersectionX<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> reflectIntersectionY<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> reflectIntersectionZ<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> rayToSphereCenterX<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> rayToSphereCenterY<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> rayToSphereCenterZ<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> lengthRTSC2<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> closestApproach<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> halfCord2<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> dist<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> normalX<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> normalY<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> normalZ<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> normalMag<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> illumination<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> reflectIllumination<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003366; font-weight: bold;">var</span> reflectR<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> reflectG<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> reflectB<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// setup light dir</span>
 	<span style="color: #003366; font-weight: bold;">var</span> lightDirX<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> .3<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> lightDirY<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> lightDirZ<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> <span style="color: #339933;">-</span>.5<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> lightDirMag<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">/</span>Math.<span style="color: #660066;">sqrt</span><span style="color: #009900;">&#40;</span>lightDirX<span style="color: #339933;">*</span>lightDirX <span style="color: #339933;">+</span>lightDirY<span style="color: #339933;">*</span>lightDirY <span style="color: #339933;">+</span>lightDirZ<span style="color: #339933;">*</span>lightDirZ<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	lightDirX <span style="color: #339933;">*=</span> lightDirMag<span style="color: #339933;">;</span>
 	lightDirY <span style="color: #339933;">*=</span> lightDirMag<span style="color: #339933;">;</span>
 	lightDirZ <span style="color: #339933;">*=</span> lightDirMag<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// vars used to in intersection tests</span>
 	<span style="color: #003366; font-weight: bold;">var</span> closestIntersectionDist<span style="color: #339933;">:</span>Number<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> closestSphereIndex<span style="color: #339933;">:</span>int<span style="color: #339933;">;</span>
 	<span style="color: #003366; font-weight: bold;">var</span> reflectClosestSphereIndex<span style="color: #339933;">:</span>int<span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// compute screen space bounding circles</span>
 	<span style="color: #006600; font-style: italic;">//canvas.graphics.clear();</span>
 	<span style="color: #006600; font-style: italic;">//canvas.graphics.lineStyle(1, 0xFF0000, .25);</span>
 	<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> numSpheres<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span>
 	<span style="color: #009900;">&#123;</span>
 		sphere2dX<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>BUFFER_WIDTH <span style="color: #009966; font-style: italic;">/ 2 + FOV * sphereCenterX[i] /</span> sphereCenterZ<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 		sphere2dY<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>BUFFER_HEIGHT <span style="color: #009966; font-style: italic;">/2 + FOV * sphereCenterY[i] /</span> sphereCenterZ<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 		sphere2dR<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #CC0000;">3</span> <span style="color: #339933;">*</span> FOV <span style="color: #339933;">*</span> sphereRadius<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">/</span> sphereCenterZ<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 		<span style="color: #006600; font-style: italic;">//canvas.graphics.drawCircle(sphere2dX[i]*BUFFER_SCALEDDOWN, sphere2dY[i]*BUFFER_SCALEDDOWN, sphere2dR[i]*BUFFER_SCALEDDOWN);</span>
 		sphere2dR<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*=</span> sphere2dR<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// store the squared value</span>
 	<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// write to each pixel</span>
 	outputBitmapData.<span style="color: #660066;">lock</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>y <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> y <span style="color: #339933;">&lt;</span> BUFFER_HEIGHT<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>y<span style="color: #009900;">&#41;</span>
 	<span style="color: #009900;">&#123;</span>
 		<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>x <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> x <span style="color: #339933;">&lt;</span> BUFFER_WIDTH<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>x<span style="color: #009900;">&#41;</span>
 		<span style="color: #009900;">&#123;</span>
 			<span style="color: #006600; font-style: italic;">// compute ray direction</span>
 			rayDirX <span style="color: #339933;">=</span> x <span style="color: #339933;">-</span> HALF_BUFFER_WIDTH<span style="color: #339933;">;</span>
 			rayDirY <span style="color: #339933;">=</span> y <span style="color: #339933;">-</span> HALF_BUFFER_HEIGHT<span style="color: #339933;">;</span>
 			rayDirZ <span style="color: #339933;">=</span> FOV<span style="color: #339933;">;</span>
&nbsp;
				rayDirMag <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">/</span>Math.<span style="color: #660066;">sqrt</span><span style="color: #009900;">&#40;</span>rayDirX <span style="color: #339933;">*</span> rayDirX <span style="color: #339933;">+</span> rayDirY <span style="color: #339933;">*</span> rayDirY <span style="color: #339933;">+</span>rayDirZ <span style="color: #339933;">*</span> rayDirZ<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 			rayDirX <span style="color: #339933;">*=</span> rayDirMag<span style="color: #339933;">;</span>
 			rayDirY <span style="color: #339933;">*=</span> rayDirMag<span style="color: #339933;">;</span>
 			rayDirZ <span style="color: #339933;">*=</span> rayDirMag<span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #006600; font-style: italic;">/// trace the primary ray ///</span>
 			closestIntersectionDist <span style="color: #339933;">=</span> Number.<span style="color: #660066;">POSITIVE_INFINITY</span><span style="color: #339933;">;</span>
 			closestSphereIndex <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span>
 			<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> numSpheres<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span>
 			<span style="color: #009900;">&#123;</span>
 				<span style="color: #006600; font-style: italic;">// check against screen space bounding circle</span>
 				dx <span style="color: #339933;">=</span> x <span style="color: #339933;">-</span> sphere2dX<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 				dy <span style="color: #339933;">=</span> y <span style="color: #339933;">-</span> sphere2dY<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 				<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> dx <span style="color: #339933;">*</span> dx <span style="color: #339933;">+</span> dy <span style="color: #339933;">*</span> dy <span style="color: #339933;">&gt;</span> sphere2dR<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #006600; font-style: italic;">// begin actual ray tracing if its inside the bounding circle</span>
&nbsp;
					lengthRTSC2 <span style="color: #339933;">=</span> 		sphereCenterX<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> sphereCenterX<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span>
 									sphereCenterY<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> sphereCenterY<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span>
 									sphereCenterZ<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> sphereCenterZ<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
					closestApproach <span style="color: #339933;">=</span>	sphereCenterX<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> rayDirX <span style="color: #339933;">+</span>
 									sphereCenterY<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> rayDirY <span style="color: #339933;">+</span>
 									sphereCenterZ<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> rayDirZ<span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> closestApproach <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">// intersection behind the origin</span>
 					<span style="color: #000066; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
&nbsp;
					halfCord2 <span style="color: #339933;">=</span> sphereRadius<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> sphereRadius<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> lengthRTSC2 <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>closestApproach <span style="color: #339933;">*</span> closestApproach<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 				<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> halfCord2 <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">// ray misses the sphere</span>
 					<span style="color: #000066; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #006600; font-style: italic;">// ray hits the sphere</span>
 				dist <span style="color: #339933;">=</span> closestApproach <span style="color: #339933;">-</span> Math.<span style="color: #660066;">sqrt</span><span style="color: #009900;">&#40;</span>halfCord2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 				<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> dist <span style="color: #339933;">&lt;</span> closestIntersectionDist <span style="color: #009900;">&#41;</span>
 				<span style="color: #009900;">&#123;</span>
 					closestIntersectionDist <span style="color: #339933;">=</span> dist<span style="color: #339933;">;</span>
 					closestSphereIndex<span style="color: #339933;">=</span>i<span style="color: #339933;">;</span>
 				<span style="color: #009900;">&#125;</span>
 			<span style="color: #009900;">&#125;</span>
 			<span style="color: #006600; font-style: italic;">/// end of trace primary ray ///</span>
&nbsp;
				<span style="color: #006600; font-style: italic;">// primary ray doesn't hit anything</span>
 			<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> closestSphereIndex <span style="color: #339933;">==</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span>
 			<span style="color: #009900;">&#123;</span>
 				outputBitmapData.<span style="color: #660066;">setPixel</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> skyColor<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 			<span style="color: #009900;">&#125;</span>
 			<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #006600; font-style: italic;">// primary ray hits a sphere.. calculate shading, shadow and reflection</span>
 			<span style="color: #009900;">&#123;</span>
 				<span style="color: #006600; font-style: italic;">// location of ray-sphere intersection</span>
 				intersectionX <span style="color: #339933;">=</span> rayDirX <span style="color: #339933;">*</span> closestIntersectionDist<span style="color: #339933;">;</span>
 				intersectionY <span style="color: #339933;">=</span> rayDirY <span style="color: #339933;">*</span> closestIntersectionDist<span style="color: #339933;">;</span>
 				intersectionZ <span style="color: #339933;">=</span> rayDirZ <span style="color: #339933;">*</span> closestIntersectionDist<span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #006600; font-style: italic;">// sphere normal at intersection point</span>
 				normalX <span style="color: #339933;">=</span> intersectionX <span style="color: #339933;">-</span> sphereCenterX<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 				normalY <span style="color: #339933;">=</span> intersectionY <span style="color: #339933;">-</span> sphereCenterY<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 				normalZ <span style="color: #339933;">=</span> intersectionZ <span style="color: #339933;">-</span> sphereCenterZ<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 				normalX <span style="color: #339933;">/=</span> sphereRadius<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// could be multiply by precacluated 1/rad</span>
 				normalY <span style="color: #339933;">/=</span> sphereRadius<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 				normalZ <span style="color: #339933;">/=</span> sphereRadius<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #006600; font-style: italic;">// diffuse illumination coef</span>
 				illumination <span style="color: #339933;">=</span> 	normalX <span style="color: #339933;">*</span> lightDirX <span style="color: #339933;">+</span>
 								normalY <span style="color: #339933;">*</span> lightDirY <span style="color: #339933;">+</span>
 								normalZ <span style="color: #339933;">*</span> lightDirZ<span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> illumination <span style="color: #339933;">&lt;</span> ambientIllumination <span style="color: #009900;">&#41;</span>
 					illumination <span style="color: #339933;">=</span> ambientIllumination<span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #006600; font-style: italic;">/// trace a shadow ray ///</span>
 				<span style="color: #003366; font-weight: bold;">var</span> isInShadow<span style="color: #339933;">:</span>Boolean <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
 				<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>j <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> numSpheres<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>j<span style="color: #009900;">&#41;</span>
 				<span style="color: #009900;">&#123;</span>
 					<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> j <span style="color: #339933;">==</span> closestSphereIndex <span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
&nbsp;
						rayToSphereCenterX <span style="color: #339933;">=</span> sphereCenterX<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> intersectionX<span style="color: #339933;">;</span>
 					rayToSphereCenterY <span style="color: #339933;">=</span> sphereCenterY<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> intersectionY<span style="color: #339933;">;</span>
 					rayToSphereCenterZ <span style="color: #339933;">=</span> sphereCenterZ<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> intersectionZ<span style="color: #339933;">;</span>
&nbsp;
						lengthRTSC2 <span style="color: #339933;">=</span> 		rayToSphereCenterX <span style="color: #339933;">*</span> rayToSphereCenterX <span style="color: #339933;">+</span>
 										rayToSphereCenterY <span style="color: #339933;">*</span> rayToSphereCenterY <span style="color: #339933;">+</span>
 										rayToSphereCenterZ <span style="color: #339933;">*</span> rayToSphereCenterZ<span style="color: #339933;">;</span>
&nbsp;
						closestApproach <span style="color: #339933;">=</span>	rayToSphereCenterX <span style="color: #339933;">*</span> lightDirX <span style="color: #339933;">+</span>
 										rayToSphereCenterY <span style="color: #339933;">*</span> lightDirY <span style="color: #339933;">+</span>
 										rayToSphereCenterZ <span style="color: #339933;">*</span> lightDirZ<span style="color: #339933;">;</span>
 					<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> closestApproach <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">// intersection behind the origin</span>
 						<span style="color: #000066; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
&nbsp;
						halfCord2 <span style="color: #339933;">=</span> sphereRadius<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> sphereRadius<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> lengthRTSC2 <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>closestApproach <span style="color: #339933;">*</span> closestApproach<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 					<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> halfCord2 <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">// ray misses the sphere</span>
 						<span style="color: #000066; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
&nbsp;
						isInShadow <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
 					<span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #009900;">&#125;</span>
&nbsp;
					<span style="color: #006600; font-style: italic;">/// end of shadow ray ///</span>
&nbsp;
					<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> isInShadow <span style="color: #009900;">&#41;</span> illumination <span style="color: #339933;">*=</span> .5<span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #006600; font-style: italic;">/// trace reflected ray ///</span>
 				<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> sphereReflects<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span>
 				<span style="color: #009900;">&#123;</span>
 					<span style="color: #006600; font-style: italic;">// calculate reflected ray direction</span>
 					<span style="color: #003366; font-weight: bold;">var</span> reflectCoef<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> <span style="color: #CC0000;">2</span> <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span>rayDirX <span style="color: #339933;">*</span> normalX <span style="color: #339933;">+</span> rayDirY <span style="color: #339933;">*</span> normalY <span style="color: #339933;">+</span> rayDirZ <span style="color: #339933;">*</span> normalZ<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 					reflectRayDirX <span style="color: #339933;">=</span> rayDirX <span style="color: #339933;">-</span> normalX <span style="color: #339933;">*</span> reflectCoef<span style="color: #339933;">;</span>
 					reflectRayDirY <span style="color: #339933;">=</span> rayDirY <span style="color: #339933;">-</span> normalY <span style="color: #339933;">*</span> reflectCoef<span style="color: #339933;">;</span>
 					reflectRayDirZ <span style="color: #339933;">=</span> rayDirZ <span style="color: #339933;">-</span> normalZ <span style="color: #339933;">*</span> reflectCoef<span style="color: #339933;">;</span>
&nbsp;
						closestIntersectionDist <span style="color: #339933;">=</span> Number.<span style="color: #660066;">POSITIVE_INFINITY</span><span style="color: #339933;">;</span>
 					reflectClosestSphereIndex <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span>
 					<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>j <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> numSpheres<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>j<span style="color: #009900;">&#41;</span>
 					<span style="color: #009900;">&#123;</span>
 						<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> j <span style="color: #339933;">==</span> closestSphereIndex <span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
&nbsp;
							rayToSphereCenterX <span style="color: #339933;">=</span> sphereCenterX<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> intersectionX<span style="color: #339933;">;</span>
 						rayToSphereCenterY <span style="color: #339933;">=</span> sphereCenterY<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> intersectionY<span style="color: #339933;">;</span>
 						rayToSphereCenterZ <span style="color: #339933;">=</span> sphereCenterZ<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> intersectionZ<span style="color: #339933;">;</span>
&nbsp;
							lengthRTSC2 <span style="color: #339933;">=</span> 		rayToSphereCenterX <span style="color: #339933;">*</span> rayToSphereCenterX <span style="color: #339933;">+</span>
 											rayToSphereCenterY <span style="color: #339933;">*</span> rayToSphereCenterY <span style="color: #339933;">+</span>
 											rayToSphereCenterZ <span style="color: #339933;">*</span> rayToSphereCenterZ<span style="color: #339933;">;</span>
&nbsp;
							closestApproach <span style="color: #339933;">=</span> 	rayToSphereCenterX <span style="color: #339933;">*</span> reflectRayDirX <span style="color: #339933;">+</span>
 											rayToSphereCenterY <span style="color: #339933;">*</span> reflectRayDirY <span style="color: #339933;">+</span>
 											rayToSphereCenterZ <span style="color: #339933;">*</span> reflectRayDirZ<span style="color: #339933;">;</span>
&nbsp;
							<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> closestApproach <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">// intersection behind the origin</span>
 							<span style="color: #000066; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
&nbsp;
							halfCord2 <span style="color: #339933;">=</span> sphereRadius<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> sphereRadius<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> lengthRTSC2 <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>closestApproach <span style="color: #339933;">*</span> closestApproach<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 						<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> halfCord2 <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">// ray misses the sphere</span>
 							<span style="color: #000066; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
&nbsp;
							<span style="color: #006600; font-style: italic;">// ray hits the sphere</span>
 						dist <span style="color: #339933;">=</span> closestApproach <span style="color: #339933;">-</span> Math.<span style="color: #660066;">sqrt</span><span style="color: #009900;">&#40;</span>halfCord2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 						<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> dist <span style="color: #339933;">&lt;</span> closestIntersectionDist <span style="color: #009900;">&#41;</span>
 						<span style="color: #009900;">&#123;</span>
 							closestIntersectionDist <span style="color: #339933;">=</span> dist<span style="color: #339933;">;</span>
 							reflectClosestSphereIndex<span style="color: #339933;">=</span>j<span style="color: #339933;">;</span>
 						<span style="color: #009900;">&#125;</span>
 					<span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">// end loop through spheres for reflect ray</span>
&nbsp;
						<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> reflectClosestSphereIndex <span style="color: #339933;">==</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">// reflected ray misses</span>
 					<span style="color: #009900;">&#123;</span>
 						r <span style="color: #339933;">=</span> sphereR<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> illumination<span style="color: #339933;">;</span>
 						g <span style="color: #339933;">=</span> sphereG<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> illumination<span style="color: #339933;">;</span>
 						b <span style="color: #339933;">=</span> sphereB<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> illumination<span style="color: #339933;">;</span>
&nbsp;
						<span style="color: #009900;">&#125;</span>
 					<span style="color: #000066; font-weight: bold;">else</span>
 					<span style="color: #009900;">&#123;</span>
 						<span style="color: #006600; font-style: italic;">//trace(&quot;ref hit&quot;);</span>
 						<span style="color: #006600; font-style: italic;">// location of ray-sphere intersection</span>
 						reflectIntersectionX <span style="color: #339933;">=</span> reflectRayDirX <span style="color: #339933;">*</span> closestIntersectionDist <span style="color: #339933;">+</span> intersectionX<span style="color: #339933;">;</span>
 						reflectIntersectionY <span style="color: #339933;">=</span> reflectRayDirY <span style="color: #339933;">*</span> closestIntersectionDist <span style="color: #339933;">+</span> intersectionY<span style="color: #339933;">;</span>
 						reflectIntersectionZ <span style="color: #339933;">=</span> reflectRayDirZ <span style="color: #339933;">*</span> closestIntersectionDist <span style="color: #339933;">+</span> intersectionZ<span style="color: #339933;">;</span>
&nbsp;
							<span style="color: #006600; font-style: italic;">// sphere normal at intersection point</span>
 						normalX <span style="color: #339933;">=</span> reflectIntersectionX <span style="color: #339933;">-</span> sphereCenterX<span style="color: #009900;">&#91;</span>reflectClosestSphereIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 						normalY <span style="color: #339933;">=</span> reflectIntersectionY <span style="color: #339933;">-</span> sphereCenterY<span style="color: #009900;">&#91;</span>reflectClosestSphereIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 						normalZ <span style="color: #339933;">=</span> reflectIntersectionZ <span style="color: #339933;">-</span> sphereCenterZ<span style="color: #009900;">&#91;</span>reflectClosestSphereIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
							normalX <span style="color: #339933;">/=</span> sphereRadius<span style="color: #009900;">&#91;</span>reflectClosestSphereIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// could be multiply by precacluated 1/rad</span>
 						normalY <span style="color: #339933;">/=</span> sphereRadius<span style="color: #009900;">&#91;</span>reflectClosestSphereIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 						normalZ <span style="color: #339933;">/=</span> sphereRadius<span style="color: #009900;">&#91;</span>reflectClosestSphereIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
							<span style="color: #006600; font-style: italic;">// diffuse illumination coef</span>
 						reflectIllumination <span style="color: #339933;">=</span> 	normalX <span style="color: #339933;">*</span> lightDirX <span style="color: #339933;">+</span>
 												normalY <span style="color: #339933;">*</span> lightDirY <span style="color: #339933;">+</span>
 												normalZ <span style="color: #339933;">*</span> lightDirZ<span style="color: #339933;">;</span>
&nbsp;
							<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> reflectIllumination <span style="color: #339933;">&lt;</span> ambientIllumination <span style="color: #009900;">&#41;</span>
 							reflectIllumination <span style="color: #339933;">=</span> ambientIllumination<span style="color: #339933;">;</span>
&nbsp;
							r <span style="color: #339933;">=</span> sphereR<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> illumination <span style="color: #339933;">+</span> .5 <span style="color: #339933;">*</span> sphereR<span style="color: #009900;">&#91;</span>reflectClosestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> reflectIllumination<span style="color: #339933;">;</span>
 						g <span style="color: #339933;">=</span> sphereG<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> illumination <span style="color: #339933;">+</span> .5 <span style="color: #339933;">*</span> sphereG<span style="color: #009900;">&#91;</span>reflectClosestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> reflectIllumination<span style="color: #339933;">;</span>
 						b <span style="color: #339933;">=</span> sphereB<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> illumination <span style="color: #339933;">+</span> .5 <span style="color: #339933;">*</span> sphereB<span style="color: #009900;">&#91;</span>reflectClosestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> reflectIllumination<span style="color: #339933;">;</span>
 						<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> r <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">255</span> <span style="color: #009900;">&#41;</span> r <span style="color: #339933;">=</span> <span style="color: #CC0000;">255</span><span style="color: #339933;">;</span>
 						<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> g <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">255</span> <span style="color: #009900;">&#41;</span> g <span style="color: #339933;">=</span> <span style="color: #CC0000;">255</span><span style="color: #339933;">;</span>
 						<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> b <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">255</span> <span style="color: #009900;">&#41;</span> b <span style="color: #339933;">=</span> <span style="color: #CC0000;">255</span><span style="color: #339933;">;</span>
&nbsp;
						<span style="color: #009900;">&#125;</span>  <span style="color: #006600; font-style: italic;">// end if reflected ray hits</span>
&nbsp;
					<span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">/// end if reflects</span>
 				<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #006600; font-style: italic;">// primary ray doesn't reflect</span>
 				<span style="color: #009900;">&#123;</span>
 					r <span style="color: #339933;">=</span> sphereR<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> illumination<span style="color: #339933;">;</span>
 					g <span style="color: #339933;">=</span> sphereG<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> illumination<span style="color: #339933;">;</span>
 					b <span style="color: #339933;">=</span> sphereB<span style="color: #009900;">&#91;</span>closestSphereIndex<span style="color: #009900;">&#93;</span> <span style="color: #339933;">*</span> illumination<span style="color: #339933;">;</span>
 				<span style="color: #009900;">&#125;</span>
&nbsp;
					outputBitmapData.<span style="color: #660066;">setPixel</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>r<span style="color: #339933;">&lt;&amp;</span>lt<span style="color: #339933;">;</span><span style="color: #CC0000;">16</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>g<span style="color: #339933;">&lt;&amp;</span>lt<span style="color: #339933;">;</span><span style="color: #CC0000;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> b<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">// end if primary ray hit</span>
 		<span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">// end x loop</span>
 	<span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">// end y loop</span>
 	outputBitmapData.<span style="color: #660066;">unlock</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// compute FPS</span>
 	<span style="color: #003366; font-weight: bold;">var</span> fps<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> <span style="color: #CC0000;">1.0</span><span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>getTimer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> timer<span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #CC0000;">1000.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	frameTimeTxt.<span style="color: #660066;">text</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Drag to rotate. FPS: &quot;</span> <span style="color: #339933;">+</span> int<span style="color: #009900;">&#40;</span>fps<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://drawlogic.com/2008/03/22/as3-real-time-raytracing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

