<?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; ALGORITHM</title>
	<atom:link href="http://drawlogic.com/tag/algorithm/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, 22 Dec 2011 21:55:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<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>

