<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Devirtuoso</title>
	
	<link>http://www.devirtuoso.com</link>
	<description>Web Development Wickedness</description>
	<lastBuildDate>Sat, 20 Mar 2010 16:35:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Devirtuoso" /><feedburner:info uri="devirtuoso" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/Devirtuoso" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FDevirtuoso" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Google Sphere</title>
		<link>http://feedproxy.google.com/~r/Devirtuoso/~3/DTzMUMuqYtQ/</link>
		<comments>http://www.devirtuoso.com/2009/09/google-sphere/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 01:29:51 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[showcase]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1174</guid>
		<description><![CDATA[Once again Google is broken in this fantastic experiment.  From the maker of Google Gravity, this experiment takes Google and forms it into a sphere.

Google Sphere

I love Mr.doob’s work.  Big points for creativity. The best part about it is that the image search still works.
Again this one requires Chrome to view it, he uses the [...]]]></description>
			<content:encoded><![CDATA[<p>Once again Google is broken in this fantastic experiment.  From the maker of <a title="Google Gravity" href="http://www.devirtuoso.com/2009/08/google-gravity/" target="_self">Google Gravity</a>, this experiment takes Google and forms it into a sphere.</p>
<p><span id="more-1174"></span></p>
<h3><a title="Google Sphere" href="http://mrdoob.com/projects/chromeexperiments/google_sphere/" target="_blank">Google Sphere</a></h3>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/ttQuzEEsHhg&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/ttQuzEEsHhg&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>I love Mr.doob’s work.  Big points for creativity. The best part about it is that the image search still works.</p>
<p>Again this one requires Chrome to view it, he uses the webkit to transform his Actionscript 3 3d engine into JavaScript.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/_fvoBpT6Ly8SBKokRWHug8sb40k/0/da"><img src="http://feedads.g.doubleclick.net/~a/_fvoBpT6Ly8SBKokRWHug8sb40k/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_fvoBpT6Ly8SBKokRWHug8sb40k/1/da"><img src="http://feedads.g.doubleclick.net/~a/_fvoBpT6Ly8SBKokRWHug8sb40k/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=DTzMUMuqYtQ:F2E5Qvb_yQs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=DTzMUMuqYtQ:F2E5Qvb_yQs:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=DTzMUMuqYtQ:F2E5Qvb_yQs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=DTzMUMuqYtQ:F2E5Qvb_yQs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=DTzMUMuqYtQ:F2E5Qvb_yQs:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=DTzMUMuqYtQ:F2E5Qvb_yQs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=DTzMUMuqYtQ:F2E5Qvb_yQs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=DTzMUMuqYtQ:F2E5Qvb_yQs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=DTzMUMuqYtQ:F2E5Qvb_yQs:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/google-sphere/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.devirtuoso.com/2009/09/google-sphere/</feedburner:origLink></item>
		<item>
		<title>3D Sphere Using jQuery</title>
		<link>http://feedproxy.google.com/~r/Devirtuoso/~3/StPFOw3sd2w/</link>
		<comments>http://www.devirtuoso.com/2009/09/3d-sphere-using-jquery/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 17:53:35 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1166</guid>
		<description><![CDATA[Ever wanted your tag cloud to resemble a ball?&#160; Of course you did.&#160; This tutorial will walk you through how to create a Sphere in jQuery.

&#160;
What We Are Building
This one can bog down a system in a hurry, but that’s the fun with experimenting with JavaScript.&#160; We will be building a sphere that rotates depending [...]]]></description>
			<content:encoded><![CDATA[<p>Ever wanted your tag cloud to resemble a ball?&#160; Of course you did.&#160; This tutorial will walk you through how to create a Sphere in jQuery.</p>
<p><span id="more-1166"></span></p>
<p>&#160;</p>
<h2>What We Are Building</h2>
<p>This one can bog down a system in a hurry, but that’s the fun with experimenting with JavaScript.&#160; We will be building a sphere that rotates depending on which way the mouse moves….exciting.</p>
<div class="resources">
	 <a href="http://www.devirtuoso.com/Examples/3D-Engine/sphere.zip"class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/3D-Engine/sphere.html"class="Example" target="_blank">Example</a>
</div>
<p><a title="3d sphere" href="http://www.devirtuoso.com/Examples/3D-Engine/sphere.html" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="sphere" border="0" alt="sphere" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image38.png" width="419" height="420" /></a> </p>
<p>&#160;</p>
<h2>Getting Started</h2>
<p>This tutorial is a continuation of a line of 3D jQuery posts.&#160; I would recommend you having a look at the previous post so you’re up to speed.</p>
<ul>
<li><a title="Making a 3D Engine in jQuery" href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank">Making a 3D Engine in jQuery</a> </li>
<li><a title="3D Plane for jQuery Engine" href="http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/" target="_blank">3D Plane for jQuery Engine</a> </li>
<li><a title="Creating a Wobbling 3D Carousel" href="http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/" target="_blank">Creating a Wobbling 3D Carousel</a> </li>
</ul>
<p>Now that is out of the way lets get started.&#160; For this project we’ll have 3 files.&#160; </p>
<ul>
<li>3DEngine.js</li>
<li>Sphere.js</li>
<li>sphere.html</li>
</ul>
<p>The 3DEngine.js is the same file that was in the previous posts so we won’t be covering that. The Sphere.js holds the Sphere class which is used by the 3D Engine.&#160; Lastly the html file puts everything together.</p>
<p>&#160;</p>
<h2>The Sphere</h2>
<p>With the sphere class we’ll be creating a set of 3d points (x,y,z) in an array.&#160; To build the sphere we’re simply going to create a whole bunch of rings that start off small, get larger, then small again.&#160; I’m not sure if this the best way of building a sphere, but it works so I’m not going to worry too much.</p>
<p>Here is the <strong>JavaScript</strong>:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Sphere <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>radius<span class="sy0">,</span>sides<span class="sy0">,</span> numOfItems<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Step through the number of rings.</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> j <span class="sy0">=</span> sides <span class="sy0">;</span> j <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> j<span class="sy0">--</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Step through each point on a ring.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> numOfItems <span class="sy0">/</span> sides<span class="sy0">;</span> i <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">--</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Space out each point evenly.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angle <span class="sy0">=</span> i <span class="sy0">*</span> Math.<span class="me1">PI</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">/</span> <span class="br0">&#40;</span>numOfItems<span class="sy0">/</span>sides<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angleB <span class="sy0">=</span> j <span class="sy0">*</span> Math.<span class="me1">PI</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">/</span> sides<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Figure out the x,y,z co-ordinates of each point.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> x <span class="sy0">=</span> &nbsp; Math.<span class="me1">sin</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>angleB<span class="br0">&#41;</span><span class="sy0">*</span>radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> y <span class="sy0">=</span> &nbsp;Math.<span class="me1">cos</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>angleB<span class="br0">&#41;</span><span class="sy0">*</span>radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> z <span class="sy0">=</span> &nbsp;Math.<span class="me1">cos</span><span class="br0">&#40;</span>angleB<span class="br0">&#41;</span><span class="sy0">*</span> radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Put the point in an array.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span>.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Need to extend class to work in 3d engine.</span><br />
Sphere.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>There are two loops.&#160; One for the number of rings, the other for the points within each ring.&#160; Inside the inner loop we first figure out where each point should lie, then figure out how that would translate into the x, y and z co-ordinates.</p>
<p>&#160;</p>
<h2>The jQuery / Html</h2>
<p>Not much has changed in our jQuery / HTML since the <a title="3d Plane" href="http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/" target="_blank">3d Plane</a> post.&#160; The only thing that has changed is we imported the Sphere.js and instead of adding a plane, we’re adding a sphere.</p>
<p>Here is the <strong>HTML</strong>:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery-1.3.2.min.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;3DEngine.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;Sphere.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; //<span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; $<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.ready<span class="br0">&#40;</span>function<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Init Camera</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var camera <span class="sy0">=</span> new Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; camera.init<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">300</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var container <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Create <span class="kw3">object</span> holder</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var item <span class="sy0">=</span> new Object3D<span class="br0">&#40;</span>container<span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Add sphere to the <span class="kw3">object</span> holder</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; item.addChild<span class="br0">&#40;</span>new Sphere<span class="br0">&#40;</span><span class="nu0">200</span>,<span class="nu0">10</span>,<span class="nu0">100</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Create scene</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var scene <span class="sy0">=</span> new Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Add <span class="kw3">object</span> holder to the scene</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; scene.addToScene<span class="br0">&#40;</span>item<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var mouseX,mouseY <span class="sy0">=</span> <span class="nu0">0</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var offsetX <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.left;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var offsetY <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.top;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var speed <span class="sy0">=</span> <span class="nu0">6000</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Figure out where the mouse is when the mouse is moved.</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="br0">&#41;</span>.mousemove<span class="br0">&#40;</span>function<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseX <span class="sy0">=</span> e.clientX - offsetX - <span class="br0">&#40;</span>container.<span class="kw3">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseY <span class="sy0">=</span> e.clientY - offsetY - <span class="br0">&#40;</span>container.<span class="kw3">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var animateIt <span class="sy0">=</span> function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>rotate the sphere along the y <span class="kw3">axis</span> when the mouse</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>mouse is moved left and right</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseX !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.y +<span class="sy0">=</span> <span class="br0">&#40;</span>mouseX<span class="br0">&#41;</span> <span class="sy0">/</span> speed</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>rotate along the x <span class="kw3">axis</span> when the mouse is moved</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>up and down.</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseY !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.x -<span class="sy0">=</span> mouseY <span class="sy0">/</span> speed;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span>Render the scene.</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene.renderCamera<span class="br0">&#40;</span>camera<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; setInterval<span class="br0">&#40;</span>animateIt, <span class="nu0">20</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; <span class="sy0">//</span><span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>Disclaimer</h2>
<p>Be careful adding points on this one.&#160; Because the 3D engine doesn’t use html’s canvas just yet, it really can’t handle too many points. I can get away with 100 points on my machine without too much delay.&#160; Chrome handles it the best out of all the browsers I tried.&#160; So use it at your own discretion, you might have some angry viewers if you go too nuts.&#160; This is just meant to be experimental…and cool.</p>
<p>The next step will be to optimize the 3D Engine a bit using the canvas so there won’t be this problem in the future.</p>
<p>&#160;</p>
<p>Here is all the code together:</p>
<p><strong>JavaScript</strong></p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Sphere <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>radius<span class="sy0">,</span>sides<span class="sy0">,</span> numOfItems<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> j <span class="sy0">=</span> sides <span class="sy0">;</span> j <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> j<span class="sy0">--</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> numOfItems <span class="sy0">/</span> sides<span class="sy0">;</span> i <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">--</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angle <span class="sy0">=</span> i <span class="sy0">*</span> Math.<span class="me1">PI</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">/</span> <span class="br0">&#40;</span>numOfItems<span class="sy0">/</span>sides<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angleB <span class="sy0">=</span> j <span class="sy0">*</span> Math.<span class="me1">PI</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">/</span> sides<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> x <span class="sy0">=</span> &nbsp; Math.<span class="me1">sin</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>angleB<span class="br0">&#41;</span><span class="sy0">*</span>radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> y <span class="sy0">=</span> &nbsp;Math.<span class="me1">cos</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>angleB<span class="br0">&#41;</span><span class="sy0">*</span>radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> z <span class="sy0">=</span> &nbsp;Math.<span class="me1">cos</span><span class="br0">&#40;</span>angleB<span class="br0">&#41;</span><span class="sy0">*</span> radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span>.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Sphere.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p><strong>HTML</strong></p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>3d engine<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;screen&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #item{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin:0 auto;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top:300px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; position: relative;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ul{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color: #69c;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-weight: bold;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size:2em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery-1.3.2.min.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;3DEngine.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;Sphere.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; //<span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.ready<span class="br0">&#40;</span>function<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var camera <span class="sy0">=</span> new Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; camera.init<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">300</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var container <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var item <span class="sy0">=</span> new Object3D<span class="br0">&#40;</span>container<span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; item.addChild<span class="br0">&#40;</span>new Sphere<span class="br0">&#40;</span><span class="nu0">200</span>,<span class="nu0">10</span>,<span class="nu0">100</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var scene <span class="sy0">=</span> new Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene.addToScene<span class="br0">&#40;</span>item<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var mouseX,mouseY <span class="sy0">=</span> <span class="nu0">0</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var offsetX <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.left;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var offsetY <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.top;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var speed <span class="sy0">=</span> <span class="nu0">6000</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="br0">&#41;</span>.mousemove<span class="br0">&#40;</span>function<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseX <span class="sy0">=</span> e.clientX - offsetX - <span class="br0">&#40;</span>container.<span class="kw3">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseY <span class="sy0">=</span> e.clientY - offsetY - <span class="br0">&#40;</span>container.<span class="kw3">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var animateIt <span class="sy0">=</span> function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseX !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.y +<span class="sy0">=</span> <span class="br0">&#40;</span>mouseX<span class="br0">&#41;</span> <span class="sy0">/</span> speed</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseY !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.x -<span class="sy0">=</span> mouseY <span class="sy0">/</span> speed;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene.renderCamera<span class="br0">&#40;</span>camera<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setInterval<span class="br0">&#40;</span>animateIt, <span class="nu0">20</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span><span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<div class="resources">
	 <a href="http://www.devirtuoso.com/Examples/3D-Engine/sphere.zip"class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/3D-Engine/sphere.html"class="Example" target="_blank">Example</a>
</div>

<p><a href="http://feedads.g.doubleclick.net/~a/Wcsr2KDU_sex0sokjL5In20Blv0/0/da"><img src="http://feedads.g.doubleclick.net/~a/Wcsr2KDU_sex0sokjL5In20Blv0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Wcsr2KDU_sex0sokjL5In20Blv0/1/da"><img src="http://feedads.g.doubleclick.net/~a/Wcsr2KDU_sex0sokjL5In20Blv0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=StPFOw3sd2w:PaKnu7sZK0E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=StPFOw3sd2w:PaKnu7sZK0E:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=StPFOw3sd2w:PaKnu7sZK0E:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=StPFOw3sd2w:PaKnu7sZK0E:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=StPFOw3sd2w:PaKnu7sZK0E:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=StPFOw3sd2w:PaKnu7sZK0E:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=StPFOw3sd2w:PaKnu7sZK0E:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=StPFOw3sd2w:PaKnu7sZK0E:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=StPFOw3sd2w:PaKnu7sZK0E:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/3d-sphere-using-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.devirtuoso.com/2009/09/3d-sphere-using-jquery/</feedburner:origLink></item>
		<item>
		<title>Creating a Wobbling 3D Carousel</title>
		<link>http://feedproxy.google.com/~r/Devirtuoso/~3/XnKG4MPZSMk/</link>
		<comments>http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 07:07:33 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[carousel]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1151</guid>
		<description><![CDATA[We’ve all seen a carousel in one form or another.&#160; This post will show how to create a carousel with a wobbling effect, much like an unbalanced wheel.

&#160;
What We’re Building
We’ll be creating a carousel with the help of the 3d Engine we built in a previous post.&#160; The idea is we’ll create a ring by [...]]]></description>
			<content:encoded><![CDATA[<p>We’ve all seen a carousel in one form or another.&#160; This post will show how to create a carousel with a wobbling effect, much like an unbalanced wheel.</p>
<p><span id="more-1151"></span></p>
<p>&#160;</p>
<h2>What We’re Building</h2>
<p>We’ll be creating a carousel with the help of the <a title="3d engine jquery" href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank">3d Engine</a> we built in a previous post.&#160; The idea is we’ll create a ring by plotting points in 3d space, then we’ll rotate it so it’s almost perpendicular to the viewer.&#160; Because it’s not 100% flat, it will look like it’s wobbling up and down, giving your carousel a little more flavor.</p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/3D-Engine/ring.zip" class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/3D-Engine/ring.html"class="Example" target="_blank">Example</a></div>
<p><a href="http://www.devirtuoso.com/Examples/3D-Engine/ring.html" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="carousel" border="0" alt="carousel" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image37.png" width="445" height="146" /></a></p>
<p>&#160;</p>
<h2>Building the Ring</h2>
<p>If you haven’t read up on the  <a href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank">3d Engine</a> just yet I recommend you do so.&#160; Creating objects for the engine isn’t overly complicated.&#160; It’s just an array of 3d points.&#160; With the ring, we’re going to use math to plot the points for us.&#160; We’re going to be creating a circle and plot it in 3d space.</p>
<p>Here is the <strong>JavaScript</strong>: (Ring.js)</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Ring <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>radius<span class="sy0">,</span> numOfItems<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="co1">//Step through each point on ring.</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> numOfItems <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span> i <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">--</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Figure out where each point lies on the circle</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angle <span class="sy0">=</span> i <span class="sy0">*</span> Math.<span class="me1">PI</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">/</span> numOfItems<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Translate that point on the circle into x,y coordinates.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> x <span class="sy0">=</span> &nbsp;Math.<span class="me1">sin</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> y <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> z <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Add the point to the array.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span>.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//You need to inherit the DisplayObject3D.</span><br />
Ring.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>The Ring class takes 2 parameters, the first is the radius of the ring, and the second is how many items are going to be on the ring.</p>
<p>We then proceed to step through all the points, and place them at equal distances around the ring.</p>
<p>&#160;</p>
<h2>The HTML </h2>
<p>There isn’t much too the html.&#160; We’re simply going to create a &lt;ul&gt; with a bunch of words in it.</p>
<p>Here is the <strong>HTML</strong>:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>website<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>jQuery<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>JavaScript<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>HTML<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>PHP<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>3D<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Ajax<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>CSS<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Design<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Flash<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Experimental<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Development<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>web<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Tutorial<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>ASP<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>&#160;</p>
<h2>The jQuery</h2>
<p>There is not much changed from our previous post on <a title="how to create a 3d plane for jQuery 3D Engine" href="http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/" target="_blank">how to create a 3d plane for jQuery 3D Engine</a>.&#160; The only difference here is we’re going to give an initial value to the axisRotation x value.&#160; This will rotate the ring towards the viewer.&#160; Through trial and error I figured out the value that worked for me.</p>
<p>Then we’ll animate the axisRotation y value when the mouse moves left and right.</p>
<p>Here is the <strong>jQuery</strong>:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<br />
<span class="co1">//setup camera.</span><br />
<span class="kw2">var</span> camera <span class="sy0">=</span> <span class="kw2">new</span> Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
camera.<span class="me1">init</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">300</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw2">var</span> container <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Setup 3d object holder.</span><br />
<span class="kw2">var</span> <span class="kw1">item</span> <span class="sy0">=</span> <span class="kw2">new</span> Object3D<span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Add ring to 3d object holder.</span><br />
<span class="co1">//The first argument for the ring is the radius.</span><br />
<span class="co1">//The second argument for the ring is how many items</span><br />
<span class="co1">//are on the ring. &nbsp;So we pass in how many items are in our list.</span><br />
<span class="kw1">item</span>.<span class="me1">addChild</span><span class="br0">&#40;</span><span class="kw2">new</span> Ring<span class="br0">&#40;</span><span class="nu0">200</span><span class="sy0">,</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item ul li&quot;</span><span class="br0">&#41;</span>.<span class="me1">length</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">//Create a scene.</span><br />
<span class="kw2">var</span> scene <span class="sy0">=</span> <span class="kw2">new</span> Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Add 3d object holder to the scene.</span><br />
scene.<span class="me1">addToScene</span><span class="br0">&#40;</span><span class="kw1">item</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="kw2">var</span> mouseX<span class="sy0">,</span>mouseY <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="kw2">var</span> offsetX <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span><span class="sy0">;</span><br />
<span class="kw2">var</span> offsetY <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span><span class="sy0">;</span><br />
<span class="kw2">var</span> speed <span class="sy0">=</span> <span class="nu0">6000</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Capturing mouse movements.</span><br />
$<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">mousemove</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; mouseX <span class="sy0">=</span> e.<span class="me1">clientX</span> <span class="sy0">-</span> offsetX <span class="sy0">-</span> <span class="br0">&#40;</span>container.<span class="me1">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; mouseY <span class="sy0">=</span> e.<span class="me1">clientY</span> <span class="sy0">-</span> offsetY <span class="sy0">-</span> <span class="br0">&#40;</span>container.<span class="me1">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Rotate ring so it's almost perpendicular to the viewer.</span><br />
axisRotation.<span class="me1">x</span> <span class="sy0">=</span> <span class="nu0">1.5</span><span class="sy0">;</span><br />
<br />
<span class="kw2">var</span> animateIt <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>mouseX <span class="sy0">!=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//When the user moves the mouse left and right,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//rotate around the ring on the y axis.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; axisRotation.<span class="me1">y</span> <span class="sy0">+=</span> <span class="br0">&#40;</span>mouseX<span class="br0">&#41;</span> <span class="sy0">/</span> speed<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; scene.<span class="me1">renderCamera</span><span class="br0">&#40;</span>camera<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<br />
setInterval<span class="br0">&#40;</span>animateIt<span class="sy0">,</span> <span class="nu0">20</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>Voila!</h2>
<p>That’s all there is too it.&#160; </p>
<p>Here is all the code together:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>3d engine<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;screen&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; #item{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin:0 auto;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top:300px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; position: relative;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; ul{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color: #69c;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-weight: bold;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size:1em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>website<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>jQuery<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>JavaScript<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>HTML<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>PHP<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>3D<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Ajax<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>CSS<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Design<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Flash<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Experimental<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Development<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>web<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Tutorial<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>ASP<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery-1.3.2.min.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;3DEngine.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;Ring.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; //<span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; $<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.ready<span class="br0">&#40;</span>function<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var camera <span class="sy0">=</span> new Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; camera.init<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">300</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var container <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var item <span class="sy0">=</span> new Object3D<span class="br0">&#40;</span>container<span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; item.addChild<span class="br0">&#40;</span>new Ring<span class="br0">&#40;</span><span class="nu0">200</span>, $<span class="br0">&#40;</span><span class="st0">&quot;#item ul li&quot;</span><span class="br0">&#41;</span>.length<span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var scene <span class="sy0">=</span> new Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; scene.addToScene<span class="br0">&#40;</span>item<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var mouseX,mouseY <span class="sy0">=</span> <span class="nu0">0</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var offsetX <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.left;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var offsetY <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.top;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var speed <span class="sy0">=</span> <span class="nu0">6000</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="br0">&#41;</span>.mousemove<span class="br0">&#40;</span>function<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseX <span class="sy0">=</span> e.clientX - offsetX - <span class="br0">&#40;</span>container.<span class="kw3">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouseY <span class="sy0">=</span> e.clientY - offsetY - <span class="br0">&#40;</span>container.<span class="kw3">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; axisRotation.x <span class="sy0">=</span> <span class="nu0">1.5</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; var animateIt <span class="sy0">=</span> function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseX !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.y +<span class="sy0">=</span> <span class="br0">&#40;</span>mouseX<span class="br0">&#41;</span> <span class="sy0">/</span> speed;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene.renderCamera<span class="br0">&#40;</span>camera<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; setInterval<span class="br0">&#40;</span>animateIt, <span class="nu0">20</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; <span class="sy0">//</span><span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>Ring.js:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Ring <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>radius<span class="sy0">,</span> numOfItems<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> numOfItems <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span> i <span class="sy0">&gt;=</span> <span class="nu0">0</span><span class="sy0">;</span> i<span class="sy0">--</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angle <span class="sy0">=</span> i <span class="sy0">*</span> Math.<span class="me1">PI</span> <span class="sy0">*</span> <span class="nu0">2</span> <span class="sy0">/</span> numOfItems<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> x <span class="sy0">=</span> &nbsp;Math.<span class="me1">sin</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> y <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>angle<span class="br0">&#41;</span> <span class="sy0">*</span> radius<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> z <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span>.<span class="me1">push</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Ring.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Just a small tip. If you wanted to create a carousel that doesn’t wobble, your first instinct might be to adjust the axisRotation x value until you get it.&#160; You can do it this way, it just might take a bit to get it right on the money.&#160; The easier way is to adjust the Ring.js file, and switch the y and z values.&#160; This will create a totally flat ring and you don’t have to worry about using the axisRotation x value to try and flatten it out.</p>
<p>&#160;</p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/3D-Engine/ring.zip" class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/3D-Engine/ring.html"class="Example" target="_blank">Example</a></div>
<p>&#160;</p>

<p><a href="http://feedads.g.doubleclick.net/~a/ghcjAbGH8pnLQ3Il_5MSlYhoAl4/0/da"><img src="http://feedads.g.doubleclick.net/~a/ghcjAbGH8pnLQ3Il_5MSlYhoAl4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ghcjAbGH8pnLQ3Il_5MSlYhoAl4/1/da"><img src="http://feedads.g.doubleclick.net/~a/ghcjAbGH8pnLQ3Il_5MSlYhoAl4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=XnKG4MPZSMk:VUf5Kzd3H3I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=XnKG4MPZSMk:VUf5Kzd3H3I:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=XnKG4MPZSMk:VUf5Kzd3H3I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=XnKG4MPZSMk:VUf5Kzd3H3I:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=XnKG4MPZSMk:VUf5Kzd3H3I:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=XnKG4MPZSMk:VUf5Kzd3H3I:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=XnKG4MPZSMk:VUf5Kzd3H3I:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=XnKG4MPZSMk:VUf5Kzd3H3I:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=XnKG4MPZSMk:VUf5Kzd3H3I:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/</feedburner:origLink></item>
		<item>
		<title>3D Plane for jQuery 3D Engine</title>
		<link>http://feedproxy.google.com/~r/Devirtuoso/~3/p4ow-7IneIE/</link>
		<comments>http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 18:11:23 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1142</guid>
		<description><![CDATA[In the last post we created a 3D Engine with jQuery.&#160; This time around we’re going to make a new shape and make it interact with the mouse.

&#160;
What We’re Making
I decided not to tackle too tough a shape as I wanted to show how to interact with the mouse.&#160; We’ll be making a plane that [...]]]></description>
			<content:encoded><![CDATA[<p>In the last post we created a <a title="3D Engine with jQuery" href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank">3D Engine with jQuery</a>.&#160; This time around we’re going to make a new shape and make it interact with the mouse.</p>
<p><span id="more-1142"></span></p>
<p>&#160;</p>
<h2>What We’re Making</h2>
<p>I decided not to tackle too tough a shape as I wanted to show how to interact with the mouse.&#160; We’ll be making a plane that rotates the further you get from the center.</p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/3D-Engine/plane.zip" class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/3D-Engine/plane.html"class="Example" target="_blank">Example</a></div>
</p>
<p><a title="Plane 3D" href="http://www.devirtuoso.com/Examples/3D-Engine/plane.html" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="plane rotating" border="0" alt="plane rotating" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image33.png" width="370" height="370" /></a> </p>
<p>&#160;</p>
<h2>Getting Started</h2>
<p>If you haven’t seen how the 3D engine works I recommend visiting <a title="Making a 3D Engine in jQuery" href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank">Making a 3D Engine in jQuery</a> and getting caught up.&#160; The first thing we’re going to tackle is the plane.&#160; We’re going to create a JavaScript file that we’ll import into our HTML file. The code isn’t too complicated.&#160; We’re creating an array of 3d points.&#160; </p>
<p>Lets look at the code.</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Plane <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>size<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>size <span class="sy0">===</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; size <span class="sy0">=</span> <span class="nu0">10</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span> <span class="sy0">=</span> <span class="br0">&#91;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Plane.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>It’s pretty much the same as the Cube in the previous post.&#160; The only difference is it’s less points.&#160; This would be a good opportunity to walk you through how each point is placed.&#160; The Plane class has 1 argument.&#160; The size of the Plane.&#160; We’ll use this size to plot our points.&#160; Let’s look at the first point. (-size,size,0)&#160; So if we pass in a size of 100, then the 3d point would be (-100,100,0) Which puts a point 100 points to the left and 100 up.&#160; The z value is at zero because it’s a plane.&#160; All the points are going to sit line up along the z axis.&#160; The next point is (100,100,0). This is the top right point.&#160; (100,-100,0) is bottom left. Lastly (-100,-100,0)&#160; is bottom right.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="points" border="0" alt="points" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image34.png" width="370" height="370" /> </p>
<p>&#160;</p>
<h2>Mouse Interaction</h2>
<p>Now that we have our plane made, we’ll just import it into our html file.&#160; Just like our previous post we’ll have to create our Camera,Object holder, Object and Scene. Now we’ll tackle having it interact with the mouse.</p>
<p>Here is the new jQuery:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">//Mouse x and y </span><br />
<span class="kw2">var</span> mouseX<span class="sy0">,</span>mouseY <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<br />
<span class="co1">//x and y value of container</span><br />
<span class="kw2">var</span> offsetX <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span><span class="sy0">;</span><br />
<span class="kw2">var</span> offsetY <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span><span class="sy0">;</span><br />
<br />
<span class="co1">//rotation speed</span><br />
<span class="kw2">var</span> speed <span class="sy0">=</span> <span class="nu0">6000</span><span class="sy0">;</span><br />
<br />
<span class="co1">//when the mouse moves...</span><br />
$<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">mousemove</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Figure out how far it is from the center of the container</span><br />
&nbsp; &nbsp; mouseX <span class="sy0">=</span> e.<span class="me1">clientX</span> <span class="sy0">-</span> offsetX <span class="sy0">-</span> <span class="br0">&#40;</span>container.<span class="me1">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; mouseY <span class="sy0">=</span> e.<span class="me1">clientY</span> <span class="sy0">-</span> offsetY <span class="sy0">-</span> <span class="br0">&#40;</span>container.<span class="me1">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="kw2">var</span> animateIt <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Rotate along the y axis when the mouse is moved left and right</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>mouseX <span class="sy0">!=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; axisRotation.<span class="me1">y</span> <span class="sy0">+=</span> <span class="br0">&#40;</span>mouseX<span class="br0">&#41;</span> <span class="sy0">/</span> speed<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Rotate along the x axis when the mouse moves up and down.</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>mouseY <span class="sy0">!=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; axisRotation.<span class="me1">x</span> <span class="sy0">-=</span> mouseY <span class="sy0">/</span> speed<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Render the scene.</span><br />
&nbsp; &nbsp; scene.<span class="me1">renderCamera</span><span class="br0">&#40;</span>camera<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//keep calling function every 20 milliseconds.</span><br />
setInterval<span class="br0">&#40;</span>animateIt<span class="sy0">,</span> <span class="nu0">20</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="code explained" border="0" alt="code explained" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image35.png" width="420" height="420" /> </p>
<p> Anytime the mouse moved we would figure out how far the mouse is from the center of the object.&#160; Then we assign it to variables that will be used in a function that is called at set intervals.&#160; In that function we simply divide the mouse value by a speed variable and apply it to the axisRotation.&#160; You can adjust the sensitivity of the mouse by increasing or decreasing the speed value.&#160; You might be wondering why we’re applying the mouseX to the y value of axisRotation.&#160; This is because we want to control rotating on the y axis with our mouse moving left and right.&#160; Kind of like opening and closing a door.</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="axis" border="0" alt="axis" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image36.png" width="420" height="420" /> </p>
<p>&#160;</p>
<p>Here is the code all together:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>3d engine<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;screen&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; #item{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin:0 auto;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top:300px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; position: relative;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; ul{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color: #69c;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-weight: bold;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size:2em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery-1.3.2.min.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;3DEngine.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;Plane.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; //<span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.ready<span class="br0">&#40;</span>function<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<br />
<span class="sc2">&nbsp; &nbsp; var camera <span class="sy0">=</span> new Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; camera.init<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">300</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; var container <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span></span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; var item <span class="sy0">=</span> new Object3D<span class="br0">&#40;</span>container<span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">&nbsp; &nbsp; item.addChild<span class="br0">&#40;</span>new Plane<span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; var scene <span class="sy0">=</span> new Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; scene.addToScene<span class="br0">&#40;</span>item<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; var mouseX,mouseY <span class="sy0">=</span> <span class="nu0">0</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; var offsetX <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.left;</span><br />
<span class="sc2">&nbsp; &nbsp; var offsetY <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span>.offset<span class="br0">&#40;</span><span class="br0">&#41;</span>.top;</span><br />
<span class="sc2">&nbsp; &nbsp; var speed <span class="sy0">=</span> <span class="nu0">6000</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="br0">&#41;</span>.mousemove<span class="br0">&#40;</span>function<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; mouseX <span class="sy0">=</span> e.clientX - offsetX - <span class="br0">&#40;</span>container.<span class="kw3">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; mouseY <span class="sy0">=</span> e.clientY - offsetY - <span class="br0">&#40;</span>container.<span class="kw3">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; var animateIt <span class="sy0">=</span> function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseX !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.y +<span class="sy0">=</span> <span class="br0">&#40;</span>mouseX<span class="br0">&#41;</span> <span class="sy0">/</span> speed</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>mouseY !<span class="sy0">=</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.x -<span class="sy0">=</span> mouseY <span class="sy0">/</span> speed;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; scene.renderCamera<span class="br0">&#40;</span>camera<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; <span class="br0">&#125;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; setInterval<span class="br0">&#40;</span>animateIt, <span class="nu0">20</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; <span class="sy0">//</span><span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>Next Step</h2>
<p>Now that the mouse Interaction is taken care of.&#160; The next shape I’m going to take a stab at is the ring.&#160; Stay tuned for more 3D shapes.</p>
<p>&#160;</p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/3D-Engine/plane.zip" class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/3D-Engine/plane.html"class="Example" target="_blank">Example</a></div>
<p>&#160;</p>
<h3>Related</h3>
<p> <a href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank">3D Engine</a><br />
  <a href="http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/" target="_blank"><img src="http://www.devirtuoso.com/wp-content/uploads/2009/09/3D-Engine.jpg" alt="" title="" width="100" height="100" /></a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/7rEckmZ-Tv5CSqNCzCdUmW9o_3Y/0/da"><img src="http://feedads.g.doubleclick.net/~a/7rEckmZ-Tv5CSqNCzCdUmW9o_3Y/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/7rEckmZ-Tv5CSqNCzCdUmW9o_3Y/1/da"><img src="http://feedads.g.doubleclick.net/~a/7rEckmZ-Tv5CSqNCzCdUmW9o_3Y/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=p4ow-7IneIE:4yvny-23PyU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=p4ow-7IneIE:4yvny-23PyU:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=p4ow-7IneIE:4yvny-23PyU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=p4ow-7IneIE:4yvny-23PyU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=p4ow-7IneIE:4yvny-23PyU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=p4ow-7IneIE:4yvny-23PyU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=p4ow-7IneIE:4yvny-23PyU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=p4ow-7IneIE:4yvny-23PyU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=p4ow-7IneIE:4yvny-23PyU:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/</feedburner:origLink></item>
		<item>
		<title>Grabbing Content from Other Pages with Ajax and jQuery</title>
		<link>http://feedproxy.google.com/~r/Devirtuoso/~3/iugDC9okCRM/</link>
		<comments>http://www.devirtuoso.com/2009/09/grabbing-content-from-other-pages-with-ajax-and-jquery/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 21:48:33 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1117</guid>
		<description><![CDATA[Sometimes it is useful to grab content from one of your other pages and use it on another.&#160; This tutorial will go over how to pull in the other content, and use selectors to get what you want.

What we’re building
Essentially we will be building two pages.&#160; One with static HTML.&#160; The other with jQuery to [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes it is useful to grab content from one of your other pages and use it on another.&#160; This tutorial will go over how to pull in the other content, and use selectors to get what you want.</p>
<p><span id="more-1117"></span></p>
<h2>What we’re building</h2>
<p>Essentially we will be building two pages.&#160; One with static HTML.&#160; The other with jQuery to steal the content from there and display it on it’s own page.&#160; Pretty cool stuff.&#160; It is just standard Ajax, but with one cool feature, it allows you to select what you pull from the site using selectors.&#160; If you haven’t used Ajax with jQuery before I recommend you checking out the <a title="Beginners Guide to Using Ajax with jQuery" href="http://www.devirtuoso.com/2009/07/beginners-guide-to-using-ajax-with-jquery/" target="_blank">Beginners Guide to Using Ajax with jQuery</a>. </p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/Ajax-jQuery-Remote/example.zip"class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/Ajax-jQuery-Remote/"class="Example" target="_blank">Example</a></div>
<p>&#160;</p>
<h2>The HTML page</h2>
<p>First we’ll create a simple HTML page.&#160; I’m just going to use a header and an unordered list, just to show you can pick and choose what you want.</p>
<p>Here is the <strong>HTML</strong>:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Content Page<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/h1.html"><span class="kw2">h1</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;title&quot;</span>&gt;</span>This is a title<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/h1.html"><span class="kw2">h1</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Web<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>jQuery<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Ajax<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>HTML<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Not much too it huh.&#160; This isn’t going to be the page that displays, so really you just have to make sure it has the content you want in here.</p>
<p>&#160;</p>
<h2>The jQuery / Ajax Page</h2>
<p>This page is pretty bare as well.&#160; We’re just going to have a div that will be are holder, and the jQuery to pull the content from the other page.</p>
<p>Here is the page:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Ajax and Jquery: Remote Pages<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $(document).ready(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#list').load(&quot;Content.html ul&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/h2.html"><span class="kw2">h2</span></a>&gt;</span>Here is the list from the other page:<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/h2.html"><span class="kw2">h2</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;list&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Basically the load() function does all the work. You pass in the url of the page, and the selector you want to get and it gets the HTML and puts it in the selector that is calling the load function.&#160; Just a note, you might run into some caching issues if you have dynamic content, so it might be a good idea to add some unique id at the end of the url; perhaps a random number that you generate.&#160; e.g. (htmlPage.html?cacheBuster=1231321)</p>
<p>&#160;</p>
<h2>Server Side Pages</h2>
<p>This also handles server side pages. e.g.(PHP, ASP, etc) The beauty of the load function is it has extra arguments you can pass in.&#160; It has 3 in total</p>
<ol>
<li>The page URL / selector</li>
<li>Any Post Data you want to pass to the URL</li>
<li>A Callback function.</li>
<p>So if you pass an object into the second parameter it will send a post variable with those values.</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace">$<span class="br0">&#40;</span><span class="st0">'#selector'</span><span class="br0">&#41;</span>.<span class="me1">load</span><span class="br0">&#40;</span><span class="st0">&quot;content.html #selector&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span>data<span class="sy0">:</span>value<span class="br0">&#125;</span><span class="sy0">,</span> <br />
&nbsp; &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;Callback Function&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>For example, say we want to get the navigation from a certain page, and index.php loads the navigation based on what a certain post variable might be.&#160; This would be a prime example of when you might use the load function over other Ajax functions in jQuery.&#160; The ability to use a selector would help a great deal if you needed to pull a needle from a haystack of content.</p>
<h2>Conclusion</h2>
<p>More than likely this function isn’t going to be used everyday, but it’s good to keep in mind for those special occasions. </p>
<div class="resources"> <a href="http://www.devirtuoso.com/Examples/Ajax-jQuery-Remote/example.zip"class="Download" target="_blank">Download</a>  <a href="http://www.devirtuoso.com/Examples/Ajax-jQuery-Remote/"class="Example" target="_blank">Example</a></div>
<p>&#160;</p>

<p><a href="http://feedads.g.doubleclick.net/~a/sYRybo6R-MKboBNXd9DCoAEAh4Q/0/da"><img src="http://feedads.g.doubleclick.net/~a/sYRybo6R-MKboBNXd9DCoAEAh4Q/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/sYRybo6R-MKboBNXd9DCoAEAh4Q/1/da"><img src="http://feedads.g.doubleclick.net/~a/sYRybo6R-MKboBNXd9DCoAEAh4Q/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=iugDC9okCRM:yj1SOuEwC-Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=iugDC9okCRM:yj1SOuEwC-Y:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=iugDC9okCRM:yj1SOuEwC-Y:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=iugDC9okCRM:yj1SOuEwC-Y:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=iugDC9okCRM:yj1SOuEwC-Y:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=iugDC9okCRM:yj1SOuEwC-Y:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=iugDC9okCRM:yj1SOuEwC-Y:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=iugDC9okCRM:yj1SOuEwC-Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=iugDC9okCRM:yj1SOuEwC-Y:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/grabbing-content-from-other-pages-with-ajax-and-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.devirtuoso.com/2009/09/grabbing-content-from-other-pages-with-ajax-and-jquery/</feedburner:origLink></item>
		<item>
		<title>Making a 3D Engine in jQuery</title>
		<link>http://feedproxy.google.com/~r/Devirtuoso/~3/9njk-_EgjHQ/</link>
		<comments>http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 14:48:49 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1124</guid>
		<description><![CDATA[
	In the previous post &#8220;3D tag cloud&#8221; I received quite a few requests for different shapes besides the ring.
	The problem is how the tag cloud was created it doesn&#8217;t lend itself to different shapes very well. So
	this post will show how to create a 3D engine in jQuery / JavaScript for those more exciting shapes.


&#160;
What [...]]]></description>
			<content:encoded><![CDATA[<p>
	In the previous post &#8220;<a href="http://www.devirtuoso.com/2009/08/how-to-create-a-3d-tag-cloud-in-jquery/" target="_blank">3D tag cloud</a>&#8221; I received quite a few requests for different shapes besides the ring.<br />
	The problem is how the tag cloud was created it doesn&#8217;t lend itself to different shapes very well. So<br />
	this post will show how to create a 3D engine in jQuery / JavaScript for those more exciting shapes.
</p>
<p><span id="more-1124"></span></p>
<p>&#160;</p>
<h2>What We&#8217;re Building</h2>
<p>We&#8217;re going to create a 3D engine that will allow us to create shapes simply by creating an array of points. This engine will have a Camera, a Scene and an Object. It&#8217;ll work pretty well the same as in real life. The closer the camera is to the object the larger it gets. This won&#8217;t be a complete rendering engine, as this won&#8217;t render multiple objects at this point.</p>
<div class="resources"><a class="Download" href="http://www.devirtuoso.com/Examples/3D-Engine/example.zip" target="_blank">Download</a> <a class="Example" href="http://www.devirtuoso.com/Examples/3D-Engine/" target="_blank">Example</a></div>
<p>&#160;<a href="http://www.devirtuoso.com/Examples/3D-Engine/" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Cube" border="0" alt="cube 3d" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image_thumb1.png" width="431" height="449" /></a> </p>
<p>&#160;</p>
<h2>Display Object</h2>
<p>The Display Object is more or less a way to give each object a set of properties and methods. Say I wanted to create a cube, it would first have to inherit the DisplayObject3D class for it to work. It gives the object the tools it needs to get the job done. Kind of like a tool box for a handy man.</p>
<p>Here is the JavaScript Class:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> DisplayObject3D <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
DisplayObject3D.<span class="me1">prototype</span>._x <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
DisplayObject3D.<span class="me1">prototype</span>._y <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Create 3d Points</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">make3DPoint</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> point <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">x</span> <span class="sy0">=</span> x<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">y</span> <span class="sy0">=</span> y<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">z</span> <span class="sy0">=</span> z<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> point<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Create 2d Points</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">make2DPoint</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span> depth<span class="sy0">,</span> scaleFactor<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> point <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">x</span> <span class="sy0">=</span> x<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">y</span> <span class="sy0">=</span> y<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">depth</span> <span class="sy0">=</span> depth<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">scaleFactor</span> <span class="sy0">=</span> scaleFactor<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> point<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Holds the container</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">container</span> <span class="sy0">=</span> undefined<span class="sy0">;</span><br />
<br />
<span class="co1">//Holds an array of 3d points.</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">pointsArray</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">// Set the container and create place holders if </span><br />
<span class="co1">// there is no &lt;ul&gt; in the container</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">init</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span> <span class="sy0">=</span> $<span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">containerId</span> <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">container</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;id&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//if there isn't a ul than it creates a list of +'s</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>$<span class="br0">&#40;</span>container<span class="sy0">+</span><span class="st0">&quot;:has(ul)&quot;</span><span class="br0">&#41;</span>.<span class="me1">length</span> <span class="sy0">===</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> <span class="kw1">this</span>.<span class="me1">pointsArray</span>.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">'&lt;b id=&quot;item'</span><span class="sy0">+</span>i<span class="sy0">+</span><span class="st0">'&quot;&gt;+&lt;/b&gt;'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>If this seems a little foreign to you, you might want to check out the post <a title="Object Oriented Programming with JavaScript" href="http://www.devirtuoso.com/2009/09/object-oriented-programming-with-javascript/" target="_blank">Object Oriented Programming with JavaScript</a>.</p>
<h4>Make 3d/2d Points</h4>
<p>These functions basically create objects, one meant for 3d (x,y,z) and one meant for 2d(x,y,depth).&#160; These will come in handy when the scene is rendered.</p>
<h4>Initialization</h4>
<p>The init function assigns a variable to the container passed in.&#160; The container is where ever you want the 3d object to display.&#160; There is also a part of this function that checks to see if the container has an unordered list.&#160; If it doesn’t it just creates a bunch of +’s&#160; Really these lines aren’t necessary, I just put it in so I don’t always have to create a unordered list to see if my object is rendering.</p>
<p>&#160;</p>
<h2>Camera</h2>
<p>I’m guessing from the name you can probably figure out what this class does.&#160; It’s just like a real life camera.&#160; It basically creates a point of reference.</p>
<p>Here is the Camera Class:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Camera3D <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//The x,y,z of the camera</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">x</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">y</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">z</span> <span class="sy0">=</span> <span class="nu0">500</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Determines the zoom</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">focalLength</span> <span class="sy0">=</span> <span class="nu0">1000</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Figure out how large the object should be in</span><br />
<span class="co1">//reference to the camera.</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">scaleRatio</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="kw1">item</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">focalLength</span><span class="sy0">/</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">focalLength</span> <span class="sy0">+</span> <span class="kw1">item</span>.<span class="me1">z</span> <span class="sy0">-</span> <span class="kw1">this</span>.<span class="me1">z</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Initialize the camera with values.</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">init</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="sy0">,</span>focalLength<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">x</span> <span class="sy0">=</span> x<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">y</span> <span class="sy0">=</span> y<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">z</span> <span class="sy0">=</span> z<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">focalLength</span> <span class="sy0">=</span> focalLength<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>The focal length basically determines how large the object is going to look in reference to how close it is from the camera.&#160; Think of it like a zoom lens.&#160; You can zoom in, or zoom out.</p>
<p>The scaleRatio does the magic. It figures out how large the item should be in reference to the camera.</p>
<p>&#160;</p>
<h2>Object 3D</h2>
<p>This class isn’t overly important.&#160; I basically made this class so I can add more than one object in the future.&#160; Right now the engine can only deal with one object at a time. Object3D is a glorified array.&#160; Anytime you add an item to the array, it runs the init function on that item. </p>
<p>Here is the code:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">// class creates an array of objects to</span><br />
<span class="co1">// be rendered, and initializes them.</span><br />
<span class="kw2">var</span> Object3D <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span> <span class="sy0">=</span> $<span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Object3D.<span class="me1">prototype</span>.<span class="me1">objects</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Add object to the list of objects.</span><br />
Object3D.<span class="me1">prototype</span>.<span class="me1">addChild</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>object3D<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">objects</span>.<span class="me1">push</span><span class="br0">&#40;</span>object3D<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; object3D.<span class="me1">init</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">container</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">return</span> object3D<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>Scene</h2>
<p>This is where all the complicated stuff happens.&#160; I won’t get into great detail with the mathematics.&#160; High school math was boring enough <img src='http://www.devirtuoso.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> &#160; I will give you a high overview of what the code does though, so at least you have an understanding of what it does.</p>
<p>Here is the Scene Class:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Scene3D <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">sceneItems</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Adds objects to the list of items to be rendered.</span><br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">addToScene</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>object<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">sceneItems</span>.<span class="me1">push</span><span class="br0">&#40;</span>object<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">//Converts a 3d point into a 2d point.</span><br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">Transform3DPointsTo2DPoints</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>points<span class="sy0">,</span> axisRotations<span class="sy0">,</span>camera<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> TransformedPointsArray <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> sx <span class="sy0">=</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>axisRotations.<span class="me1">x</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> cx <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>axisRotations.<span class="me1">x</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> sy <span class="sy0">=</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>axisRotations.<span class="me1">y</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> cy <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>axisRotations.<span class="me1">y</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> sz <span class="sy0">=</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>axisRotations.<span class="me1">z</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> cz <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>axisRotations.<span class="me1">z</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="sy0">,</span> xy<span class="sy0">,</span>xz<span class="sy0">,</span> yx<span class="sy0">,</span>yz<span class="sy0">,</span> zx<span class="sy0">,</span>zy<span class="sy0">,</span> scaleFactor<span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">var</span> i <span class="sy0">=</span> points.<span class="me1">length</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>i<span class="sy0">--</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; x <span class="sy0">=</span> points<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">x</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; y <span class="sy0">=</span> points<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">y</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; z <span class="sy0">=</span> points<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">z</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// rotation around x</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; xy <span class="sy0">=</span> cx<span class="sy0">*</span>y <span class="sy0">-</span> sx<span class="sy0">*</span>z<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; xz <span class="sy0">=</span> sx<span class="sy0">*</span>y <span class="sy0">+</span> cx<span class="sy0">*</span>z<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// rotation around y</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; yz <span class="sy0">=</span> cy<span class="sy0">*</span>xz <span class="sy0">-</span> sy<span class="sy0">*</span>x<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; yx <span class="sy0">=</span> sy<span class="sy0">*</span>xz <span class="sy0">+</span> cy<span class="sy0">*</span>x<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// rotation around z</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; zx <span class="sy0">=</span> cz<span class="sy0">*</span>yx <span class="sy0">-</span> sz<span class="sy0">*</span>xy<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; zy <span class="sy0">=</span> sz<span class="sy0">*</span>yx <span class="sy0">+</span> cz<span class="sy0">*</span>xy<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; scaleFactor <span class="sy0">=</span> camera.<span class="me1">focalLength</span><span class="sy0">/</span><span class="br0">&#40;</span>camera.<span class="me1">focalLength</span> <span class="sy0">+</span> yz<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; x <span class="sy0">=</span> zx<span class="sy0">*</span>scaleFactor<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; y <span class="sy0">=</span> zy<span class="sy0">*</span>scaleFactor<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; z <span class="sy0">=</span> yz<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> displayObject <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; TransformedPointsArray<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">=</span> displayObject.<span class="me1">make2DPoint</span><span class="br0">&#40;</span>x<span class="sy0">,</span> y<span class="sy0">,</span> <span class="sy0">-</span>z<span class="sy0">,</span> scaleFactor<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">return</span> TransformedPointsArray<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">//Takes the converted 2d and applies the appropriate CSS.</span><br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">renderCamera</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>camera<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="co1">// Loop through all objects in the scene.</span><br />
&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> <span class="nu0">0</span> <span class="sy0">;</span> i<span class="sy0">&lt;</span> <span class="kw1">this</span>.<span class="me1">sceneItems</span>.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> obj <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">sceneItems</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">objects</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//transform the points in the object to 2d points.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> screenPoints <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">Transform3DPointsTo2DPoints</span><span class="br0">&#40;</span>obj.<span class="me1">pointsArray</span><span class="sy0">,</span> axisRotation<span class="sy0">,</span> camera<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//does the container have a ul inside of it.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> hasList <span class="sy0">=</span> <span class="br0">&#40;</span>document.<span class="me1">getElementById</span><span class="br0">&#40;</span>obj.<span class="me1">containerId</span><span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;ul&quot;</span><span class="br0">&#41;</span>.<span class="me1">length</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Cycle through each point in the object.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>k<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> k <span class="sy0">&lt;</span> obj.<span class="me1">pointsArray</span>.<span class="me1">length</span><span class="sy0">;</span> k<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> currItem <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//if the container has a list then select the lis</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>hasList<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>obj.<span class="me1">containerId</span><span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;ul&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;li&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//otherwise select whatever is there.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>obj.<span class="me1">containerId</span><span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;*&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//If there are items to render then...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>currItem<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem._x <span class="sy0">=</span> screenPoints<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">x</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem._y <span class="sy0">=</span> screenPoints<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">y</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">scale</span> <span class="sy0">=</span> screenPoints<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">scaleFactor</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Render the CSS.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">position</span> <span class="sy0">=</span> <span class="st0">&quot;absolute&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">top</span> <span class="sy0">=</span> currItem._y<span class="sy0">+</span><span class="st0">'px'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">left</span> <span class="sy0">=</span> currItem._x<span class="sy0">+</span><span class="st0">'px'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">fontSize</span> <span class="sy0">=</span> <span class="nu0">100</span><span class="sy0">*</span>currItem.<span class="me1">scale</span><span class="sy0">+</span><span class="st0">'%'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>currItem<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="br0">&#123;</span>opacity<span class="sy0">:</span><span class="br0">&#40;</span>currItem.<span class="me1">scale</span><span class="sy0">-</span>.5<span class="br0">&#41;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Center for rotation</span><br />
<span class="kw2">var</span> axisRotation <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h4>Add To Scene</h4>
<p>First thing you’ll see is the addToScene function.&#160; This basically populates the array that is used to render the scene.&#160; If you object is in this array it will get rendered, if it isn’t….it missed the bus.</p>
<p>&#160;</p>
<h4>Transform 3D point to 2D</h4>
<p>Next is the Transform3DPointsTo2DPoints function.&#160; This is probably the most important part of the engine.&#160; What it does is it takes a 3D point in space (x,y,z) and through a little magic converts it into a 2D point that can be displayed on screen.</p>
<p>&#160;</p>
<h4>Render Camera</h4>
<p>The renderCamera function doesn’t do anything too complicated.&#160; It’s sole purpose is to display the items on screen.&#160; It does this by looping through the objects in the scene, and passes each one into the Transform3DPointsTo2DPoints function.&#160; The function will return a 2D point that can be plotted using CSS.&#160; You might have noticed I’m using JavaScript for the CSS and selecting of the DOM instead of jQuery.&#160; Initially I used jQuery but found the browser was crawling, so I went back to the old fashion way.</p>
<p>&#160;</p>
<h2>The Cube</h2>
<p>I’ve put the Cube class in a separate file so you can import objects as you need them instead of having to load ones you aren’t using.&#160; </p>
<p>The class isn’t overly complicated.&#160; It’s creating an array and placing all the points on the cube into that array.&#160; It uses the make3DPoint function from the DisplayObject3D class to create each point. </p>
<p>Here is the code:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Cube <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>size<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//if the size is not set then give a default</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>size <span class="sy0">===</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; size <span class="sy0">=</span> <span class="nu0">10</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Create a 3d point for every point on the cube.</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span> <span class="sy0">=</span> <span class="br0">&#91;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//make3dpoint is a function inherited from</span><br />
&nbsp; &nbsp; <span class="co1">//DisplayObject3D</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Inherit DisplayObject3d methods and properties</span><br />
Cube.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>&#160;</p>
<h2>Using the 3D Engine</h2>
<p>There are a few steps that need to be done in order for this to work.&#160;&#160; First we’ll need some HTML. I’ll just create a div with an id and place a &lt;ul&gt; full of smiley faces.&#160; If you wanted you can leave the div blank and it will automatically create a bunch of +’s for you.</p>
<p>Here is the HTML:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-1">&lt;!-- List of smiley faces --&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery-1.3.2.min.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;3DEngine.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc-1">&lt;!-- </span><br />
<span class="sc-1">&nbsp; &nbsp; Each 3d object is a seperate js so you only </span><br />
<span class="sc-1">&nbsp; &nbsp; have to import what you need.</span><br />
<span class="sc-1">--&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;Cube.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Next comes the jQuery. There are a couple of steps you need to do:</p>
<ol>
<li>Create a camera and initialize it. </li>
<li>Create an Object Holder (Object3D) </li>
<li>Create an Object and put it in the holder. </li>
<li>Create a Scene and put the holder in it. </li>
</ol>
<p>Here is the jQuery:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<br />
<span class="co1">//Create a camera</span><br />
<span class="kw2">var</span> camera <span class="sy0">=</span> <span class="kw2">new</span> Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//initialize it.</span><br />
camera.<span class="me1">init</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">300</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Create an object holder.</span><br />
<span class="kw2">var</span> <span class="kw1">item</span> <span class="sy0">=</span> <span class="kw2">new</span> Object3D<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//add a new cube.</span><br />
<span class="kw1">item</span>.<span class="me1">addChild</span><span class="br0">&#40;</span><span class="kw2">new</span> Cube<span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">//Create a scene</span><br />
<span class="kw2">var</span> scene <span class="sy0">=</span> <span class="kw2">new</span> Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Place the object Holder in the scene.</span><br />
scene.<span class="me1">addToScene</span><span class="br0">&#40;</span><span class="kw1">item</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Animates the cube.</span><br />
<span class="kw2">var</span> animateIt <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">//rotates on the y and x axis.</span><br />
&nbsp; &nbsp; axisRotation.<span class="me1">y</span> <span class="sy0">+=</span> .01<br />
&nbsp; &nbsp; axisRotation.<span class="me1">x</span> <span class="sy0">-=</span> .01<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Render the scene.</span><br />
&nbsp; &nbsp; scene.<span class="me1">renderCamera</span><span class="br0">&#40;</span>camera<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
setInterval<span class="br0">&#40;</span>animateIt<span class="sy0">,</span> <span class="nu0">20</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>I didn’t get a chance to make it interact with the mouse. You can do that just by adjusting the axisRotation x, y and z values when the mouse moves.&#160; Perhaps I’ll do this in my next post.</p>
<p>&#160;</p>
<h2>That’s All For Now</h2>
<p>Stay tuned for the next couple of posts.&#160; I plan to make a couple different shapes for this.&#160; If you feel frisky by all means try and create your own shapes.&#160; Just create an array with a bunch of 3D Points.&#160;&#160; </p>
<p>There are still a couple of kinks to work out, but for now here is all the code together.</p>
<p>3DEngine.js</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="coMULTI">/*<br />
* DisplayObject3D ----------------------------------------------<br />
*/</span><br />
<span class="kw2">var</span> DisplayObject3D <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
DisplayObject3D.<span class="me1">prototype</span>._x <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
DisplayObject3D.<span class="me1">prototype</span>._y <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Create 3d Points</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">make3DPoint</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> point <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">x</span> <span class="sy0">=</span> x<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">y</span> <span class="sy0">=</span> y<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">z</span> <span class="sy0">=</span> z<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> point<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Create 2d Points</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">make2DPoint</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span> depth<span class="sy0">,</span> scaleFactor<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> point <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">x</span> <span class="sy0">=</span> x<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">y</span> <span class="sy0">=</span> y<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">depth</span> <span class="sy0">=</span> depth<span class="sy0">;</span><br />
&nbsp; &nbsp; point.<span class="me1">scaleFactor</span> <span class="sy0">=</span> scaleFactor<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> point<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">container</span> <span class="sy0">=</span> undefined<span class="sy0">;</span><br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">pointsArray</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<br />
DisplayObject3D.<span class="me1">prototype</span>.<span class="me1">init</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span> <span class="sy0">=</span> $<span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">containerId</span> <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">container</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;id&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//if there isn't a ul than it creates a list of +'s</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>$<span class="br0">&#40;</span>container<span class="sy0">+</span><span class="st0">&quot;:has(ul)&quot;</span><span class="br0">&#41;</span>.<span class="me1">length</span> <span class="sy0">===</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> <span class="kw1">this</span>.<span class="me1">pointsArray</span>.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">'&lt;b id=&quot;item'</span><span class="sy0">+</span>i<span class="sy0">+</span><span class="st0">'&quot;&gt;+&lt;/b&gt;'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span>&nbsp; <br />
<br />
<span class="coMULTI">/*<br />
* DisplayObject3D End ----------------------------------------------<br />
*/</span><br />
<br />
<br />
<span class="coMULTI">/*<br />
* Camera3D ----------------------------------------------<br />
*/</span><br />
<span class="kw2">var</span> Camera3D <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">x</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">y</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">z</span> <span class="sy0">=</span> <span class="nu0">500</span><span class="sy0">;</span><br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">focalLength</span> <span class="sy0">=</span> <span class="nu0">1000</span><span class="sy0">;</span><br />
<br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">scaleRatio</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="kw1">item</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="me1">focalLength</span><span class="sy0">/</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">focalLength</span> <span class="sy0">+</span> <span class="kw1">item</span>.<span class="me1">z</span> <span class="sy0">-</span> <span class="kw1">this</span>.<span class="me1">z</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Camera3D.<span class="me1">prototype</span>.<span class="me1">init</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="sy0">,</span>focalLength<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">x</span> <span class="sy0">=</span> x<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">y</span> <span class="sy0">=</span> y<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">z</span> <span class="sy0">=</span> z<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">focalLength</span> <span class="sy0">=</span> focalLength<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="coMULTI">/*<br />
* Camera3D End ----------------------------------------------<br />
*/</span><br />
<br />
<br />
<span class="coMULTI">/*<br />
* Object3D ----------------------------------------------<br />
*/</span><br />
<span class="kw2">var</span> Object3D <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span> <span class="sy0">=</span> $<span class="br0">&#40;</span>container<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Object3D.<span class="me1">prototype</span>.<span class="me1">objects</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<br />
Object3D.<span class="me1">prototype</span>.<span class="me1">addChild</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>object3D<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">objects</span>.<span class="me1">push</span><span class="br0">&#40;</span>object3D<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; object3D.<span class="me1">init</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">container</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">return</span> object3D<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="coMULTI">/*<br />
* Object3D End ----------------------------------------------<br />
*/</span><br />
<br />
<br />
<span class="coMULTI">/*<br />
* Scene3D ----------------------------------------------<br />
*/</span><br />
<br />
<span class="kw2">var</span> Scene3D <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">sceneItems</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">addToScene</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>object<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">sceneItems</span>.<span class="me1">push</span><span class="br0">&#40;</span>object<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">Transform3DPointsTo2DPoints</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>points<span class="sy0">,</span> axisRotations<span class="sy0">,</span>camera<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> TransformedPointsArray <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> sx <span class="sy0">=</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>axisRotations.<span class="me1">x</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> cx <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>axisRotations.<span class="me1">x</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> sy <span class="sy0">=</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>axisRotations.<span class="me1">y</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> cy <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>axisRotations.<span class="me1">y</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> sz <span class="sy0">=</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>axisRotations.<span class="me1">z</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> cz <span class="sy0">=</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>axisRotations.<span class="me1">z</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> x<span class="sy0">,</span>y<span class="sy0">,</span>z<span class="sy0">,</span> xy<span class="sy0">,</span>xz<span class="sy0">,</span> yx<span class="sy0">,</span>yz<span class="sy0">,</span> zx<span class="sy0">,</span>zy<span class="sy0">,</span> scaleFactor<span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">var</span> i <span class="sy0">=</span> points.<span class="me1">length</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>i<span class="sy0">--</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; x <span class="sy0">=</span> points<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">x</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; y <span class="sy0">=</span> points<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">y</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; z <span class="sy0">=</span> points<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">z</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// rotation around x</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; xy <span class="sy0">=</span> cx<span class="sy0">*</span>y <span class="sy0">-</span> sx<span class="sy0">*</span>z<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; xz <span class="sy0">=</span> sx<span class="sy0">*</span>y <span class="sy0">+</span> cx<span class="sy0">*</span>z<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// rotation around y</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; yz <span class="sy0">=</span> cy<span class="sy0">*</span>xz <span class="sy0">-</span> sy<span class="sy0">*</span>x<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; yx <span class="sy0">=</span> sy<span class="sy0">*</span>xz <span class="sy0">+</span> cy<span class="sy0">*</span>x<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// rotation around z</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; zx <span class="sy0">=</span> cz<span class="sy0">*</span>yx <span class="sy0">-</span> sz<span class="sy0">*</span>xy<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; zy <span class="sy0">=</span> sz<span class="sy0">*</span>yx <span class="sy0">+</span> cz<span class="sy0">*</span>xy<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; scaleFactor <span class="sy0">=</span> camera.<span class="me1">focalLength</span><span class="sy0">/</span><span class="br0">&#40;</span>camera.<span class="me1">focalLength</span> <span class="sy0">+</span> yz<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; x <span class="sy0">=</span> zx<span class="sy0">*</span>scaleFactor<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; y <span class="sy0">=</span> zy<span class="sy0">*</span>scaleFactor<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; z <span class="sy0">=</span> yz<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> displayObject <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; TransformedPointsArray<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">=</span> displayObject.<span class="me1">make2DPoint</span><span class="br0">&#40;</span>x<span class="sy0">,</span> y<span class="sy0">,</span> <span class="sy0">-</span>z<span class="sy0">,</span> scaleFactor<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">return</span> TransformedPointsArray<span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Scene3D.<span class="me1">prototype</span>.<span class="me1">renderCamera</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>camera<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> <span class="nu0">0</span> <span class="sy0">;</span> i<span class="sy0">&lt;</span> <span class="kw1">this</span>.<span class="me1">sceneItems</span>.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> obj <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">sceneItems</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">objects</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> screenPoints <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">Transform3DPointsTo2DPoints</span><span class="br0">&#40;</span>obj.<span class="me1">pointsArray</span><span class="sy0">,</span> axisRotation<span class="sy0">,</span> camera<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> hasList <span class="sy0">=</span> <span class="br0">&#40;</span>document.<span class="me1">getElementById</span><span class="br0">&#40;</span>obj.<span class="me1">containerId</span><span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;ul&quot;</span><span class="br0">&#41;</span>.<span class="me1">length</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>k<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> k <span class="sy0">&lt;</span> obj.<span class="me1">pointsArray</span>.<span class="me1">length</span><span class="sy0">;</span> k<span class="sy0">++</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> currItem <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>hasList<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>obj.<span class="me1">containerId</span><span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;ul&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;li&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>obj.<span class="me1">containerId</span><span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;*&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span>k<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>currItem<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem._x <span class="sy0">=</span> screenPoints<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">x</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem._y <span class="sy0">=</span> screenPoints<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">y</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">scale</span> <span class="sy0">=</span> screenPoints<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">scaleFactor</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">position</span> <span class="sy0">=</span> <span class="st0">&quot;absolute&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">top</span> <span class="sy0">=</span> currItem._y<span class="sy0">+</span><span class="st0">'px'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">left</span> <span class="sy0">=</span> currItem._x<span class="sy0">+</span><span class="st0">'px'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currItem.<span class="me1">style</span>.<span class="me1">fontSize</span> <span class="sy0">=</span> <span class="nu0">100</span><span class="sy0">*</span>currItem.<span class="me1">scale</span><span class="sy0">+</span><span class="st0">'%'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>currItem<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="br0">&#123;</span>opacity<span class="sy0">:</span><span class="br0">&#40;</span>currItem.<span class="me1">scale</span><span class="sy0">-</span>.5<span class="br0">&#41;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
<span class="coMULTI">/*<br />
* Scene3D End ----------------------------------------------<br />
*/</span><br />
<br />
<br />
<span class="co1">//Center for rotation</span><br />
<span class="kw2">var</span> axisRotation <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>Cube.js</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Cube <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>size<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>size <span class="sy0">===</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; size <span class="sy0">=</span> <span class="nu0">10</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pointsArray</span> <span class="sy0">=</span> <span class="br0">&#91;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,-</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">make3DPoint</span><span class="br0">&#40;</span><span class="sy0">-</span>size<span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span>size<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
Cube.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> DisplayObject3D<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>index.html</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Untitled Page<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;screen&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #item{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin:0 auto;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top:300px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; position: relative;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ul{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color: #69c;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-weight: bold;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size:2em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><span class="sc1">&amp;#x263A;</span><span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery-1.3.2.min.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;3DEngine.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;Cube.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; //<span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.ready<span class="br0">&#40;</span>function<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var camera <span class="sy0">=</span> new Camera3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; camera.init<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">300</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var item <span class="sy0">=</span> new Object3D<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&quot;#item&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; item.addChild<span class="br0">&#40;</span>new Cube<span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var scene <span class="sy0">=</span> new Scene3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene.addToScene<span class="br0">&#40;</span>item<span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">&nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var animateIt <span class="sy0">=</span> function<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.y +<span class="sy0">=</span> .01</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axisRotation.x -<span class="sy0">=</span> .01</span><br />
<br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene.renderCamera<span class="br0">&#40;</span>camera<span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setInterval<span class="br0">&#40;</span>animateIt, <span class="nu0">20</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">//</span><span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<div class="resources"><a class="Download" href="http://www.devirtuoso.com/Examples/3D-Engine/example.zip" target="_blank">Download</a> <a class="Example" href="http://www.devirtuoso.com/Examples/3D-Engine/" target="_blank">Example</a></div>
<p>&#160;</p>
<h3>Related</h3>
<table border="0" cellspacing="5" cellpadding="5">
<tr>
<td>
			<a href="http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/" target="_blank">3D Plane</a><br />
 <a href="http://www.devirtuoso.com/2009/09/3d-plane-for-jquery-3d-engine/" target="_blank"><img src="http://www.devirtuoso.com/wp-content/uploads/2009/09/3d-plane.jpg" alt="3d Plane" title="3d Plane" width="100" height="100" /></a>
		</td>
<td>
			 <a href="http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/" target="_blank">Wobbling Carousel</a><br />
 <a href="http://www.devirtuoso.com/2009/09/creating-a-wobbling-3d-carousel/" target="_blank"> <img src="http://www.devirtuoso.com/wp-content/uploads/2009/09/wobbling-carousel.jpg" width="100" height="100" alt="wobbling carousel" title="wobbling carousel" /></a></p>
</td>
<td>
 <a href="http://www.devirtuoso.com/2009/09/3d-sphere-using-jquery/" target="_blank">3D Sphere</a><br />
			 <a href="http://www.devirtuoso.com/2009/09/3d-sphere-using-jquery/" target="_blank"><img src="http://www.devirtuoso.com/wp-content/uploads/2009/09/3d-sphere.jpg" alt="3d sphere" width="100" height="100" title="3d sphere" /></a>
		</td>
</table>

<p><a href="http://feedads.g.doubleclick.net/~a/2C6MYJMRHV0hTw3oTlz-mxkY_R4/0/da"><img src="http://feedads.g.doubleclick.net/~a/2C6MYJMRHV0hTw3oTlz-mxkY_R4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2C6MYJMRHV0hTw3oTlz-mxkY_R4/1/da"><img src="http://feedads.g.doubleclick.net/~a/2C6MYJMRHV0hTw3oTlz-mxkY_R4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=9njk-_EgjHQ:wc4cGu2dWeA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=9njk-_EgjHQ:wc4cGu2dWeA:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=9njk-_EgjHQ:wc4cGu2dWeA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=9njk-_EgjHQ:wc4cGu2dWeA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=9njk-_EgjHQ:wc4cGu2dWeA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=9njk-_EgjHQ:wc4cGu2dWeA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=9njk-_EgjHQ:wc4cGu2dWeA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=9njk-_EgjHQ:wc4cGu2dWeA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=9njk-_EgjHQ:wc4cGu2dWeA:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.devirtuoso.com/2009/09/making-a-3d-engine-in-jquery/</feedburner:origLink></item>
		<item>
		<title>JavaScript Experiment – Browser Ball</title>
		<link>http://feedproxy.google.com/~r/Devirtuoso/~3/yEP3XuqXhrM/</link>
		<comments>http://www.devirtuoso.com/2009/09/javascript-experiment-browser-ball/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 14:45:18 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[showcase]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1111</guid>
		<description><![CDATA[I killed about 20 minutes playing with this one.&#160; We’ve all seen physics experiments with balls in a browser window.&#160; This is the first one that I’ve seen that uses multiple windows.
 


Try it out



&#160;
My hat goes off to Mark Mahoney for this one.&#160; It was done really well.
Fantastic work.
If you know of any other [...]]]></description>
			<content:encoded><![CDATA[<p>I killed about 20 minutes playing with this one.&#160; We’ve all seen physics experiments with balls in a browser window.&#160; This is the first one that I’ve seen that uses multiple windows.</p>
<p> <span id="more-1111"></span>
</p>
<h3></h3>
<h3><a href="http://experiments.instrum3nt.com/markmahoney/ball/" target="_blank">Try it out</a></h3>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:71679ff5-6a05-4c53-a540-6562dae857c5" class="wlWriterEditableSmartContent">
<div><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/3al8prbfK5o&amp;hl=en"></param><embed src="http://www.youtube.com/v/3al8prbfK5o&amp;hl=en" type="application/x-shockwave-flash" width="425" height="355"></embed></object></div>
</div>
<p>&#160;</p>
<p>My hat goes off to <a href="http://www.weareinstrument.com/#/team/mark-mahoney" target="_blank">Mark Mahoney</a> for this one.&#160; It was done really well.</p>
<p>Fantastic work.</p>
<p>If you know of any other experimental developments that are worth a look, don’t hesitate to contact us.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/9lHRhHrdEr5BwDrtI2cEeXsv7Xk/0/da"><img src="http://feedads.g.doubleclick.net/~a/9lHRhHrdEr5BwDrtI2cEeXsv7Xk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9lHRhHrdEr5BwDrtI2cEeXsv7Xk/1/da"><img src="http://feedads.g.doubleclick.net/~a/9lHRhHrdEr5BwDrtI2cEeXsv7Xk/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=yEP3XuqXhrM:X2g2RKTB0dU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=yEP3XuqXhrM:X2g2RKTB0dU:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=yEP3XuqXhrM:X2g2RKTB0dU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=yEP3XuqXhrM:X2g2RKTB0dU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=yEP3XuqXhrM:X2g2RKTB0dU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=yEP3XuqXhrM:X2g2RKTB0dU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=yEP3XuqXhrM:X2g2RKTB0dU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=yEP3XuqXhrM:X2g2RKTB0dU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=yEP3XuqXhrM:X2g2RKTB0dU:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/javascript-experiment-browser-ball/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.devirtuoso.com/2009/09/javascript-experiment-browser-ball/</feedburner:origLink></item>
		<item>
		<title>Tips to Build a Better Newsletter</title>
		<link>http://feedproxy.google.com/~r/Devirtuoso/~3/hdVV6lc7rYk/</link>
		<comments>http://www.devirtuoso.com/2009/09/tips-to-build-a-better-newsletter/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 01:57:44 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Development Best Practices]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[newsletter]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1104</guid>
		<description><![CDATA[Newsletters unfortunately are a necessary evil.&#160; Developers hate them and marketers love them.&#160; Here is a couple tips to help you through your next newsletter.
 
&#160;
Newsletter Width
Probably the most common question regarding newsletter is what dimensions should they be.&#160; The problem is each mail client is completely different.&#160; Some are tall and skinny, others short [...]]]></description>
			<content:encoded><![CDATA[<p>Newsletters unfortunately are a necessary evil.&#160; Developers hate them and marketers love them.&#160; Here is a couple tips to help you through your next newsletter.</p>
<p> <span id="more-1104"></span>
<p>&#160;</p>
<h2>Newsletter Width</h2>
<p>Probably the most common question regarding newsletter is what dimensions should they be.&#160; The problem is each mail client is completely different.&#160; Some are tall and skinny, others short and fat.&#160; It’s kind of like the left over bin at a bargain basement sale, you don’t know what you’re going to get.&#160; According to <a title="Campaign Monitor" href="http://www.campaignmontior.com" target="_blank">campaignmontior.com</a>, they suggest not to go any wider than 550-600 pixels.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="newsletter width" border="0" alt="newsletter width" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image25.png" width="445" height="199" /> </p>
<p>&#160;</p>
<h2>Tables for Structure</h2>
<p>You’ve spent all this time using divs and CSS in your websites to layout everything.&#160; Well with email you can forget all that. Back to the 1990’s we go.&#160; Best practice for laying out columns or any other structural areas is to use the good ol’ table.&#160; A lot mail clients don’t support the CSS that make using divs a viable solutions.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="table structure" border="0" alt="table structure" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image26.png" width="445" height="445" /> </p>
<p>&#160;</p>
<h2>Inline Styles</h2>
<p>It’s generally good practice to keep all your styles inline.&#160; Some mail clients take pleasure in adding their own CSS to the equation which throws yours out the window. Inline styles insure the mail client uses your styles and not theirs.&#160; If you do wish to put your styles at the top of your document, just be sure to do it within the body tag.&#160; I know what your thinking…but that won’t validate?&#160; You’re absolute right, but some mail clients totally discard the head tag, so anything in there will be thrown out like 2 month old milk.</p>
<p><a href="http://www.devirtuoso.com/wp-content/uploads/2009/09/image27.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="inline styles" border="0" alt="inline styles" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image_thumb.png" width="445" height="163" /></a> </p>
<p>&#160;</p>
<h2>Padding or Width, Not Both</h2>
<p>In CSS it’s generally good practice to keep padding and width separate.&#160; The same goes for emails.&#160; Width and padding don’t get along. Think of them like the contenders in the next UFC fight night.&#160; Since the mail clients are still stuck in prehistoric web days, padding can sometimes add to the width, even if the width is specified.&#160; If you need to have both then you’ll have to put a table within a table.&#160; The outside table cell specifying the width, and the inside one specifying the padding.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="padding or width, not both" border="0" alt="padding or width, not both" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image28.png" width="445" height="445" /> </p>
<p>&#160;</p>
<h2>Backgrounds</h2>
<p>Unfortunately Outlook 2007 screwed this up for everyone.&#160; It doesn’t support background images.&#160; So consider this when designing your next newsletter.&#160; Also the body tag gets stripped of any styles, so if you put a background color on it, it won’t show up in some mail clients.&#160; You’re best bet is to wrap you’re entire newsletter in a table, and apply the background color to the cell.&#160; It’s also good practice to use the old bgcolor attribute in place of the CSS.&#160; It ensures that all mail clients will display your background color.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="backgrounds" border="0" alt="backgrounds" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image29.png" width="445" height="280" /> </p>
<p>&#160;</p>
<h2>JavaScript / Flash</h2>
<p>Plain and simple, JavaScript and Flash aren’t supported, some cases they are, but most aren’t..&#160; They’re like the embarrassing friend of yours that nobody wants to hang out with.&#160; Sorry.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="don&#39;t use flash or javascript" border="0" alt="don&#39;t use flash or javascript" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image30.png" width="445" height="263" /> </p>
<p>&#160;</p>
<h2>Images</h2>
<p>Consider it good practice to always specify the width, height, and alt tags of all your images.&#160; A lot of email clients have images shut off automatically.&#160; With the width and height specified it will keep the structure of your layout, and the alt tag will give a description of the image.&#160; </p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="width height alt tags" border="0" alt="width height alt tags" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image31.png" width="445" height="117" /> </p>
<p>One extra little tip for images, sometimes you’ll notice an extra space underneath your images that you can’t get rid of.&#160; This can be a couple of things.</p>
<ol>
<li>You set your doctype of your document.&#160; Get rid of the doctype, or set it to HTML 4 transitional to fix this problem. </li>
<li>An old HTML bug where the image should be right up against the closing &lt;/td&gt; or else it throws in an extra space. </li>
</ol>
<h2>Conclusion</h2>
<p>In general try and think like you’re back in the old days of internet.&#160; For those younger people out there that haven’t developed in the olden days, now you see what we had to put up with, nothing works the way it should…wow I sound like my father. <img src='http://www.devirtuoso.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/RIyhOpdWxM3UKhqVSg_keXluKoY/0/da"><img src="http://feedads.g.doubleclick.net/~a/RIyhOpdWxM3UKhqVSg_keXluKoY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/RIyhOpdWxM3UKhqVSg_keXluKoY/1/da"><img src="http://feedads.g.doubleclick.net/~a/RIyhOpdWxM3UKhqVSg_keXluKoY/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=hdVV6lc7rYk:2QNl53Ru3f8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=hdVV6lc7rYk:2QNl53Ru3f8:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=hdVV6lc7rYk:2QNl53Ru3f8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=hdVV6lc7rYk:2QNl53Ru3f8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=hdVV6lc7rYk:2QNl53Ru3f8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=hdVV6lc7rYk:2QNl53Ru3f8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=hdVV6lc7rYk:2QNl53Ru3f8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=hdVV6lc7rYk:2QNl53Ru3f8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=hdVV6lc7rYk:2QNl53Ru3f8:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/tips-to-build-a-better-newsletter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.devirtuoso.com/2009/09/tips-to-build-a-better-newsletter/</feedburner:origLink></item>
		<item>
		<title>10 Useful jQuery Plugins</title>
		<link>http://feedproxy.google.com/~r/Devirtuoso/~3/aPjI4n-ImDk/</link>
		<comments>http://www.devirtuoso.com/2009/09/10-useful-jquery-plugins/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 14:07:16 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[development Tools]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1074</guid>
		<description><![CDATA[With project deadlines looming jQuery plugins can help add a lot of functionality in little to no time.    Here is a list of 10 extremely useful jQuery plugins.
 

&#160;
Superfish

Should call this one lifesaver. This one is a little more than a plugin. It is a whole menu system. It makes pain in [...]]]></description>
			<content:encoded><![CDATA[<p>With project deadlines looming <strong>jQuery plugins</strong> can help add a lot of functionality in little to no time.    <br />Here is a list of 10 extremely useful jQuery plugins.</p>
<p> <span id="more-1074"></span>
</p>
<h3>&#160;</h3>
<h3><a title="Superfish jQuery Plugin" href="http://users.tpg.com.au/j_birch/plugins/superfish/" target="_blank">Superfish</a></h3>
<p><a title="Superfish jQuery Plugin" href="http://users.tpg.com.au/j_birch/plugins/superfish/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="superfish" border="0" alt="superfish" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image14.png" width="440" height="159" /></a></p>
<p>Should call this one lifesaver. This one is a little more than a plugin. It is a whole menu system. It makes pain in the butt menus easy. I&#8217;ve used this one a fair amount.</p>
<p><a href="http://users.tpg.com.au/j_birch/plugins/superfish/" target="_blank">Visit the Website</a></p>
<p>&#160;</p>
<h3><a title="HoverIntent jQuery Plugin" href="http://cherne.net/brian/resources/jquery.hoverIntent.html" target="_blank">HoverIntent Plugin</a></h3>
<p><a title="HoverIntent jQuery Plugin" href="http://cherne.net/brian/resources/jquery.hoverIntent.html" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="HoverIntent" border="0" alt="HoverIntent" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image15.png" width="440" height="123" /></a></p>
<p>If you&#8217;re doing anything fancy on your navigation this is a must have. It simply adds a delay before triggering the hover event handler. In terms of menus, this means that your submenu won&#8217;t pop out when a user accidentally scrolls over it. A must have for horizontal menus.</p>
<p><a href="http://cherne.net/brian/resources/jquery.hoverIntent.html" target="_blank">Visit the Website</a></p>
<h3>&#160;</h3>
<h3><a href="http://plugins.jquery.com/node/46/release" target="_blank">Bgiframe Plugin</a></h3>
<p><a title="bgiframe jquery plugin" href="http://plugins.jquery.com/node/46/release" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="bgiframe" border="0" alt="bgiframe" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image16.png" width="440" height="104" /></a></p>
<p>This one fixes a lot of problems with z-index and form inputs, with little to no effort.</p>
<p><a href="http://plugins.jquery.com/node/46/release" target="_blank">Visit the Website</a></p>
<h3>&#160;</h3>
<h3><a href="http://tablesorter.com/docs/" target="_blank">Tablesorter</a></h3>
<p><a title="tablesorter jquery plugin" href="http://tablesorter.com/docs/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="tablesorter" border="0" alt="tablesorter" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image17.png" width="440" height="110" /></a></p>
<p>It wouldn&#8217;t be a project unless there was a last minute request. This one saved my life a couple times. For that I salute you Tablesorter. (It&#8217;s a plugin that sorts your tables)   <br /><a href="http://tablesorter.com/docs/" target="_blank">Visit the Website</a></p>
<h3>&#160;</h3>
<h3><a href="http://www.malsup.com/jquery/cycle/" target="_blank">Cycle</a></h3>
<p><a title="cycle jquery plugin" href="http://www.malsup.com/jquery/cycle/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="cycle" border="0" alt="cycle" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image18.png" width="440" height="114" /></a></p>
<p>This plugin is a slide show for your images. It has more transitions than you&#8217;ll ever use, and a lot of options for customizing.</p>
<p><a href="http://www.malsup.com/jquery/cycle/" target="_blank">View the Website</a></p>
<h3>&#160;</h3>
<h3><a href="http://gsgd.co.uk/sandbox/jquery/easing/" target="_blank">jQuery Easing Plugin</a></h3>
<p><a title="jQuery easing plugin" href="http://gsgd.co.uk/sandbox/jquery/easing/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="jquery easing plugin" border="0" alt="jquery easing plugin" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image19.png" width="440" height="106" /></a></p>
<p>This adds a little flair to your jQuery transitions and ultimately make your website stand out from the crowd.</p>
<p><a href="http://gsgd.co.uk/sandbox/jquery/easing/" target="_blank">View the Website</a></p>
<h3>&#160;</h3>
<h3><a href="http://jquery.com/demo/thickbox/" target="_blank">jQuery ThickBox Plugin</a></h3>
<p><a title="jquery thickbox plugin" href="http://jquery.com/demo/thickbox/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="thickbox" border="0" alt="thickbox" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image20.png" width="440" height="166" /></a></p>
<p>There are thousands of lightbox plugins out there. This one is my favorite for jQuery.</p>
<p><a href="http://jquery.com/demo/thickbox/" target="_blank">View the Website</a></p>
<h3>&#160;</h3>
<h3><a href="http://code.google.com/p/jquerycurvycorners/" target="_blank">Curvy Corners</a></h3>
<p><a title="curvy corners jquery plugin" href="http://code.google.com/p/jquerycurvycorners/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="curvy corners" border="0" alt="curvy corners" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image21.png" width="440" height="115" /></a></p>
<p>When designers make it there mission to make the roundest website every, this will save you, and you will thank Curvy Corners.</p>
<p><a href="http://code.google.com/p/jquerycurvycorners/" target="_blank">Visit the Website</a></p>
<h3>&#160;</h3>
<h3><a href="http://www.malsup.com/jquery/media/" target="_blank">jQuery Media Plugin</a></h3>
<p><a title="jquery media plugin" href="http://www.malsup.com/jquery/media/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="media plugin" border="0" alt="media plugin" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image22.png" width="440" height="153" /></a></p>
<p>Want to add media to your website? No prob. Plug this bad boy in and you&#8217;ll be soaking in the rays in no time.</p>
<p><a href="http://www.malsup.com/jquery/media/" target="_blank">Visit the Website</a></p>
<h3>&#160;</h3>
<h3><a href="http://jquery.andreaseberhard.de/pngFix/" target="_blank">PNGFix</a></h3>
<p><a title="jquery pngfix plugin" href="http://jquery.andreaseberhard.de/pngFix/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="pngfix" border="0" alt="pngfix" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image24.png" width="440" height="139" /></a></p>
<p>This tops my list of most used plugins. Until IE6 disappears, this one is a staple for me.</p>
<p><a href="http://jquery.andreaseberhard.de/pngFix/" target="_blank">Visit the Website</a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/2GJQQoQpHqAQZI8A_bPxwI8gtII/0/da"><img src="http://feedads.g.doubleclick.net/~a/2GJQQoQpHqAQZI8A_bPxwI8gtII/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2GJQQoQpHqAQZI8A_bPxwI8gtII/1/da"><img src="http://feedads.g.doubleclick.net/~a/2GJQQoQpHqAQZI8A_bPxwI8gtII/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=aPjI4n-ImDk:-yI6WlP36Vo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=aPjI4n-ImDk:-yI6WlP36Vo:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=aPjI4n-ImDk:-yI6WlP36Vo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=aPjI4n-ImDk:-yI6WlP36Vo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=aPjI4n-ImDk:-yI6WlP36Vo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=aPjI4n-ImDk:-yI6WlP36Vo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=aPjI4n-ImDk:-yI6WlP36Vo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=aPjI4n-ImDk:-yI6WlP36Vo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=aPjI4n-ImDk:-yI6WlP36Vo:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/10-useful-jquery-plugins/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.devirtuoso.com/2009/09/10-useful-jquery-plugins/</feedburner:origLink></item>
		<item>
		<title>Object Oriented Programming with JavaScript</title>
		<link>http://feedproxy.google.com/~r/Devirtuoso/~3/TVSmEnS5tdE/</link>
		<comments>http://www.devirtuoso.com/2009/09/object-oriented-programming-with-javascript/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 05:53:39 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1064</guid>
		<description><![CDATA[For all those that use Object Oriented Programming know the benefits.&#160; The ability to write reusable code is a real time saver in the long run.&#160; This post will cover how to write the basic structure of Object Oriented Programming in JavaScript.

&#160;
The Basics
For those of you that don’t know what Object Oriented Programming (oop) is, [...]]]></description>
			<content:encoded><![CDATA[<p>For all those that use Object Oriented Programming know the benefits.&#160; The ability to write reusable code is a real time saver in the long run.&#160; This post will cover how to write the basic structure of Object Oriented Programming in JavaScript.</p>
<p><span id="more-1064"></span></p>
<p>&#160;</p>
<h2>The Basics</h2>
<p>For those of you that don’t know what Object Oriented Programming (oop) is, it’s simply a way of writing code that allows you to reuse the same code in several other projects.&#160; Everything is encapsulated into nice little packages.&#160; This post won’t go over the actual theory of OOP, but I would definitely recommend looking into it.&#160; I’m sure if you Googled it, thousands of entries would come up.</p>
<p>&#160;</p>
<h2>The Ways </h2>
<p>There are a couple of ways to handle creating a class in JavaScript. </p>
<ul>
<li>Placing everything inside a function</li>
<li>Placing everything inside an object</li>
<li>Using prototype to build a class</li>
</ul>
<h4>Placing Everything Inside a Function</h4>
<p>In my opinion this is probably the easiest to read out of all of them.&#160; However it isn’t the most efficient from a processor point of view.&#160; </p>
<p>Say were going to build a Dog class. </p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">function</span> Dog <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="kw3">name</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">position</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">bark</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;wuff&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">walk</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">position</span> <span class="sy0">+=</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;position = &quot;</span><span class="sy0">+</span><span class="kw1">this</span>.<span class="me1">position</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">getName</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="kw3">name</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw2">var</span> dog <span class="sy0">=</span> <span class="kw2">new</span> Dog<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
dog.<span class="kw3">name</span> <span class="sy0">=</span> <span class="st0">&quot;Ralph&quot;</span><span class="sy0">;</span><br />
dog.<span class="me1">bark</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Popup box with &quot;wuff&quot;</span><br />
dog.<span class="me1">walk</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Position increases by 1;</span><br />
<span class="kw3">alert</span><span class="br0">&#40;</span>dog.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Outputs dog's name*/</span></div></td></tr></tbody></table></div>
<p>Class methods are simply variables assigned to functions, and public variables simply use &#8220;this&#8221; infront of their names.  If you wish to make a private variable, you would just create a regular variable <br />using &#8220;var&#8221; (e.g. var test = 1;)</p>
<p>&#160;</p>
<h4>Placing Everything Inside an Object</h4>
<p>This is handy if you don’t want to instantiate the class every time you want to use it.&#160; The downside is that it makes inheritance a little more difficult.</p>
<p>Here is the same Dog class but using an Object.</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> Dog <span class="sy0">=</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw3">name</span>&nbsp; &nbsp; <span class="sy0">:</span> &nbsp; <span class="st0">&quot;&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; position<span class="sy0">:</span> &nbsp; <span class="nu0">0</span><span class="sy0">,</span><br />
&nbsp; &nbsp; bark&nbsp; &nbsp; <span class="sy0">:</span> &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;wuff&quot;</span><span class="br0">&#41;</span> <span class="br0">&#125;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; walk&nbsp; &nbsp; <span class="sy0">:</span> &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">position</span> <span class="sy0">+=</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;position = &quot;</span><span class="sy0">+</span><span class="kw1">this</span>.<span class="me1">position</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; getName <span class="sy0">:</span> &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="kw3">name</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<br />
Dog.<span class="kw3">name</span> <span class="sy0">=</span> <span class="st0">&quot;Ralph&quot;</span><span class="sy0">;</span><br />
Dog.<span class="me1">bark</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Popup box with &quot;wuff&quot;</span><br />
Dog.<span class="me1">walk</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Position increases by 1;</span><br />
<span class="kw3">alert</span><span class="br0">&#40;</span>Dog.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Outputs dog's name</span></div></td></tr></tbody></table></div>
<p>This method uses JavaScript Object Notation (JSON) to layout the class.  Keys go on the left, and values go on the right.  Once again methods are simply functions assigned to variables.</p>
<p>&#160;</p>
<h4>Using prototype to Build a Class</h4>
<p>This is probably the preferred method of OOP in JavaScript.&#160; It’s a little harder to read, but say if we were to create thousands of dog objects, this would out perform the other methods.&#160; Using prototypes it doesn’t store the functions within the class. This means you aren’t creating thousands of functions, you’re only create one function that is pointed to a thousand times.&#160; Plus it’s easier to deal with inheritance.</p>
<p>Here is the Dog class yet again.</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">function</span> Dog <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><br />
Dog.<span class="me1">prototype</span>.<span class="kw3">name</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
Dog.<span class="me1">prototype</span>.<span class="me1">position</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<br />
Dog.<span class="me1">prototype</span>.<span class="me1">bark</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;wuff&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
Dog.<span class="me1">prototype</span>.<span class="me1">walk</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">position</span> <span class="sy0">+=</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;position = &quot;</span><span class="sy0">+</span><span class="kw1">this</span>.<span class="me1">position</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
Dog.<span class="me1">prototype</span>.<span class="me1">getName</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw1">this</span>.<span class="kw3">name</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw2">var</span> dog <span class="sy0">=</span> <span class="kw2">new</span> Dog<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
dog.<span class="kw3">name</span> <span class="sy0">=</span> <span class="st0">&quot;Ralph&quot;</span><span class="sy0">;</span><br />
dog.<span class="me1">bark</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Popup box with &quot;wuff&quot;</span><br />
dog.<span class="me1">walk</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Position increases by 1;</span><br />
<span class="kw3">alert</span><span class="br0">&#40;</span>dog.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Outputs dog's name</span></div></td></tr></tbody></table></div>
<p>What the prototype keyword is doing here is creating a framework.  So when the class is instanciated it will have all the methods and properties that it needs.</p>
<p>&#160;</p>
<p>Here is a Puppy class to show how inheritance is done.&#160; It inherits all the methods of the Dog class, but overwrites the bark method for a more puppy like bark.</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">function</span> Puppy <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<br />
Puppy.<span class="me1">prototype</span> <span class="sy0">=</span> <span class="kw2">new</span> Dog<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
Puppy.<span class="me1">prototype</span>.<span class="me1">bark</span> <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;Yelp&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw2">var</span> puppy <span class="sy0">=</span> <span class="kw2">new</span> Puppy<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
puppy.<span class="kw3">name</span> <span class="sy0">=</span> <span class="st0">&quot;Ralph&quot;</span><span class="sy0">;</span><br />
puppy.<span class="me1">bark</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Popup box with &quot;Yelp&quot;</span><br />
puppy.<span class="me1">walk</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Position increases by 1;</span><br />
<span class="kw3">alert</span><span class="br0">&#40;</span>puppy.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//Outputs puppy's name</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>Conclusion</h2>
<p>This is by no means a complete tutorial of everything OOP.&#160; This shows the basic structures of how JavaScript can handle OOP.&#160; Out of the three that were outlined, it is probably best to stick with the prototype method. If there are any Actionscript 2 people out there, you’ll feel right at home with this method. </p>
<p>&#160;</p>

<p><a href="http://feedads.g.doubleclick.net/~a/zISFdYjgdN6ArEMMousSrN7ff1Y/0/da"><img src="http://feedads.g.doubleclick.net/~a/zISFdYjgdN6ArEMMousSrN7ff1Y/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/zISFdYjgdN6ArEMMousSrN7ff1Y/1/da"><img src="http://feedads.g.doubleclick.net/~a/zISFdYjgdN6ArEMMousSrN7ff1Y/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=TVSmEnS5tdE:j9oShl8K0P4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=TVSmEnS5tdE:j9oShl8K0P4:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=TVSmEnS5tdE:j9oShl8K0P4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=TVSmEnS5tdE:j9oShl8K0P4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=TVSmEnS5tdE:j9oShl8K0P4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=TVSmEnS5tdE:j9oShl8K0P4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=TVSmEnS5tdE:j9oShl8K0P4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Devirtuoso?a=TVSmEnS5tdE:j9oShl8K0P4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Devirtuoso?i=TVSmEnS5tdE:j9oShl8K0P4:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/object-oriented-programming-with-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.devirtuoso.com/2009/09/object-oriented-programming-with-javascript/</feedburner:origLink></item>
	</channel>
</rss>
