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

<channel>
	<title>Everyday 3D &#187; Papervision3D</title>
	<atom:link href="http://www.everyday3d.com/blog/index.php/category/3d/papervision3d-3d/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.everyday3d.com/blog</link>
	<description>3D user experience on the web. Design, technology news. A blog by Bartek Drozdz.</description>
	<lastBuildDate>Fri, 03 Sep 2010 15:27:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>FOTB&#8217;09 presentation: 3D Bowling demo</title>
		<link>http://www.everyday3d.com/blog/index.php/2009/09/29/fotb09-3d-bowling-demo/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2009/09/29/fotb09-3d-bowling-demo/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 11:17:02 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[JigLibFlash]]></category>
		<category><![CDATA[News & Events]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[bowling game]]></category>
		<category><![CDATA[brighton]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[elevator pitch]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flash on the beach]]></category>
		<category><![CDATA[fotb]]></category>
		<category><![CDATA[physics]]></category>
		<category><![CDATA[presentation]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=573</guid>
		<description><![CDATA[UPDATE Nov 2009 There is a better quality video posted by John from Flash On The Beach. It is available here: http://vimeo.com/7292505. As I promised during my "3 minutes" in Brighton, I publish all the sources of my presentation. I added some comments in the code and removed the part with the slides. Here's also [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.vimeo.com/6768982"><img width="520" height="259" src="http://www.everydayflash.com/flash/fotb/fotb09bowling.png" alt="Video of 3D Bowling Demo, Flash on the Beach 2009" border="0"/></a></p>
<p><strong>UPDATE Nov 2009</strong> <em>There is a better quality video posted by John from Flash On The Beach. It is available here: <a href="http://vimeo.com/7292505">http://vimeo.com/7292505</a>.</em></p>
<p>As I promised during my <strong>"3 minutes"</strong> in Brighton, I publish all the <a href="http://www.everydayflash.com/flash/fotb/fotb09bowling.zip">sources</a> of my presentation. I added some comments in the code and removed the part with the slides.</p>
<p>Here's also the <a href="http://www.everyday3d.com/flash/fotb/"> demo</a> and a <a href="http://www.vimeo.com/6768982">video of the mini-session</a>. The demo is pretty rudimentary - I made so because I wanted to keep things simple during the presentation. I hope that it will be a solid base for someone who wish to create a full featured bowling game in Flash.</p>
<p>There were a few <strong>other implementations</strong> of a bowling game in <a href="http://www.jiglibflash.com/blog/">JigLibFlash</a> and <a href="http://blog.papervision3d.org/">Papervision3D</a>. Initially, guys a <strong>Blitz Agency</strong> published a few <a href="http://labs.blitzagency.com/?p=634">interesting experiments</a> with JigLibFlash, including a simple bowling simulation. <a href="http://blog.onebyonedesign.com/">Devon O. Wolfgang</a> has written a <a href="http://www.thetechlabs.com/tutorials/3d/create-a-3d-bowling-game-with-jiglibflash-and-papervision-3d/">great tutorial</a> about building such a game on <a href="http://www.thetechlabs.com/">Tech Labs</a> - be sure to check it out. I found it only after the presentation and since the tutorial explains a lot of things in details I felt like I was reinventing the wheel here. But hopefully there are still a couple of things I can add. </p>
<p>Thanks to the <a href="http://code.google.com/p/jiglibflash/wiki/New_API_Very_Short_Tutorial">new plugin API</a> we developped some time ago, setting up a scene with JigLib and an 3D engine has got a bit less complicated. However, tweaking the engine can be a hell. Here's a few things I found out:</p>
<p><strong>1. Simulation speed</strong></p>
<p>When you create the physics engine instance, the default speed of the simulation is 1. This is <strong>very slow</strong> and unrealistic. It will look much more natural if the speed is increased. Beware however - at higher speeds the collision detection system can be <strong>very inaccurate</strong> and result in objects running through each other without any collision being detected. I don't think there is a single setting that works fine in every situation, but for this case 9 worked fine for the regular speed simulation, and 2 for the "slow speed". <strong>You should always try different settings.</strong></p>
<p><strong>2. Mass</strong></p>
<p>Each rigid body has a mass property. It's easy to forget about it since it has a default value and it never complains if you don't change it. However, setting the masses right is crucial for a <strong>realistic simulation</strong>. In real world object have different masses, and so they should in a simulation. This is particularly important for a bowling game, where the ball is pretty heavy and the bins are not (I guess... has anyone ever had a bowling pin in his hands?) The trick is that the <strong>masses are relative to each other</strong>, so the more different objects you have the more you need to tweak the masses to get the results right. Also remember the effect of any forces applied to an object is related to it's mass.</p>
<p><strong>3. Physics material</strong></p>
<p>Each rigid body has a property called material which is an instance of the <a href="http://www.jiglibflash.com/docs/jiglib/physics/MaterialProperties.html">MaterialProperties</a> class. It has two properties: <strong>friction and restitution</strong>. I found out that playing with this values has a quite big impact on the simulation. Ex. setting a high value of the restitution results in the object becoming <strong>bouncy</strong> - I used this for the ball in my older <a href="http://www.everydayflash.com/blog/index.php/2009/04/23/jiglibflash-3d-physics/">ping-pong example</a>. In the bowling demo I used lower friction on the ball to make it <strong>slide</strong> more - just as a real bowling ball does. </p>
<p><strong>4. Object rotation</strong></p>
<p>Once a DisplayObject is wrapped into a physics rigid body you can't rely on it's <strong>rotationX, rotationY and rotation</strong>Z propeties anymore - because they <strong>are not being set</strong>. The physics engine sets the transformation matrix directly on the DisplayObject, so if you need to check it's rotation you need to <strong>extract it from the matrix</strong>. Fortunately, there's an easy way to do this:</p>
<div class="igBar"><span id="lactionscript-3"><a href="#" onclick="javascript:showPlainTxt('actionscript-3'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-3">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> p:DisplayObject3D = physics.<span style="color: #006600;">getMesh</span><span style="color: #66cc66;">&#40;</span>pins<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> h:Number3D = Matrix3D.<span style="color: #006600;">matrix2euler</span><span style="color: #66cc66;">&#40;</span>p.<span style="color: #006600;">transform</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">// h.x is the rotationX of the object in this case. </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><strong>5. Object activity</strong></p>
<p>As a result of multiple forces being applied to an object and multiple collisions sometimes the objects are left in a state where the shake a bit endlessly. This can also happen when the objects are initially positioned. Calling the RigidBody.setInactive() will fix that. And you can call more than once.</p>
<p><strong>Important conclusion: tweak, tweak, tweak...</strong></p>
<p>It is generally agreed that <strong>hardcoded ("magic") numbers</strong> are not a good coding practice. However in 3D animations, and especially with physics the important thing is <strong>not the beauty of the code, but the what you see at the end</strong>. If you browse the source code from this demo you will notice that I not only hardcoded a lot of values, I even left ugly lines like that: </p>
<div class="igBar"><span id="lactionscript-4"><a href="#" onclick="javascript:showPlainTxt('actionscript-4'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-4">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">force = <span style="color: #66cc66;">&#40;</span>speed == <span style="color: #cc66cc;color:#800000;">9</span><span style="color: #66cc66;">&#41;</span> ? <span style="color: #cc66cc;color:#800000;">5000</span> : <span style="color: #cc66cc;color:#800000;">3000</span> * <span style="color: #cc66cc;color:#800000;">8</span> * <span style="color: #cc66cc;color:#800000;">4</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>In fact this is what I like the most in doing all those demos and experiments - the moment when code stops being just a list of instructions for the machine and becomes an <strong>art of making things look good</strong> by adding little tweaks here and there. If you tend to write very clean code and use all possible standards and conventions, from time to time <strong>make it ugly</strong>... you'll see how good it feels :)</p>
<p>I hope that this few tips will help you with your <strong>next JigLib project</strong>!</p>
<p>Last but not least, I'd like to say thanks to everyone who woke up early to see the <strong>Elevator Pitch session</strong>. It was a great experience being there and talking to you. <strong>The Brighton Dome</strong> packed with people can be intimidating and 3 minutes is not much time, so there was no place for mistakes. Fortunately, the <strong>FOTB technical crew</strong> made it all seamless. Great job guys! </p>
<p>Finally, I would like to give a special thanks to <strong>John Davey</strong> for inviting me to <strong>Flash On The Beach</strong> and for making this great conference happen! </p>
<p>Hope to see you next year!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2009/09/29/fotb09-3d-bowling-demo/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Exploring JigLibFlash &#8211; the AS3 3D physics library</title>
		<link>http://www.everyday3d.com/blog/index.php/2009/04/23/jiglibflash-3d-physics/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2009/04/23/jiglibflash-3d-physics/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 08:38:27 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Away3D]]></category>
		<category><![CDATA[JigLibFlash]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[physics]]></category>
		<category><![CDATA[physics simulation]]></category>
		<category><![CDATA[pingpong]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=204</guid>
		<description><![CDATA[JigLibFlash is a new library for 3D physics simulation in Flash. It is ported from a C++ open source engine. It's been around for a few months now, and if you haven't heard about it, you need to catch up! I believe physics simulation is the next step in the Flash 3D world, so I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.everydayflash.com/flash/jiglib/pingpong.html" target="_blank"><img src="http://www.everydayflash.com/flash/jiglib/pingpong.jpg" width="520" height="245" border="0" alt=""></a></p>
<p><strong>JigLibFlash</strong> is a new library for 3D physics simulation in Flash. It is ported from a <strong>C++ open source engine</strong>. It's been around for a few months now, and if you haven't heard about it, you need to catch up!</p>
<p>I believe physics simulation is the <strong>next step</strong> in the Flash 3D world, so I got very excited when Ringo from <a href="http://www.flashbookmarks.com/" target="_blank">FlashBookmarks</a> invited me <strong>join the JigLibFlash team</strong> a couple of months ago. One little problem: I am perfectly lame when it comes to physics... In this situation, the only logical thing to do was to join the team and learn all the stuff I need to know about it in the meantime. Sounds like a challenge! </p>
<p>Now I slowly fill my knowledge gap. However, I also managed to do some actual work on the library. Together with <a href="http://blog.reyco1.com/" target="_blank">Reyco</a> we remodeled the API. We started by making it more <strong>Flash developer</strong> friendly, less C-style and more AS-style. All the methods start with a lowercase letter now, and instead of having to set the position and rotation using vectors and matrices, the new API offers simple getter/setters for properties like x/y/z and rotationX/Y/Z just like in <a href="http://blog.papervision3d.org/" target="_blank">Papervision3D</a> or in the new Flash Player 10 API. </p>
<p>Last but not least, we also created a plugin system to <strong>easily integrate</strong> <strong>JigLibFlash </strong>with the popular 3D engines like <a href="http://blog.papervision3d.org/" target="_blank">Papervision3D</a> or <a href="http://away3d.com/" target="_blank">Away3D</a>. Now there are <strong>specialized classes</strong> to interact with those two engines and it should be pretty easy to create a plugin for another engine if one needs. If you worked with <a href="http://code.google.com/p/as3dmod/" target="_blank">AS3Dmod</a> you should notice that the concept is similar to the plugin architecture in there. <em>Update: I just saw in the sources that someone already created a plugin for Sandy3D.</em></p>
<p>To learn more about these changes you can refer to the <a href="http://code.google.com/p/jiglibflash/wiki/New_API_Very_Short_Tutorial" target="_blank">tutorial</a> I wrote which is posted on the projects wiki page. Reyco also wrote a <a href="http://blog.reyco1.com/jiglibflash-papervision3d-quick-run-through/" target="_blank">great article</a> about this on his blog.</p>
<p>The <a href="/flash/jiglib/pingpong.html" target="_blank">demo above</a> is my <strong>first little experiment</strong> with JigLibFlash and <a href="http://blog.papervision3d.org/" target="_blank">Papervision3D</a>. My idea was to integrate a <strong>Collada object with the physics system</strong> and to add some interactivity to it. I extended the <a href="http://code.google.com/p/jiglibflash/source/browse/trunk/fp9/src/jiglib/plugin/papervision3d/constraint/MouseConstraint.as" target="_blank">Mouse constraint class</a> created by Reyco to control the racket. I encountered some problems with stabilizing it in the long run. After having bounced the ball a few times the racket starts to rotate as if the constraints were broken... well, I still need to do some research on that. </p>
<p><strong>Source code</strong>. You can browse the sources for the demo <a href="http://code.google.com/p/barteksplayground/source/browse/#svn/trunk/fp10/src/com/everydayflash/jiglib/pong" target="_blank">here</a>.</p>
<p><strong>Links</strong>. Some links to get you started with JigLibFlash:</p>
<ul>
<li><a href="http://www.jiglibflash.com/blog/" target="_blank">Official blog</a>, <a href="http://code.google.com/p/jiglibflash/" target="_blank">Google code</a></li>
<li><a href="http://code.google.com/p/jiglibflash/wiki/New_API_Very_Short_Tutorial" target="_blank">Wiki tutorial on new API</a> and <a href="http://blog.reyco1.com/jiglibflash-papervision3d-quick-run-through/" target="_blank">Reyco's article</a></li>
<li><a href="http://blog.zupko.info/?p=273" target="_blank">Really cool demo by Andy Zupko</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2009/04/23/jiglibflash-3d-physics/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Mustang goes into augmented reality</title>
		<link>http://www.everyday3d.com/blog/index.php/2009/03/26/mustang-augmented-reality/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2009/03/26/mustang-augmented-reality/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 18:45:01 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[augmented reality]]></category>
		<category><![CDATA[FLARToolkit]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[mustang]]></category>
		<category><![CDATA[papervision3d]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=66</guid>
		<description><![CDATA[Augmented Reality (AR) generated so much buzz in the community in the last few weeks that I had to give it a try! I suppose most of you know what AR is, however just in case you don't, here's some basic facts from an Actionscript developer perspective: augmented reality uses pattern recognition to render 3D [...]]]></description>
			<content:encoded><![CDATA[<p><object width="520" height="388"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3864433&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=3864433&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="520" height="388"></embed></object></p>
<p><strong>Augmented Reality (AR)</strong> generated so much buzz in the community in the last few weeks that I had to give it a try!</p>
<p>I suppose most of you know what AR is, however just in case you don't, here's some basic facts from an Actionscript developer perspective: augmented reality uses <strong>pattern recognition</strong> to render <strong>3D graphics on top of a video display</strong>. A pattern, also called marker, is a rectangular shape that you need to print and position in front of your camera. The stream from the camera is analyzed and the marker is used to determine the <strong>coordinate system of the world</strong> captured by the camera. This coordinate system is passed to a 3D engine which <strong>renders objects on top of the video image</strong>. Pretty simple, huh?</p>
<p>As far as Flash is concerned, the API for augmented reality is called <a href="http://www.libspark.org/wiki/saqoosha/FLARToolKit/en" target="_blank"><strong>FLARToolkit</strong></a>, which is an AS3 <strong>port of library written in Java and C</strong> done by <a href="http://saqoosha.net/" target="_blank">Saqoosha</a>. If you want to know more about this project, here's a great <a href="http://www.mikkoh.com/blog/?p=182" target="_blank">intro to the subject</a> written by Mikko Haapoja.</p>
<p>In most of the cool AR projects I have seen so far <a href="http://ge.ecomagination.com/smartgrid/#/augmented_reality" target="_blank">[1]</a> <a href="http://www.boffswana.com/news/?p=392" target="_blank">[2]</a> the <strong>user is supposed to hold the marker and move it around</strong> in front of the camera and the 3d object follows the marker. I had a slightly different idea: why not just <strong>leave the marker and the camera in one place</strong> and use your keyboard to move around the 3d objects? </p>
<p>Some time ago I posted a <a href="http://www.everydayflash.com/blog/index.php/2009/02/13/car-simulation-with-maya-papervision3d/" target="_blank">demo featuring a Mustang</a> that you could drive around a desert scenery. I thought it would be cool if I could now drive it around my bedroom floor. I was very surprised how easy it was to integrate my model with <strong>FLARToolkit and Papervision3D</strong>. All I had to do was to scale and rotate the model a bit and that's it! </p>
<p>The <a href="http://vimeo.com/3864433" target="_blank">above video</a> shows a recording of the experiment. If you have a webcam you can try it yourself. To do this, follow this instructions:</p>
<ol>
<li><a href="http://www.everydayflash.com/flash/flar/marker.pdf" target="_blank">Print the marker</a> (You can alternatively display it on your iPhone)</li>
<li>Click on <a href="http://www.everydayflash.com/flash/flar/" target="_blank">this link</a>, and choose "Allow" from the security dialog</li>
<li>Point your webcam so that the marker is fully visible</li>
<li>When the car is loaded (~250kb) it will appear on top of it</li>
<li>Use cursor keys to drive the car and CTRL key to apply hand brake</li>
<li>Have fun!</li>
</ol>
<p>If you want to dig further <a href="http://code.google.com/p/barteksplayground/source/browse/#svn/trunk/fp10/src/com/everydayflash/flar/mustang" target="_blank"><strong>here's the source code</strong></a>. The whole magic is in the <code>FlarMustang.as</code> class. The rest of the classes are an adaptation from the FLARToolkit basic example and some classes I used for the <a href="http://www.everydayflash.com/blog/index.php/2009/02/13/car-simulation-with-maya-papervision3d/">Mustang demo</a>. </p>
<p><strong>Unrelated note</strong>. In case you are reading this post in your RSS reader, you might not have noticed that <a href="http://www.everydayflash.com/blog/">I redesigned the blog</a>. It's good to change from time to time! Among other stuff, there's a new list of previous 3D experiments and new links in the blogroll, so take a look.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2009/03/26/mustang-augmented-reality/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Car simulation with Maya &amp; Papervision3d</title>
		<link>http://www.everyday3d.com/blog/index.php/2009/02/13/car-simulation-with-maya-papervision3d/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2009/02/13/car-simulation-with-maya-papervision3d/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 10:17:09 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[as3dmod]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[car]]></category>
		<category><![CDATA[car game]]></category>
		<category><![CDATA[car physics]]></category>
		<category><![CDATA[car simulation]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[mustang]]></category>
		<category><![CDATA[papervision3d]]></category>
		<category><![CDATA[racing]]></category>
		<category><![CDATA[racing game]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=51</guid>
		<description><![CDATA[Take a test drive with a powerful Mustang GT in a desert scenery! This demo features a car model imported from Maya into Papervision3D. It uses some home-made physics to simulate the car movement and a couple of new AS3Dmod features to manage the model (more below). I created this demo together with Krister Karlsson. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/flash/mustang/" target="_blank"><img src="/flash/mustang/mustang.jpg" width="520" height="200" border="0" alt="Mustang GT | Maya, Papervision3D"></a></p>
<p>Take a test drive with a powerful <strong>Mustang GT</strong> in a desert scenery! This demo features a car model imported from Maya into Papervision3D. It uses some home-made physics to simulate the car movement and a couple of new AS3Dmod features to manage the model (more below). </p>
<p>I created this demo together with <strong>Krister Karlsson</strong>. Krister is a 3d artist working with Maya and founder of <a href="http://www.modesty.se" target="_blank">Modesty</a> - a Stockholm based creative agency. The (super)low poly Mustang used here is based on a concept model made by Krister that was <strong>later used to create an actual car!</strong> You can read more about <a href="http://modesty.se/clients/eleanor/" target="_blank">this project here</a>.</p>
<p>Working with this demo has been an occasion for me to explore all the spectrum of Flash 3D related development, like importing and managing a <strong>complex model</strong>, adding interaction and scripting <strong>car physics</strong>. All this with a reasonable performance in mind, of course. </p>
<p>There is quite a lot of source code involved in this demo. I won't be publishing it all as parts of it are rather messy. Instead I'll focus on some <strong>particular problems</strong> I've encountered and solutions to them.</p>
<p><strong>Pivots.</strong> I can't tell if this is a problem of the <a href="http://sourceforge.net/projects/colladamaya/" target="_blank">Maya Collada Exporter</a> or if we have been doing something wrong, but the fact remains that <strong>moving the pivot point of an object in Maya is not reflected in Papervision3D</strong>. Instead, all pivot points default to the center of the whole object when the DAE file is imported.</p>
<p>To fix it, I had the idea to move the pivot point in Actionscript. Unfortunately, there isn't an easy way to do that in Papervision3D. This problem is <a href="http://www.nabble.com/changing-rotation-pivot-td14613233.html#a14613233" target="_blank">generally solved</a> by putting the DisplayObject3D inside another and move it in relation to its parent. But when all the objects are part of a structured DAE it becomes quite painful and requires additional steps. So instead, I wrote a modifier that takes care of that. It's called <a href="http://code.google.com/p/as3dmod/source/browse/trunk/src/com/as3dmod/modifiers/Pivot.as" target="_blank"><strong>Pivot</strong></a>, and this is the way it works:</p>
<div class="igBar"><span id="lactionscript-9"><a href="#" onclick="javascript:showPlainTxt('actionscript-9'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-9">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> do3d:Cube = <span style="color: #000000; font-weight: bold;">new</span> Cube<span style="color: #66cc66;">&#40;</span>materials, <span style="color: #cc66cc;color:#800000;">200</span>, <span style="color: #cc66cc;color:#800000;">200</span>, <span style="color: #cc66cc;color:#800000;">200</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> stack:ModifierStack = <span style="color: #000000; font-weight: bold;">new</span> ModifierStack<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> LibraryPv3d<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, do3d<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> pivot:Pivot = <span style="color: #000000; font-weight: bold;">new</span> Pivot<span style="color: #66cc66;">&#40;</span>-<span style="color: #cc66cc;color:#800000;">200</span>,-<span style="color: #cc66cc;color:#800000;">200</span>,-<span style="color: #cc66cc;color:#800000;">200</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">stack.<span style="color: #006600;">addModifier</span><span style="color: #66cc66;">&#40;</span>pivot<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">stack.<span style="color: #006600;">collapse</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>This piece of code will move the pivot point <strong>-200 units on all 3 axes</strong>. In case of this cube it will end up in the lower left corner. It does it without creating any additional display objects, but rather by offsetting all the objects vertices.</p>
<p>Please note that I collapse the stack after applying the pivot. Otherwise the pivot would be moved at every call to <code>stack.apply()</code>, which is not what we are looking here for.</p>
<p>The problem with the Mustang model was that all 4 wheels were rotating around the center of the car rather then around individual centers of each object. I needed to move the pivot point to the center of each wheel. I thought that moving the pivot to the geometrical center of the object is a typical thing to do, so I create a shortcut method for it:</p>
<div class="igBar"><span id="lactionscript-10"><a href="#" onclick="javascript:showPlainTxt('actionscript-10'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-10">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">pivot.<span style="color: #006600;">setMeshCenter</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Calling this function automatically sets the pivot point in the geometrical <strong>center of the mesh</strong>. At this point I thought I was done with the wheels, but there was one more problem...</p>
<p><strong>Roll &#038; steer</strong>. I think anyone who ever created an interactive 3d car model must have faced this one. <strong>A wheel rolls around the Z axis and the steering goes along it's Y axis</strong>. So, the first think that came to my mind when I started to code it was:</p>
<div class="igBar"><span id="lactionscript-11"><a href="#" onclick="javascript:showPlainTxt('actionscript-11'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-11">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">wheel.<span style="color: #006600;">rotationZ</span> += <span style="color: #cc66cc;color:#800000;">10</span>; <span style="color: #808080; font-style: italic;">// roll 10 degrees</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">wheel.<span style="color: #006600;">rotationY</span> = <span style="color: #cc66cc;color:#800000;">30</span>; <span style="color: #808080; font-style: italic;">// turn 30 degrees </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>While this code seems perfectly logical, when put in action <strong>things go wrong</strong> and the wheel starts to act like if the car had undergone a severe crash.</p>
<p>The reason for this is that once the wheel rotates along the Y axis (turns), the Z axis is no longer the right axis for roll. The correct axis would be the Z axis rotated 30 degrees on the XZ plane. </p>
<p>Again, a solution would be to enclose the wheel into a parent DisplayObject3D and then use the parent to steer and the child to roll. However, since I had already an elegant solution for the pivot I didn't want to <strong>clutter my model</strong> with an additional set of elements for this one either. </p>
<p>There comes the <strong><a href="http://code.google.com/p/as3dmod/source/browse/trunk/src/com/as3dmod/modifiers/Wheel.as" target="_blank">Wheel modifier</a></strong>. Apply it to an object - typically of a cylindrical shape - and use its <code>speed</code> and <code>turn</code> properties to manipulate the wheel. </p>
<div class="igBar"><span id="lactionscript-12"><a href="#" onclick="javascript:showPlainTxt('actionscript-12'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-12">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> do3d:DisplayObject3D = dae.<span style="color: #006600;">getChildByName</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"wheel"</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> stack:ModifierStack = <span style="color: #000000; font-weight: bold;">new</span> ModifierStack<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> LibraryPv3d<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, do3d<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> wheel:Wheel = <span style="color: #000000; font-weight: bold;">new</span> Wheel<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">stack.<span style="color: #006600;">addModifier</span><span style="color: #66cc66;">&#40;</span>wheel<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">...</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080; font-style: italic;">// Please mind that it expects values in radians</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">wheel.<span style="color: #006600;">turn</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">PI</span> / <span style="color: #cc66cc;color:#800000;">6</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">wheel.<span style="color: #006600;">speed</span> = <span style="color: #cc66cc;color:#800000;">5</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">stack.<span style="color: #0066CC;">apply</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Internally the modifier applies some math to <strong>rotate the roll axis according the the current turn value</strong> so that everything looks fine and you don't need to worry about it ;) Read the <a href="http://www.everydayflash.com/flash/as3dmod/doc/com/as3dmod/modifiers/Wheel.html" target="_blank">documentation of this class</a> for more information.</p>
<p>All this new features are available in the <strong>latest SVN revision of AS3Dmod</strong>. So, go ahead and <a href="http://code.google.com/p/as3dmod/source/checkout" target="_blank">grab it </a> later. But first, <a href="/flash/mustang/" target="_blank">enjoy your ride</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2009/02/13/car-simulation-with-maya-papervision3d/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Making things walk in Flash 3D</title>
		<link>http://www.everyday3d.com/blog/index.php/2009/02/09/making-things-walk-in-flash-3d/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2009/02/09/making-things-walk-in-flash-3d/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 09:06:22 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Away3D]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[as3dmod]]></category>
		<category><![CDATA[2D Animation]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[character animation]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[papervision3d]]></category>
		<category><![CDATA[running]]></category>
		<category><![CDATA[walk cycle]]></category>
		<category><![CDATA[walking]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=52</guid>
		<description><![CDATA[An Actionscript-based 3D bone system is something I wanted to do for a long time, but I couldn't figure out how to approach this problem for several months. A few days ago, I finally made a breakthrough. Here's a first demo I quickly put together: a 3D walk cycle. So far the only way to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.everydayflash.com/flash/walk/" target="_blank"><img src="http://www.everydayflash.com/flash/walk/walk-cycle-3d.png" border="0" alt="Walk cycle in Papervision3D" width="520" height="220" /></a></p>
<p>An <strong>Actionscript-based 3D bone system</strong> is something I wanted to do for a long time, but I couldn't figure out how to approach this problem for several months. A few days ago, I finally made a breakthrough. Here's a first demo I quickly put together: <a href="http://www.everydayflash.com/flash/walk/" target="_blank">a 3D walk cycle</a>.</p>
<p>So far the only way to have a <strong>walking character in Flash 3D</strong> was to create an animation sequence in a 3D editor and export it as an <strong>animated DAE</strong> and/or use <a href="http://cast3d.org/" target="_blank">Cast3D</a>. For sure, this method allows to achieve <a href="http://www.bajibot.com/xmas2008/" target="_blank">awesome results</a>, but it is <strong>not nearly as flexible</strong> as being able to control the animation <strong>directly from Actionscript</strong>.</p>
<p>So, how does the above demo work? First of all I created a model of <strong>pants in Blender</strong>. This is the 4th model I ever did with Blender so it not perfect, but is good enough for the job. The important part is that both legs and the waist form a <strong>single mesh</strong>.</p>
<p>After I imported the model into <a href="http://blog.papervision3d.org/" target="_blank">Papervision3D</a> I applied several <strong>Break modifiers</strong> to the model. The <a href="http://code.google.com/p/as3dmod/source/browse/trunk/src/com/as3dmod/modifiers/Break.as" target="_blank"><strong>Break modifier</strong></a> is a new class I wrote for <a href="http://code.google.com/p/as3dmod/" target="_blank">AS3Dmod</a> and is of key importance for this demo. In brief, it allows to apply rotation only to a group of vertices while leaving the rest untouched. The resulting deformation makes the mesh look like it was broken, hence the name.</p>
<p>I created a <a href="http://code.google.com/p/as3dmod/wiki/AS3Dmod_Tutorial" target="_blank">modifier stack</a> and added <strong>4 Break modifiers</strong> to the pants. One for each tight, and one for each knee. The angle for each of them can be modified separately, which allows dynamic animation. </p>
<p>You probably wonder how I did <strong>indicate which vertices belong to which part of the mesh</strong> (waist, thigh, calf) and how I even know where those parts start or end on the code level. That is crucial in creating an armature and it is also the tricky part. Most of the 3D IDEs, like 3Dsmax or Blender have some kind of visual interface that allows the user to <strong>select vertices and attach them to a bone</strong>. In AS everything is code, so this is a challenge. I must confess that for this demo I hardcoded some values and did some assumptions to make it work, but I think there is a way to make this task <strong>relatively easy</strong> or at least possible to apprehend.</p>
<p>In the long run, it would be cool if bones could be <strong>exported from 3D IDEs</strong> and <strong>exposed as objects</strong> in Actionscript. As far as I know, there isn't anything like this available for the moment. <a href="http://www.away3d.com" target="_blank">Away3D</a> supports <a href="http://www.infiniteturtles.co.uk/blog/away3d-multimario" target="_blank">collada bone animation</a> but, despite its promising name, it serves a different purpose (correct me if I am wrong.)</p>
<p>Let's go back to the demo. Once I had the Break modifiers in place and applied to the correct areas of the mesh, the rest was rather easy. To create a proper <strong>walk cycle</strong>, I just took <a href="http://www.bit-101.com/blog/" target="_blank">Keith Peters'</a> book <a href="http://www.friendsofed.com/book.html?isbn=1590597915" target="_blank"><strong>"Making Things Move"</strong></a>, Chapter 13 on <strong>Forward Kinematics</strong>, and I adapted the code from the examples.</p>
<p>In case you don't know that book, I would strongly recommend getting it. It contains all the essential stuff you need to know, if you want to call yourself a serious AS3 developer. I never leave home without it! There is also a <a href="http://www.friendsofed.com/book.html?isbn=9781430216087" target="_blank">sequel</a>, with stuff for Flash Player 10.</p>
<p>This walk cycle is only a <strong>first step</strong> to create a bone system in AS, but I wanted to share it with you without spending another few months making it fully featured. <strong>Break modifier</strong> is available in the latest <a href="http://code.google.com/p/as3dmod/" target="_blank">AS3Dmod</a> SVN repository. I should warn you however that this is a <strong>very early version</strong>, not really usable for the moment. </p>
<p>Of course, updates are coming so <strong>stay tuned!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2009/02/09/making-things-walk-in-flash-3d/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>The AS3Dmod tutorial</title>
		<link>http://www.everyday3d.com/blog/index.php/2009/01/06/the-as3dmod-tutorial/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2009/01/06/the-as3dmod-tutorial/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 19:23:16 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Away3D]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[as3dmod]]></category>
		<category><![CDATA[Actionscript APIs]]></category>
		<category><![CDATA[away3d]]></category>
		<category><![CDATA[papervision3d]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=49</guid>
		<description><![CDATA[I did some research in the blogs and on Twitter, and often when someone mentioned AS3Dmod, the recurring theme was the lack of documentation. Yeah... but creating proper documentation is such a difficult task! First of all, it's hard to find enough free time. Then, even if you find some, most of us, including me, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/as3dmod/wiki/AS3Dmod_Tutorial" target="_blank"><img src="/flash/as3dmod/as3dmod-tutorial.gif" width="520" height="200" border="0" alt="The AS3Dmod tutorial"></a></p>
<p>I did some research <strong>in the blogs and on Twitter</strong>, and often when someone mentioned AS3Dmod, the recurring theme was the <strong>lack of documentation</strong>. Yeah... but creating proper documentation is such a difficult task! </p>
<p>First of all, it's hard to find enough free time. Then, even if you find some, most of us, including me, will always find it more fun <strong>to write code instead</strong>. Eventually, I profited of the calmer period in the last 3 weeks and made some progress with that. The result is <a href="http://code.google.com/p/as3dmod/wiki/AS3Dmod_Tutorial" target="_blank"><strong>the AS3Dmod tutorial</strong></a>.</p>
<p>In the tutorial you will find answers to the following topics:</p>
<ul>
<li>how to integrate AS3Dmod with the Flash 3d engines</li>
<li>how the modifier stack works</li>
<li>how to create and apply modifiers</li>
<li>how to animate the modifier properties</li>
<li>how to use the <code>collapse</code> feature</li>
</ul>
<p>Beside the tutorial there are <a href="http://www.everydayflash.com/flash/as3dmod/doc/" target="_blank"><strong>API Docs</strong></a> available for some time now. </p>
<p>Another thing are simple <strong>interactive demos for each modifier</strong>. So far I created it for one: <strong>Skew</strong>. You <a href="http://www.everydayflash.com/flash/as3dmod/demo/skew.html" target="_blank">can view it here</a>. The demo allows to see all the properties and features of the modifier in action, instead of explaining it in writing. If this concept gets some positive feedback, I'll try to do more of those.</p>
<p>Hope you will find all this useful, and remember that feedback is very welcome (and much needed). And of course <strong>Happy New Year everyone!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2009/01/06/the-as3dmod-tutorial/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>EA Skateit Nintendo DS demo with Papervision3D</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/12/16/paperskate3d-ea-skateit/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/12/16/paperskate3d-ea-skateit/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 22:32:34 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[EA]]></category>
		<category><![CDATA[Electronic Arts]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[gesture recognition]]></category>
		<category><![CDATA[Nintendo ds]]></category>
		<category><![CDATA[paperking3d]]></category>
		<category><![CDATA[papervision3d]]></category>
		<category><![CDATA[skate]]></category>
		<category><![CDATA[skateboard]]></category>
		<category><![CDATA[skateboarding game]]></category>
		<category><![CDATA[skateit]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=48</guid>
		<description><![CDATA[Those of you who follow my blog, may remember the Paperskate3D demo I published back in the summer. Back then I said that I'll post the rest of the story someday. So here it is. It was originally created for the Paperking3D contest organized by the Pv3D team. There were many awesome project sent it [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.skateit.ea.com/" target="_blank"><img src="/blog-assets/skateit.jpg" width="520" height="200" border="0" alt="Nintendo DS Skate Demo"></a></p>
<p>Those of you who follow my blog, may remember the <a href="http://www.paperskate3d.com" target="_blank">Paperskate3D demo</a> I published back in the summer. Back then I said that I'll post the <strong>rest of the story</strong> someday. So here it is. </p>
<p>It was <strong>originally created</strong> for the <a href="http://blog.papervision3d.org/2008/07/02/paperking3d-the-papervision3d-contest/" target="_blank"><strong>Paperking3D contest</strong></a> organized by the Pv3D team. There were many awesome project sent it for this contest, including <a href="http://code.google.com/p/vectorvision/" target="_blank">Vectorvision</a> - the cool 3d vector library. The skate demo didn't make it to the top 3 but it received a <strong>honorable mention</strong>, which made me very happy.</p>
<p>But the best came a bit later, when I was contacted by <a href="http://www.revolutivedesign.com/" target="_blank">Revolutive Design</a> from Vancouver. Based on the original application, together we created a demo for <a href="http://www.skateit.ea.com/" target="_blank"><strong>Skateit</strong>,</a> a new <strong>skating game from Electronic Arts targeted for Nintendo DS</strong>. </p>
<p>To <strong>biggest improvement</strong> over the original version is the new way the skateboard is controlled by the user. While before it was based on keyboard, in the EA demo it is modeled on the "Flickit" system which allows to <strong>control the skateboard with the stylus</strong> on the DS. To simulate this in Flash, I used mouse <strong>gesture recognition</strong> based on the <a href="http://www.bytearray.org/?p=91" target="_blank">excellent class</a> provided by Didier Brun. This class was originally intended to identify written characters, but I was able to adapt it to my needs pretty easily. In the demo, it is used to recognize gestures for 20 different tricks. </p>
<p>To access the demo go to the <a href="http://www.skateit.ea.com/" target="_blank">EA website</a> and click the large button in the middle right of the screen. Have fun! </p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/12/16/paperskate3d-ea-skateit/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Wind simulation with modifiers and WOW Engine</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/12/08/wind-simulation-wow-engine-as3dmod/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/12/08/wind-simulation-wow-engine-as3dmod/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 08:30:22 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[as3dmod]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flash physics]]></category>
		<category><![CDATA[physics]]></category>
		<category><![CDATA[physics simulation]]></category>
		<category><![CDATA[wind simulation]]></category>
		<category><![CDATA[wow]]></category>
		<category><![CDATA[wow-engine]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=47</guid>
		<description><![CDATA[WOW-Engine is an Actionscript API to simulate physics in a 3d environment. The code is based on a popular 2d physics library - APE. It offers some very interesting possibilities in 3D animation, and everyone doing 3D in Flash should have it in their toolbox. WOW engine simulates a physics world model composed of entities [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.everydayflash.com/flash/pv3d/windsock/" target="_blank"><img src="http://www.everydayflash.com/flash/pv3d/windsock/windsock.jpg" border="0" alt="" width="520" height="202" /></a></p>
<p><strong><a href="http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/" target="_blank">WOW-Engine</a></strong> is an Actionscript <strong>API to simulate physics in a 3d environment</strong>. The code is based on a popular 2d physics library - <a href="http://www.cove.org/ape/" target="_blank"><strong>APE</strong></a>. It offers some very interesting possibilities in 3D animation, and everyone doing 3D in Flash should have it in their toolbox.</p>
<p>WOW engine <strong>simulates a physics world model</strong> composed of entities called particles. <strong>Particles</strong> can be connected using <strong>constraints</strong> and exposed to different <strong>forces</strong> that make them move around. Some more information as well as a few tutorials can be found on the <a href="http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/" target="_blank">projects home page</a>.</p>
<p>The basic technique of using WOW and 3D in Flash is to <strong>map those particles to objects on the 3D scene</strong>, and before each render read synchronize their x, y and z coordinates. But there are other ways too... On the WOW page, <a href="http://seraf.mediabox.fr/wow-engine/wow-engine-technical-advanced-demo-cloth-demo-01/" target="_blank">here</a> and <a href="http://seraf.mediabox.fr/wow-engine/wow-engine-technical-advanced-demo-cloth-demo-03/" target="_blank">here</a> you can find some examples of particles mapped not to whole objects but rather to <strong>individual vertices</strong>. </p>
<p><strong>Animation based on vertices</strong> has been my main preoccupation for some time now, so I got immediately interested. Unfortunately those WOW examples come <strong>without source code</strong>, so I had to figure that out on my own. The <a href="http://www.everydayflash.com/flash/pv3d/windsock/" target="_blank">above demo</a> comes as a result. </p>
<p>Some quick details: the windsock was modeled in <a href="http://www.blender.org" target="_blank">Blender</a> and the textures were baked using the technique I mentioned in my <a href="http://www.everydayflash.com/blog/index.php/2008/11/20/texture-baking-is-your-friend/" target="_blank">previous post</a>. On the flash side <a href="http://blog.papervision3d.org" target="_blank">Papervision3D</a> engine is used and a couple of <a href="http://code.google.com/p/as3dmod/" target="_blank">AS3Dmod</a> modifiers - <strong>Taper and Perlin</strong>.</p>
<p>This is my <strong>first experiment</strong> with <strong><a href="http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/" target="_blank">WOW physics engine</a></strong>, but after getting a basic understanding of how it works, I am convinced there is a big potential in <strong>combining AS3Dmod and WOW</strong>, so more stuff will be coming hopefully!</p>
<p>As usual here's the <strong><a href="http://www.everydayflash.com/flash/pv3d/windsock/windsock.zip">source code</a></strong>. Please mind that this code is a result of a late night coding session ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/12/08/wind-simulation-wow-engine-as3dmod/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Texture baking is your friend</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/11/20/texture-baking-is-your-friend/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/11/20/texture-baking-is-your-friend/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 23:57:59 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Away3D]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[alternativa3d]]></category>
		<category><![CDATA[away3d]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[ecodazoo]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[papervision3d]]></category>
		<category><![CDATA[roxik]]></category>
		<category><![CDATA[texture baking]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=45</guid>
		<description><![CDATA[Texture baking has been known to the Flash 3d community since a long time, but a quick look into Google shows us that it is not a very popular topic. I think it definitely should get more attention. In Flash performance is always an issue, and high quality is always expected by our clients. Texture [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.everydayflash.com/flash/chair/" target="_blank"><img src="http://www.everydayflash.com/flash/chair/awaychair.jpg" border="0" alt="" width="520" height="202" /></a></p>
<p><strong>Texture baking</strong> has been known to the Flash 3d community since a long time, but a quick look into Google shows us that it is not a very popular topic. I think it definitely should get more attention. <strong>In Flash performance is always an issue, and high quality is always expected</strong> by our clients. Texture baking helps to achieve this goal. </p>
<p>In short, it consists of getting all the lightning effects of a material and "burning" them directly on the material itself. After such operation, the lights cannot change anymore, but the material gets a nice effect of depth and it doesn't require any more computations at runtime.</p>
<p>Most of the available 3D software offers a texture baking function. <a href="http://www.everydayflash.com/flash/chair/" target="_blank">For the demo above</a>, I did choose <strong><a href="http://www.blender.org/" target="_blank">Blender</a></strong> because it's free (it also has a very weird user interface, but I digress). On the Flash side, it runs on <strong><a href="http://www.away3d.com" target="_blank">Away3d</a></strong>.</p>
<p>To create a model with baked textures in Flash I followed this steps:</p>
<ol>
<li><strong>Create the 3d model</strong> of the chair in Blender</li>
<li><strong>Project all the faces</strong> of the model on to an bitmap (in Blender its called UV Unwrapping)</li>
<li><strong>Paint the texture</strong> in Photoshop</li>
<li>Import the texture to Blender and <strong>apply it to back the model</strong></li>
<li><strong>Add lights and bake the texture</strong> on to another bitmap</li>
<li><strong>Export the geometry</strong> with the UV information included (<a href="http://en.wikipedia.org/wiki/COLLADA" target="_blank">Collada</a> or <a href="http://en.wikipedia.org/wiki/Obj" target="_blank">Wavefront</a>)</li>
<li><strong>Export the baked texture</strong> as a jpg</li>
<li>Import both into Flash and use your favorite 3d engine to render</li>
</ol>
<p>Each of the steps above could require a separate tutorial, so instead I published some <strong>files created in the process</strong> to give you a better idea. You can <a href="http://www.everydayflash.com/flash/chair/baked-textures.zip">get them here</a>. <em>Please note, that this is only a reference material - it is not supposed to be built or compiled or anything.</em></p>
<p>Additionally, for those of you who use Blender a nice tutorial on both <strong>UV Texture Mapping and Texture Baking</strong> is <a href="http://www.scifi-meshes.com/forums/dojo/1755-blender-faint-hearted-08-uv-texture-mapping-texture-baking.html" target="_blank">available here</a>.</p>
<p>In the current state of Flash 3D and its overall performance, texture baking is a <strong>highly useful technique</strong> that allows to achieve very good results. If you do not believe me, take look at some of the most awesome Flash 3d pieces that came out in the last few months: </p>
<ul>
<li><strong><a href="http://blog.alternativaplatform.com/ru/files/2008/04/bunker.swf" target="_blank">Bunker demo</a></strong> by Alternativa3d team (<a href="http://alternativaplatform.com/en/download/src/bunker_src_en.zip" target="_blank">sources available here</a>) </li>
<li><strong><a href="http://ecodazoo.com/" target="_blank">EcoDaZoo</a></strong> by <a href="http://www.roxik.com/" target="_blank">Roxik</a></li>
</ul>
<p>I am sure you've seen them before anyway. They both combine great visual effects with a very high performance. And guess what... in both of them, you'll find <strong>baked textures all over the place!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/11/20/texture-baking-is-your-friend/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Update: what&#8217;s up with AS3Dmod?</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/09/26/update-as3dmod-1/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/09/26/update-as3dmod-1/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 08:15:43 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Away3D]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[alternativa3d]]></category>
		<category><![CDATA[as3dmod]]></category>
		<category><![CDATA[away3d]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[modifiers]]></category>
		<category><![CDATA[papervision3d]]></category>
		<category><![CDATA[sandy3d]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=43</guid>
		<description><![CDATA[A few weeks passed since I wrote about the AS3Dmod library and released an initial version of the code. Some new stuff has happened since, so here's an update. First of all AS3Dmod has a new team member - Makc. Makc has been involved in several AS open-source projects, most notably Sandy3D. You can read [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks passed since I wrote about the <a href="http://www.everydayflash.com/blog/index.php/2008/09/03/as3dmod/">AS3Dmod library</a> and released an initial version of the code. Some new stuff has happened since, so here's an update.</p>
<p>First of all AS3Dmod has a <strong>new team member - Makc</strong>. Makc has been involved in several AS open-source projects, most notably Sandy3D. You can read more about Makc, <a href="http://makc.coverthesky.com/FlashFX/" target="_blank">here</a>, where you will also find some cool Flash experiments.</p>
<p>The code has also evolved, and was moved to a <strong>modest 0.2 version</strong>. The most important changes are some fixes in the imports that prevented the compilation of the project so far.</p>
<p>The 0.2 version has 5 new modifiers: <strong>Bloat, Twist, Taper, Skew and a UserDefined</strong> modifier that allows to create custom vertex manipulation and easily integrate it into the stack. </p>
<p>Other then that, there is now an <strong>ANT script</strong> that allows to compile the demos for all 4 engines, and also to generate <strong>API Docs</strong>. Of course the documentation is ever evolving, but the latest version is always available <a href="http://www.everydayflash.com/flash/as3dmod/doc/">here</a>. Please note, that <strong>API docs are synchronized with the contents of the SVN repository</strong>. The zipped sources available on the project home page are there for reference, but they quickly become outdated.</p>
<p>Last but not least, there already are a few demos that use AS3Dmod. I allowed myself to gather a short list of what I found out there:</p>
<ul>
<li><a href="http://www.dehash.com/?p=203" target="_blank">Interactive demo</a> by Dehash. I think the first AS3Dmod ever made ;)</li>
<li><a href="http://www.tres-graficos.jp/away3d/elephant102_a3d/" target="_blank">Elephant demo</a> by Tres Graficos</li>
<li><a href="http://blog.r3c7.net/?p=224" target="_blank">Away3D + AS3Dmod</a> by note.x</li>
<li><a href="http://www.lamberta.org/blog/better-bend-than-break/" target="_blank">VectorVision + AS3Dmod</a> by Billy Lamberta</li>
<li><a href="http://clockmaker.jp/blog/2008/09/as3dmod/" target="_blank">Bending example with Pv3d</a> by ClockMaker</li>
</ul>
<p><strong>Thanks to everyone!</strong> We will try to put in more and more features, document the code and also create a tutorial, so stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/09/26/update-as3dmod-1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>AS3Dmod, a modifier library for all Flash 3d engines</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/09/03/as3dmod/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/09/03/as3dmod/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 08:11:59 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Away3D]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[3d animation]]></category>
		<category><![CDATA[actionsript]]></category>
		<category><![CDATA[alternativa3d]]></category>
		<category><![CDATA[as3dmod]]></category>
		<category><![CDATA[away3d]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[google code]]></category>
		<category><![CDATA[modifier]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[papervision3d]]></category>
		<category><![CDATA[sandy3d]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=41</guid>
		<description><![CDATA[Meet AS3Dmod, a cross-engine 3d modifier library for Flash. Sounds cool? Yeah, I am sure it does! Just in case, however, let's see what it does step by step. A. Cross-engine. 3D in Flash is around here for some time now, and it resulted in quite a few engines available. Each engine has some cool [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/as3dmod/" target="_blank"><img src="http://www.everydayflash.com/flash/as3dmod/as3dmod-teaser.png" border="0" alt="" width="520" height="200" /></a></p>
<p><strong>Meet AS3Dmod</strong>, a cross-engine 3d modifier library for Flash. Sounds cool? Yeah, I am sure it does! Just in case, however, let's see what it does step by step.</p>
<p><strong>A. Cross-engine</strong>. 3D in Flash is around here for some time now, and it resulted in quite a few engines available. Each engine has some cool features of its own, and sometimes having to choose between them can result in a headache. While AS3Dmod won't solve this situation, it is an attempt to create some functionality that will be available across different engines.</p>
<p><strong>B. Modifier library</strong>. The readers of this blog probably remember the Bend modifier I wrote for PV3D. Well, it is one of many possible modifiers. Classic 3d packages come equipped with at least a dozen of them, which include: taper, twist, noise, skew, etc. Modifiers are basically functions that can be applied to a 3d object to transform it in a certain way. They can be used separately, but when combined they become a very powerful tool. In this, they are much like filters in Photoshop. </p>
<p><strong>C. Flash</strong>. Instead of explaining how modifiers work in Flash, here's a short list of some of the possible uses: <strong>a sheet of paper, a ribbon, a waving flag, water, cloth, a tree or other plant, a butterfly, a birds wing...</strong> They could also be helpful in animating a human face, and in many other situations where animations exported from 3d editors might fall short. </p>
<p><strong>Does it sound cooler now?</strong> It sounded to me when I had the idea a few days ago. As you can imagine I was not able to develop anything close to a full featured library in this short time. Nevertheless, I publish what I was able to come up so far, so that you can all see where I am heading. For the moment, here's what's in there:</p>
<p>- a framework for creating static and <strong>animated modifier stacks</strong><br />
- 3 basic modifiers: <strong>Noise</strong>, <strong>Bend</strong> and <strong>Perlin</strong><br />
- plug-ins for the most popular engines: <strong><a href="http://blog.papervision3d.org/" target="_blank">Papervision3d</a>, <a href="http://www.away3d.com/" target="_blank">Away3d</a>, <a href="http://www.flashsandy.org/" target="_blank">Sandy3d</a> and <a href="http://alternativaplatform.com/en/alternativa3d/" target="_blank">Alternativa3d</a></strong><br />
- a simple demo for each engine<br />
- <del datetime="2008-09-02T19:17:27+00:00">basic documentation</del> not yet :)</p>
<p><strong>Source files</strong>. <a href="http://code.google.com/p/as3dmod/" target="_blank">The project</a> is at Google Code. You can do a checkout from SVN or download a ZIP. </p>
<p><strong>Demo</strong>. In the repository you can find <a href="http://code.google.com/p/as3dmod/source/browse/trunk#trunk/bin" target="_blank">4 demo SWFs</a>, one for each engine. It features a basic stack of 4 modifiers - Noise, Perlin and Bend x2. You can also compile the project yourself. Just follow the instructions I added <a href="http://code.google.com/p/as3dmod/source/browse/trunk/demo/DemoBase.as" target="_blank">in the document class code</a>. </p>
<p><em><strong>Notes.</strong><br />
1. There is no plug-in for FIVe3D - that is because this engine works in a quite different way and doesn't use vertices which are fundamental to modifiers.<br />
2. The Alternativa3d version works in a bit weird way. I think, it is because there's something I don't understand about this engine, but I will be figuring this out.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/09/03/as3dmod/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>Using the bend modifier with Collada objects</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/08/26/using-the-bend-modifier-with-collada-objects/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/08/26/using-the-bend-modifier-with-collada-objects/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 22:11:52 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[bend modifier]]></category>
		<category><![CDATA[collada]]></category>
		<category><![CDATA[dae]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[papervision3d]]></category>
		<category><![CDATA[shading]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=39</guid>
		<description><![CDATA[Papervision3D comes with a set of primitive 3d shapes - such as a plane, a cube and a sphere. It is possible to do quite a lot with those, but the real power lies in importing objects from 3d editors like Maya, 3dsmax or, in that case - Blender. In Papervision3D, the format of choice [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.everydayflash.com/flash/pv3d/ladydae/" target="_blank"><img src="http://www.everydayflash.com/flash/pv3d/ladydae/ladydae.jpg" border="0" alt="" width="520" height="205" /></a></p>
<p>Papervision3D comes with a set of primitive 3d shapes - such as a plane, a cube and a sphere. It is possible to do quite a lot with those, but <strong>the real power lies in importing objects from 3d editors</strong> like <a href="http://usa.autodesk.com/adsk/servlet/index?id=7635018&#038;siteID=123112" target="_blank">Maya</a>, <a href="http://usa.autodesk.com/adsk/servlet/index?siteID=123112&#038;id=5659302" target="_blank">3dsmax</a> or, in that case - <a href="http://www.blender.org" target="_blank">Blender</a>. In Papervision3D, the format of choice for importing meshes from 3d editors is <a href="http://www.collada.org/mediawiki/index.php/COLLADA" target="_blank">Collada</a>.</p>
<p>Some time ago I actually did export a Collada file from Blender and import it into Papervision3D. You can see the result in one of <a href="http://www.everydayflash.com/blog/index.php/2008/03/01/from-blender-to-papervision3d/" target="_blank">my early posts</a>. Back then, it was like riding a bike, downhill, in a forest, blindfolded - you don't register much, and at the end you are just happy that you made it. This time I wanted to actually understand what is going on.</p>
<p>For my first experiment I decided to <strong>export only the geometry</strong> and not the texture. I wanted to see my <a href="http://www.everydayflash.com/blog/index.php/2008/06/16/bend-modifier-papervision3d-2/" target="_blank">bend modifier</a> applied to such an object. The task turned out to be not difficult at all. The only thing I needed to understand was the way Collada files are represented in Papervision3D. </p>
<p><strong>A Collada is basically an XML file</strong> (with a *.dae extension), so it is perfectly human readable. It contains a part that describes its contents. In my file it can be found somewhere towards the end, and it starts like this: </p>
<div class="igBar"><span id="lxml-16"><a href="#" onclick="javascript:showPlainTxt('xml-16'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">XML:</span>
<div id="xml-16">
<div class="xml">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;library_visual_scenes<span style="font-weight: bold; color: black;">&gt;</span></span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;visual_scene</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"Scene"</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"Scene"</span><span style="font-weight: bold; color: black;">&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;node</span> <span style="color: #000066;">layer</span>=<span style="color: #ff0000;">"L2"</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"LadyDae"</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"LadyDae"</span><span style="font-weight: bold; color: black;">&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">[...] </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>The first interesting point is that <strong>a <strong>Collada file represents a scene</strong>, not a single 3d object</strong>. In my case the scene has only one object, but it is still a scene. That is why Papervision3D will first create a DisplayObject3D that represents this scene, and only then it will add a child that represents the 3d object itself. So in the code, once the Collada is loaded, I can access the object "LadyDae" like that:</p>
<div class="igBar"><span id="lactionscript-17"><a href="#" onclick="javascript:showPlainTxt('actionscript-17'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-17">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> mesh:DisplayObject3D = dae.<span style="color: #006600;">getChildByName</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"COLLADA_Scene"</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getChildByName</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"LadyDae"</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Note that the scene is named <strong>"COLLADA_Scene"</strong> not "Scene" as you could expect from the XML. It's because this name is hard coded and it will always be the same, no matter what the name is in your file. Also note that the attribute you need to refer too is the 'name' attribute, not 'id'. </p>
<p>Now, that <strong>the 'mesh' variable contains a reference to the object holding the geometry</strong> applying the Bend modifier is pretty simple:</p>
<div class="igBar"><span id="lactionscript-18"><a href="#" onclick="javascript:showPlainTxt('actionscript-18'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-18">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000; font-weight: bold;">var</span> b:Bend = <span style="color: #000000; font-weight: bold;">new</span> Bend<span style="color: #66cc66;">&#40;</span>mesh<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">b.<span style="color: #006600;">quickBend</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;color:#800000;">1</span>, .<span style="color: #cc66cc;color:#800000;">5</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>So, I'd love to tell you stories on how, after a many sleepless nights, I finally made a breakthrough and now the Bend modifier works with Collada... <strong>but the fact is it always did</strong>. The thing I failed to grasp so far was the structure of the Collada object itself.</p>
<p>This unexpected success left me some time and energy to play a bit with another topic from my must-explore-soon list - <strong>ShadedMaterials</strong>. I did not do much. Basically I just followed some of Ralph Hauwerts <a href="http://www.unitzeroone.com/blog/2007/04/03/papervision3d-demos-cellshading-toonrendering-and-more/"> old demos</a>, but it resulted in some effects that are <a href="http://www.everydayflash.com/flash/pv3d/ladydae/" target="_blank">nice to look at</a>.</p>
<p><strong>Credits.</strong> The model of the girl is a very simplified version of the original made by <a href="http://www.unbruco.it/offcircle/index_en.html" target="_blank">Tiziana</a>. The background tile comes, as usual, from <a href="http://www.squidfingers.com/" target="_blank">SquidFingers</a>.</p>
<p><strong>Source.</strong> The source code is available <a href="http://barteksplayground.googlecode.com/files/ladydae.zip">here</a>. In the example, I load a ZIP containing the Collada file. A class called KMZ is able to load and unpack it correctly, and it saves a lot of bandwidth. I got this tip on the <a href="http://www.nabble.com/Loading-ZIPed-DAE-files-to19103548.html" target="_blank">Pv3d forum</a> (thanks!)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/08/26/using-the-bend-modifier-with-collada-objects/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Skateboard simulator in Papervision3D</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/08/18/skateboard-simulator-papervision3d/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/08/18/skateboard-simulator-papervision3d/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 07:47:37 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[paperking3d]]></category>
		<category><![CDATA[papervision3d]]></category>
		<category><![CDATA[skate]]></category>
		<category><![CDATA[skateboard]]></category>
		<category><![CDATA[source code]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=38</guid>
		<description><![CDATA[A long, long time ago I used to skate. It was a time when Tony Hawk was still in his teens, boneless was the coolest trick and Future Primitive was the latest skateboarding movie, available exclusively on a VHS tape (remember those?). I was never very successful at skateboarding. However, I always admired the smooth [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.paperskate3d.com/" target="_blank"><img src="http://www.everydayflash.com/flash/pv3d/assets/paperskate.jpg" border="0" alt="" width="520" height="200" /></a></p>
<p><strong>A long, long time ago I used to skate.</strong> It was a time when <a href="http://www.tonyhawk.com/" target="_blank">Tony Hawk</a> was still in his teens, <a href="http://www.youtube.com/watch?v=m48g6guLlOA" target="_blank">boneless</a> was the coolest trick and <a href="http://www.youtube.com/watch?v=uTsd_bkGdtI" target="_blank">Future Primitive</a> was the latest skateboarding movie, available exclusively on a VHS tape (remember those?).</p>
<p>I was never very successful at skateboarding. However, I always admired the smooth moves of the deck under the feet of guys more talented then myself. So, many years later I thought it would be nice to pay tribute to this sport, and <a href="http://blog.papervision3d.org/" target="_blank">Papervision3D</a> seemed like the perfect tool. The execution however appeared a task much more difficult than I imagined. Fortunately, I had some free time in July and August so I sat to my desk and started coding. Today you can see the results.</p>
<p><strong>Source</strong>. As usual, I post all the source files - you can <a href="http://www.paperskate3d.com/sources.html" target="_blank">get them here</a> (this time under <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/" target="_blank">CC license</a>, not MIT). I also plan to write some technical details on how the application works soon. For the moment, I will just mention that it is built with <a href="http://blog.papervision3d.org/" target="_blank">Papervision3D</a> and the animations are done with <a href="http://code.google.com/p/tweener/" target="_blank">Tweener</a>. </p>
<p><strong>Now, no more talk.</strong> Just <a href="http://www.paperskate3d.com/" target="_blank">click here</a> and bust some perfect ollies, dudes! And to be sure not to miss the rest of the story, subscribe to this blog's <a href="http://feeds.feedburner.com/EverydayFlash" target="_blank">RSS</a> or just bookmark this page.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/08/18/skateboard-simulator-papervision3d/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Pixel precision in Papervision3D</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/07/07/pixel-precision-in-papervision3d/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/07/07/pixel-precision-in-papervision3d/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 10:18:24 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[papervision3d]]></category>
		<category><![CDATA[pixel perfect]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=35</guid>
		<description><![CDATA[I used to work for a company that made of the concept of pixel perfection one of the pillars of their success. Today most of the top clients and agencies demand high quality, and pixel perfection became one of the important components of a great website. Obviously, it concerns 3D as well. To achieve it, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.everydayflash.com/flash/pv3d/precision/" target="_blank"><img src="http://www.everydayflash.com/flash/pv3d/precision/precision-demo.jpg" border="0" alt="" width="520" height="205" /></a></p>
<p>I used to work for <a href="http://www.f-i.com/" target="_blank">a company</a> that made of the concept of <strong>pixel perfection</strong> one of the pillars of their success. Today most of the top clients and agencies demand high quality, and pixel perfection became one of the important components of a great website. Obviously, it concerns 3D as well.</p>
<p>To achieve it, sooner or later in your 3D adventures you will come across one of these problems:<br />
1. <strong>A material should be rendered as in 1:1 scale of the original texture</strong><br />
2. <strong>A precise, pixel level match between 2d and 3d content is necessary</strong></p>
<p>In order to check how to solve these problems, I created <a href="http://www.everydayflash.com/flash/pv3d/precision/" target="_blank">a very simple demo</a>. First, I had to make sure my textures are not scaled. I started to browse the <a href="http://www.nabble.com/Papervision3D-f22855.html" target="_blank">Papervision3D forum</a> and it wasn't long before I found the magic formula:</p>
<div class="igBar"><span id="lactionscript-22"><a href="#" onclick="javascript:showPlainTxt('actionscript-22'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-22">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">3dobj.<span style="color: #006600;">z</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">camera</span>.<span style="color: #006600;">zoom</span> - <span style="color: #cc66cc;color:#800000;">1</span><span style="color: #66cc66;">&#41;</span> * <span style="color: #0066CC;">camera</span>.<span style="color: #006600;">focus</span><span style="color: #66cc66;">&#41;</span> - <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">abs</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">camera</span>.<span style="color: #006600;">z</span><span style="color: #66cc66;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Many thanks to <a href="http://www.nabble.com/How-to-get-a-Plane-in-Scen3D-view-at-scale-1%3A1-on-ViewPort-td17741402.html" target="_blank">unnormaJH and kjangsa3</a> for this tip. I would add that it works just as it is <strong>only with planes</strong>. In my example I worked with a cube, and a cubes Z position is defined by the point in the center of it - which means that the face facing the camera will be closer half the cubes width, so remember that this needs to be adjusted.</p>
<p><strong>UPDATE.</strong> With the new Camera classes (GW rev. 639 an higher) the formula changes a bit. The "-1" in "zoom-1" is no longer needed. So it looks like this:</p>
<div class="igBar"><span id="lactionscript-23"><a href="#" onclick="javascript:showPlainTxt('actionscript-23'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-23">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">3dobj.<span style="color: #006600;">z</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">camera</span>.<span style="color: #006600;">zoom</span> * <span style="color: #0066CC;">camera</span>.<span style="color: #006600;">focus</span><span style="color: #66cc66;">&#41;</span> - <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">abs</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">camera</span>.<span style="color: #006600;">z</span><span style="color: #66cc66;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>The second problem - a <strong>pixel perfect match between 2D and 3D</strong> - is mainly about being able to figure out the screen X and Y coordinates of the 3D object. They can be obtained that way:</p>
<div class="igBar"><span id="lactionscript-24"><a href="#" onclick="javascript:showPlainTxt('actionscript-24'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-24">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">screenPosX = 3dobj.<span style="color: #006600;">screen</span>.<span style="color: #006600;">x</span> + viewport.<span style="color: #006600;">viewportWidth</span> / <span style="color: #cc66cc;color:#800000;">2</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">screenPosY = 3dobj.<span style="color: #006600;">screen</span>.<span style="color: #006600;">y</span> + viewport.<span style="color: #006600;">viewportHeight</span> / <span style="color: #cc66cc;color:#800000;">2</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>That, I found in an <a href="http://archive.pv3d.org/?p=51" target="_blank">article on PV3D.org</a> which shows how to do this. There is also an example of how to get the X and Y coordinates of a single vertex.</p>
<p>In the demo above, knowing the screen coordinates of the cube, I use the <strong>BitmapData.draw method</strong> to take a snapshot of the 2D background at this position for use as the texture. If you scale the browser window you can see how the texture on the cube is being updated to exactly match the background tile.</p>
<p>In the real world, what you'll need much more often is to do the opposite, that is <strong>drawing 2d content exactly on top of a 3d object</strong>. An example would be replacing a texture with a Sprite containing some interactive elements. By knowing the screen coordinates of your 3d object, and by making sure it is scaled 1:1 it is a quite easy task to make that look seamless &amp; perfect!</p>
<p><strong>Source code</strong> - <a href="http://barteksplayground.googlecode.com/files/PrecisionPapervision3d.zip">get it here</a>.</p>
<p><strong>Credits</strong> The tile graphics come from <a href="http://www.squidfingers.com/" target="_blank">Squidfingers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/07/07/pixel-precision-in-papervision3d/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
		</item>
		<item>
		<title>Microphone controlled animation in Papervision3D</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/06/24/microphone-animation-papervision3d/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/06/24/microphone-animation-papervision3d/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 20:12:36 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[2D Animation]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[microphone]]></category>
		<category><![CDATA[papervision3d]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=32</guid>
		<description><![CDATA[This time I have something less mind-twisting then the bend modifier and all that math. The idea was to create an animation of leaves flying around, propelled by wind controlled with the microphone. This little experiment was also a good occasion to work with some new Papervision3D features. Effects. The Papervision3D team decided to merge [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.everydayflash.com/flash/pv3d/leaves/" target="_blank"><img src="/flash/pv3d/leaves/leaves-demo.jpg" width="520" height="205" border="0" alt=""></a></p>
<p>This time I have something less mind-twisting then the bend modifier and all that math. The idea was to create an animation of leaves flying around, propelled by wind controlled with the microphone. This little experiment was also a good occasion to work with some new <a href="http://blog.papervision3d.org" target="_blank">Papervision3D</a> features.</p>
<p><strong>Effects</strong>. The Papervision3D team decided to merge the Effects branch with Great White earlier this month. All the detailed information about that can be found on by Andy Zupko's <a href="http://blog.zupko.info/?p=129" target="_blank">blog</a>. There is a lot of cool stuff, so be sure to check it out. One of those is a new property of the DisplayObject3D called 'useOwnContainer'. When set to true, all the classic bitmap effects can be applied directly to a mesh. In this case I used the BlurFilter, and the ColorMatrixFilter for the depth-of-field effect. The inspiration came from the really cool <a href="http://mrdoob.com/blog/?postid=418" target="_blank">depth-of-field experiments</a> by <a href="http://mrdoob.com/blog/" target="_blank">Mr.doob</a>.</p>
<p><strong>SimpleLevelOfDetail</strong>. With this one, the idea is that the further an object is from the camera, the less faces it has. That way we can get an important performance gain without sacrificing the quality too much. I tried to implement it, but I ran into some trouble. Later, after a brief discussion on the PV3D forum, Andy Zupko <a href="http://blog.zupko.info/?p=137" target="_blank">added the 'SimpleLevelOfDetail' class</a> that implements this concept. I used it here. Thanks a lot, Andy!</p>
<p><strong>Bend modifier</strong>. Finally, I use the <a href="http://www.everydayflash.com/blog/index.php/2008/06/16/bend-modifier-papervision3d-2/" target="_blank">Bend class</a> to give the leaves a slightly more natural look.</p>
<p><strong>Now, the fun part</strong>. The leaves react to the activity level of the microphone, so if you take yours and start to blow into it, they will <a href="http://www.everydayflash.com/flash/pv3d/leaves/" target="_blank">take off and fly around</a>. Be careful, if you blow too hard you will get a head rush! :)</p>
<p><em>If you do not have a microphone use your mouse wheel to create wind. Keep in mind however that it isn't as much fun as with a mic. Also, on Windows, the microphone volume settings are really tricky and well hidden in multiple places, so if something is not working - double check those in the first place.</em></p>
<p>Last but not least, here's the <strong><a href="/flash/pv3d/leaves/leaves-demo-2.zip">source code</a></strong> (updated Dec 17th 2008 to work with latest PV3D trunk).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/06/24/microphone-animation-papervision3d/feed/</wfw:commentRss>
		<slash:comments>51</slash:comments>
		</item>
		<item>
		<title>Bend modifier &#8211; part II</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/06/16/bend-modifier-papervision3d-2/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/06/16/bend-modifier-papervision3d-2/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 18:35:39 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[3d graphics]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[bend modifier]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[papervision3d]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=31</guid>
		<description><![CDATA[UPDATE Sept 9th, 2008. The Bend modifier is now part of AS3Dmod library. Use that one instead of the class linked below. First of all, thanks for the great feedback I got after the first post on bending. I really appreciate it. This time, I post an updated version of the Bend class for Papervision3D [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.everydayflash.com/flash/pv3d/bend/all/" target="_blank" title="Click for demo" ><img src="http://www.everydayflash.com/flash/pv3d/bend/all/bend-em-all.gif" border="0"/></a></p>
<p><strong>UPDATE Sept 9th, 2008. The Bend modifier is now part of <a href="http://www.everydayflash.com/blog/index.php/2008/09/03/as3dmod/">AS3Dmod library</a>. Use that one instead of the class linked below.</strong></p>
<p>First of all, thanks for the great feedback I got after <a href="http://www.everydayflash.com/blog/index.php/2008/06/11/bending-modifier-papervision3d/">the first post</a> on bending. I really appreciate it. </p>
<p>This time, I post an updated version of the Bend class for <a href="http://blog.papervision3d.org" target="_blank">Papervision3D</a> that works with every simple DisplayObject3D - that is, a DisplayObject3D that does not contain any child objects. Click <a href="http://www.everydayflash.com/flash/pv3d/bend/all/" target="_blank" title="Bend for any DisplayObject3D" >here for a demo</a>. The algorithm has been refined and the class public methods have been changed. Here's an updated use-case:</p>
<div class="igBar"><span id="lactionscript-27"><a href="#" onclick="javascript:showPlainTxt('actionscript-27'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-27">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">do3d = <span style="color: #000000; font-weight: bold;">new</span> SomeDisplayObject3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>...</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #006600;">bend</span> = <span style="color: #000000; font-weight: bold;">new</span> Bend<span style="color: #66cc66;">&#40;</span>do3d <span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>do3d <span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">bend.<span style="color: #006600;">bend</span><span style="color: #66cc66;">&#40;</span>Bend.<span style="color: #006600;">X</span>, Bend.<span style="color: #006600;">Z</span>, <span style="color: #cc66cc;color:#800000;">2</span>, <span style="color: #cc66cc;color:#800000;">0</span>.<span style="color: #cc66cc;color:#800000;">4</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>The bend() method accepts four arguments, out of which the two first are new: </p>
<ul>
<li><strong>The axis of the bend</strong></li>
<li><strong>The direction of the bend</strong> </li>
</ul>
<p>Now: I tried to write the theory behind those axes. I really did! But then this post was becoming boring and highly incomprehensible, so I gave up.</p>
<p>The best thing to do is to experiment with those setting. Each argument can take one of the three values: <strong>Bend.X</strong>, <strong>Bend.Y</strong> and <strong>Bend.Z</strong>. Different primitives will need different settings for the bending to look correct, but on the other hand, playing with them can lead to quite fascinating and weird-looking shapes, so be sure to try different combinations.</p>
<p>If you do not have time to experiment however, I created a special method, that <strong>magically bends the object the right way</strong>:</p>
<div class="igBar"><span id="lactionscript-28"><a href="#" onclick="javascript:showPlainTxt('actionscript-28'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-28">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">bend.<span style="color: #006600;">quickBend</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;color:#800000;">2</span>, <span style="color: #cc66cc;color:#800000;">0</span>.<span style="color: #cc66cc;color:#800000;">4</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>The two other arguments are 'force' and 'offset'. Both are described in detail in the <a href="http://code.google.com/p/barteksplayground/source/browse/trunk/src/com/everydayflash/pv3d/modifiers/Bend.as" target="_blank">source code</a>. Additionally, I also published the <a href="http://www.everydayflash.com/flash/pv3d/bend/all/bend-demo.zip">source of the demo here</a>. Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/06/16/bend-modifier-papervision3d-2/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Bend modifier for Papervision3D</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/06/11/bending-modifier-papervision3d/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/06/11/bending-modifier-papervision3d/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 07:51:43 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[3d graphics]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[papervision3d]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=30</guid>
		<description><![CDATA[UPDATE Sept 9th, 2008. The Bend modifier is now part of AS3Dmod library. Use that one instead of the class linked below. Bending objects is one of the classic features of any 3D package. I thought it would be nice to be able to bend stuff in Papervision3D too. First, I had to spend a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/flash/pv3d/bend/" target="_blank" title="Click to view the demo"><img src="/flash/pv3d/bend/bend-plane-papervision3d.jpg" width="520" height="221" border="0"></a></p>
<p><strong>UPDATE Sept 9th, 2008. The Bend modifier is now part of <a href="http://www.everydayflash.com/blog/index.php/2008/09/03/as3dmod/">AS3Dmod library</a>. Use that one instead of the class linked below.</strong></p>
<p><strong>Bending objects</strong> is one of the classic features of any 3D package. I thought it would be nice to be able to bend stuff in <a href="http://blog.papervision3d.org" target="_blank">Papervision3D</a> too.</p>
<p>First, I had to spend a couple of days trying to understand the concept of bending. It is fairly obvious when you see it, but when it comes to express bending with mathematical formulas, it is not. Plus, I am not very strong in math, and that doesn't help :)</p>
<p>Eventually I grasped the concept: <strong>bending means distributing all the vertices of an object around a point in space</strong>. The closer the point is from the object, the stronger the bend. I will prepare a separate post explaining this theory soon. For now, just play with <a href="/flash/pv3d/bend/" target="_blank">the demo</a>.</p>
<p>Currently the Bend class only accepts Planes, but I am working on a version that will be able to bend anything else. <strong>The source</strong> for the <a href="http://code.google.com/p/barteksplayground/source/browse/trunk/src/com/everydayflash/pv3d/modifiers/Bend.as" target="_blank">Bend class is here</a>. It is a very basic version and the algorithm is not yet optimized, but it should give everyone who's interested a fairly good idea on how it is done. You can also grab the class and use it with your planes created in Papervision3D. Here's a basic use case:</p>
<div class="igBar"><span id="lactionscript-30"><a href="#" onclick="javascript:showPlainTxt('actionscript-30'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">Actionscript:</span>
<div id="actionscript-30">
<div class="actionscript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">plane = <span style="color: #000000; font-weight: bold;">new</span> Plane<span style="color: #66cc66;">&#40;</span>someMaterial,&nbsp; <span style="color: #cc66cc;color:#800000;">200</span>, <span style="color: #cc66cc;color:#800000;">200</span>, <span style="color: #cc66cc;color:#800000;">20</span>, <span style="color: #cc66cc;color:#800000;">20</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">bend = <span style="color: #000000; font-weight: bold;">new</span> Bend<span style="color: #66cc66;">&#40;</span>plane<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>plane<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">bend.<span style="color: #006600;">bend</span><span style="color: #66cc66;">&#40;</span>Bend.<span style="color: #006600;">X</span>, Bend.<span style="color: #006600;">Z</span>, <span style="color: #cc66cc;color:#800000;">1</span>, <span style="color: #cc66cc;color:#800000;">0</span>.<span style="color: #cc66cc;color:#800000;">5</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Check the source file for detailed info about the arguments.</p>
<p><strong>UPDATE June 16th 2008</strong>. Check the next post for a <a href="http://www.everydayflash.com/blog/index.php/2008/06/16/bend-modifier-papervision3d-2/">newer version of Bend class</a> (demo included).</p>
<p>In general this kind of transformations are called <strong>modifiers</strong> and can be organized in stacks. This means that one modifier can be applied to an object, and then another one can be applied to the result of this transformation. For an interesting list of possible modifiers <a href="http://www.mobilefish.com/tutorials/3dsmax/3dsmax_quickguide_modifiers.html" target="_blank">check here</a> (examples are from <a href="http://usa.autodesk.com/adsk/servlet/index?siteID=123112&#038;id=5659302" target="_blank">3dsMAX</a>). </p>
<p><strong>Modifiers stack</strong> is a powerful tool in <a href="http://usa.autodesk.com/adsk/servlet/index?siteID=123112&#038;id=5659302" target="_blank">3dsMAX</a>, it would definitely be good to have something like this in Papervision3D, don't you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/06/11/bending-modifier-papervision3d/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>Road trip animation in Papervision3D</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/05/16/road-trip-papervision3d/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/05/16/road-trip-papervision3d/#comments</comments>
		<pubDate>Thu, 15 May 2008 22:09:39 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[3d animation]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[game programming]]></category>
		<category><![CDATA[papervision3d]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=25</guid>
		<description><![CDATA[I have been thinking about doing something like this for some time now, but I had no idea where to start. However, recently, after I experimented with animating vertices in Papervision3D, things started to look brighter, so a couple of days ago I sat down and started coding... Basic concept here is that there is [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.everydayflash.com/flash/pv3d/losthighway/' target='_blank'><img src='http://www.everydayflash.com/flash/pv3d/losthighway/lostHighway.jpg' width='521' height='200' alt='Click to see the demo' class='alignnone' border="0" /></a></p>
<p>I have been thinking about doing something like this for some time now, but I had no idea where to start. However, recently, after I experimented with <a href="index.php/2008/05/05/vertex-animation-papervision3d/">animating vertices</a> in <a href="http://blog.papervision3d.org" target="_blank">Papervision3D</a>, things started to look brighter, so a couple of days ago I sat down and started coding...</p>
<p>Basic concept here is that there is one Plane and two BitmapData objects - a texture and a terrain. The Plane never moves, but instead the texture and the terrain are scrolled on it.</p>
<p><strong>The texture</strong> is assigned as material to the plane. At each frame the texture BitmapData is scrolled by an offset and the material is updated.</p>
<p><strong>The terrain</strong> is a grey scale bitmap. It is scrolled in the same way as the texture. Each pixel of the terrain is mapped to a single vertex of the plane - the lighter the pixel color is, the higher the z position of the vertex will be. It is done the the same way as in my <a href="index.php/2008/05/05/vertex-animation-papervision3d/">previous example</a>. Only this time it is not a generated noise, but rather a map drawn manually, so that is works good with the texture.</p>
<p><strong>Hills and turns</strong>. Additionally, each vertex on the plane has its x and z positions rearranged continuously using <code>Math.sin()</code> and <code>Math.cos()</code> functions with different phases - that creates the illusion of uphills, downhills and turns...</p>
<p><strong>Lighting</strong>. Finally there is one more bitmap - a light map, that is blended with the texture using MULTIPLY mode to create the effect of light and darkness.</p>
<p><img src='http://www.everydayflash.com/flash/pv3d/losthighway/textures.gif' width='521' height='140' class='alignnone' /></p>
<p><strong>Source</strong>. I think it is a pretty nice effect and a good starting point for maybe a car racing game or something. Check the demo, try it in full screen by pressing SPACE and <a href="http://code.google.com/p/barteksplayground/source/browse/trunk/src/com/everydayflash/pv3d/losth/Roadtrip.as" target="_blank">grab the source</a> to see it in detail (also available in a <a href="http://barteksplayground.googlecode.com/files/RoadtripPapervision3D.zip">zip bundle</a> containing all the graphical assets I used).</p>
<p><strong>Credits</strong>. In this demo I used textures from <a href="http://www.openfootage.net/" target="_blank">OpenFootage.net</a>. They have some great stuff in there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/05/16/road-trip-papervision3d/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>Animating vertices in Papervision3D</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/05/05/vertex-animation-papervision3d/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/05/05/vertex-animation-papervision3d/#comments</comments>
		<pubDate>Mon, 05 May 2008 19:14:00 +0000</pubDate>
		<dc:creator>bartek drozdz</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[3d animation]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[papervision3d]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/blog/?p=23</guid>
		<description><![CDATA[Rotating cubes, planes and spheres in 3D is fun. However this time, I thought that I'd try something less basic when it comes to 3D animation. So here's the idea: the Papervision3D universe is composed of triangles. Each object is a structure formed of one or more of them. The points where the triangles meet [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.everydayflash.com/flash/pv3d/vertices/' target='_blank'><img src='http://www.everydayflash.com/flash/pv3d/vertices/pv3d-vertices.jpg' width='521' height='187' alt='Click to see the demo' class='alignnone' border="0"/></a></p>
<p>Rotating cubes, planes and spheres in 3D is fun. However this time, I thought that I'd try something less basic when it comes to 3D animation. So here's the idea: the <a href="http://www.papervision3d.org" target="_blank">Papervision3D</a> universe is composed of triangles. Each object is a structure formed of one or more of them. The points where the triangles meet are called vertices (plural for vertex). A vertex, represented by the class Vertex3D, is basically a point in the 3D space with a 'x', 'y' and 'z' coordinates. The interesting part is that each of those vertices can be manipulated separately.</p>
<p>Click on the image above to <a href='http://www.everydayflash.com/flash/pv3d/vertices/' target='_blank'>view a demo</a>. Once I grasped the basic idea that vertices can be manipulated, such effect was pretty simple to acheive. First I create a plane, I add a bitmap texture, and then I access the vertices of the plane one by one and manipulate their 'z' property.</p>
<p>For the animation I create a small bitmapData object and apply the perlinNoise on it at each frame with different settings to create this illusion of wavy movement. Then I translate the color value of each pixel to the 'z' property of each vertex in the 3D plane. Later I multiply this value by stage.mouseX, so the effect will vary in intensity depending on the mouse position... And voilà! I have a waving flag, a small piece of a stormy sea, a rodeo-style magic carpet or whatever.</p>
<p>Move your mouse cursor around from the right to the left side of the screen. Click anywhere to switch between a bitmap texture and a wireframe texture. In the wireframe mode the movement of the vertices is much easier to spot and understand.</p>
<p>BTW. I created a project on Google Code because I needed an SVN account for personal use, but I discovered that the code browser is also pretty cool for sharing stuff and it even formats AS3 in a nice way! So, if you are interested in the source for this example, <a href="http://code.google.com/p/barteksplayground/source/browse/trunk/src/com/everydayflash/pv3d/PerlinCarpet.as" target="_blank">it is here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/05/05/vertex-animation-papervision3d/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>A Very Short History of Art</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/03/10/a-very-short-history-of-art/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/03/10/a-very-short-history-of-art/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 21:43:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[papervision3d]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/wp/?p=8</guid>
		<description><![CDATA[As a way to explore some Papervision3D basic features (and also for fun) I created this miniature application that lets you explore some of the most important and famous works of art. If you did not pay a visit to any museum for a long time, here's a chance to make it up!]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.everydayflash.com/flash/museum/" target="_blank"><img src="http://www.everydayflash.com/flash/museum/vmus-teaser.jpg" border="0" alt="" width="400" height="273" border="0"/></a></p>
<p>As a way to explore some <a href="http://blog.papervision3d.org/" target="_blank">Papervision3D</a> basic features (and also for fun) I created this <a href="http://www.everydayflash.com/flash/museum/">miniature application</a> that lets you explore some of the most important and famous works of art. If you did not pay a visit to any museum for a long time, here's a chance to make it up!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/03/10/a-very-short-history-of-art/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>From Blender to Papervision3D</title>
		<link>http://www.everyday3d.com/blog/index.php/2008/03/01/from-blender-to-papervision3d/</link>
		<comments>http://www.everyday3d.com/blog/index.php/2008/03/01/from-blender-to-papervision3d/#comments</comments>
		<pubDate>Sat, 01 Mar 2008 21:40:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[collada]]></category>
		<category><![CDATA[papervision3d]]></category>
		<category><![CDATA[python path]]></category>

		<guid isPermaLink="false">http://www.everydayflash.com/wp/?p=7</guid>
		<description><![CDATA[Here is a simple wheel I created using Blender. The wheel is exported from Blender as as COLLADA object (*.dae file). Use Cursor Keys to rotate the model, and Space to roll. Along my way of creating this stunning artwork :) I came on to some difficulties with Blender and the Collada plugin. Such problems [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a simple wheel I created using <a href="http://www.blender.org/">Blender</a>. The wheel is exported from Blender as as COLLADA object (*.dae file).</p>
<p><iframe marginwidth="0" marginheight="0" src="http://www.everydayflash.com/flash/wheel/" frameborder="0" width="400" height="400"></iframe></p>
<p><i>Use Cursor Keys to rotate the model, and Space to roll.</i></p>
<p>Along my way of creating this stunning artwork :) I came on to some difficulties with Blender and the Collada plugin. Such problems are always frustrating, so here are some notes that may help:</p>
<ol>
<li>Do not install the latest Blender release (2.45 at the time I write this). Use <a href="http://download.blender.org/release/">2.43</a> instead, as the Collada 1.4.1 script is not working properly in the newest one.</li>
<li>You need also to install the <a href="http://www.python.org/">Python</a> programming language because the Collada script needs some libraries that are not part of the Blender distribution. You need to set some environment variables in order make it work, but the Blender documentation mentions only one, PYTHON, which does not seem enough. After some research I found out that you need tow of them:
<p><span style="font-family:courier new;">PYTHON=[path to python.exe in the python instaloation folder]<br />
PYTHONPATH=[path to python instalation folder and some other folders]</span></p>
<p>On my computer it looks like this:</p>
<p><span style="font-family:courier new;">PYTHON="C:\Program Files\Python\python.exe"</p>
<p>PYTHONPATH=C:\Program Files\Python;C:\Program Files\Python\DLLS;C:\Program Files\Python\LIB;C:\Program Files\Python\LIB\LIB-TK</span></li>
<li>If you do not know anything about Blender (like me) check out this <a href="http://www.alteredegg.com/cms/index.php?option=com_content&amp;task=view&amp;id=42&amp;Itemid=18">tutorial</a>. I helped me alot.
</li>
</ol>
<p>UPDATE May 17th 2008. <strong>Source code</strong>. I decided to publish the source for this example. <a href="http://www.everydayflash.com/flash/wheel/collada-wheel.zip">Grab it here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.everyday3d.com/blog/index.php/2008/03/01/from-blender-to-papervision3d/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
