<?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>Piotr Pluta - portfolio &#38; blog</title>
	<atom:link href="http://piotrpluta.opol.pl/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://piotrpluta.opol.pl</link>
	<description>Piotr Pluta - portfolio &#38; blog</description>
	<lastBuildDate>Sun, 25 Apr 2010 07:52:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Warships: Sea on Fire and porting iPhone games to iPad</title>
		<link>http://piotrpluta.opol.pl/?p=312</link>
		<comments>http://piotrpluta.opol.pl/?p=312#comments</comments>
		<pubDate>Sun, 25 Apr 2010 07:41:15 +0000</pubDate>
		<dc:creator>Piotr Pluta</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://piotrpluta.opol.pl/?p=312</guid>
		<description><![CDATA[Warships: Sea on Fire, the game I have been working on lately (at  Tequila Mobile, the mobile game dev company where I&#8217;m employed) is finally on sale for iPhone and iPad. It&#8217;s adaptation of classic Battleship game , with touch screen controls and nice graphics. It is distributed under I-play&#8217;s (iplay.com) name. You can [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Warships: Sea on Fire, the game I have been working on lately (at <a title="Tequila Mobile" href="http://tequilamobile.com/" target="_self"> Tequila Mobile</a>, the mobile game dev company where I&#8217;m employed) is finally on sale for iPhone and iPad. It&#8217;s adaptation of classic <a title="Battleship (game)" href="http://en.wikipedia.org/wiki/Battleship_%28game%29" target="_self">Battleship game</a> , with touch screen controls and nice graphics. It is distributed under I-play&#8217;s (iplay.com) name. You can find it by searching for &#8220;Warships&#8221; on the iTunes or by following these iTunes links:</p>
<p><em><a title="Warships: Sea on Fire (iPhone) iTunes link" href="http://itunes.apple.com/us/app/warships-sea-on-fire/id366646420?mt=8" target="_self">Warships: Sea on Fire (iPhone version)</a></em></p>
<p><em><a title="Warships: Sea on Fire HD (iPad) iTunes link" href="http://itunes.apple.com/us/app/warships-sea-on-fire-hd/id364601984?mt=8" target="_self">Warships: Sea on Fire (iPad version)</a></em></p>
<p><em><br />
</em></p>
<h4>Porting to iPad</h4>
<p style="text-align: justify;">The greatest challenge in this project was preparation of the iPad version of the game. I only had a couple of days to port it (iPhone version was already completed) and be in time for iPad&#8217;s launch. Of course I didn&#8217;t have real device, so everything had to be done on emulator. Both iPhone and iPad emulators are very good, but it&#8217;s hard to define speed of games on them &#8211; especially when they use OpenGL. In addition, emulator not necessarily mirrors the &#8220;true&#8221; iPad. Static library linking worked fine on emulator, but application wouldn&#8217;t run properly on device.<br />
<em><br />
</em></p>
<h4>iPad version changes</h4>
<p style="text-align: justify;">Eventually we managed to compile it properly and it was accepted by Apple.When you port iPhone game to iPad, it&#8217;s very hard to fill that big screen with game content. Of course, you can upscale graphics and leave everything as it is, but we were required to change something in the iPad version. In &#8220;Warships&#8221;, to utilize that big screen, we made whole playing field visible at once. iPhone version scrolls itself to show each player&#8217;s area during consecutive game turns. In addition, there were also some minor UI changes.</p>
<div id="attachment_314" class="wp-caption alignleft" style="width: 210px"><a href="http://piotrpluta.opol.pl/wp-content/uploads/2010/04/warships_iphone1.jpg" target="_blank"><img class="size-full wp-image-314 " title="Warships: Sea on Fire (iPhone)" src="http://piotrpluta.opol.pl/wp-content/uploads/2010/04/warships_iphone1.jpg" alt="Warships: Sea on Fire (iPhone)" width="200" height="300" /></a><p class="wp-caption-text">Warships: Sea on Fire (iPhone)</p></div>
<div id="attachment_315" class="wp-caption alignleft" style="width: 235px"><a href="http://piotrpluta.opol.pl/wp-content/uploads/2010/04/warships_ipad.jpg"><img class="size-full wp-image-315 " title="Warships: Sea on Fire HD (iPad)" src="http://piotrpluta.opol.pl/wp-content/uploads/2010/04/warships_ipad.jpg" alt="Warships: Sea on Fire HD (iPad)" width="225" height="300" /></a><p class="wp-caption-text">Warships: Sea on Fire HD (iPad)</p></div>
<p style="text-align: justify; clear:both; float: left">All in all, it was interesting experience to create a game on iPad before it&#8217;s launch. Now, when we have the device, development of our next titles will be easier. Some games, especially those with multitouch controls and speed dependant gameplay are nearly impossible to test on emulator.</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrpluta.opol.pl/?feed=rss2&amp;p=312</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What happened to blog updates?</title>
		<link>http://piotrpluta.opol.pl/?p=301</link>
		<comments>http://piotrpluta.opol.pl/?p=301#comments</comments>
		<pubDate>Sat, 06 Mar 2010 16:25:02 +0000</pubDate>
		<dc:creator>Piotr Pluta</dc:creator>
				<category><![CDATA[blog-related]]></category>

		<guid isPermaLink="false">http://piotrpluta.opol.pl/?p=301</guid>
		<description><![CDATA[I have started a full-time job as iPhone game developer few months ago. I had to relocate to another city and accustom myself to new work style, so there were little time to write here. From now on I promise more regular updates &#8211; add my blog to feed reader, you won&#8217;t regret that for [...]]]></description>
			<content:encoded><![CDATA[<p>I have started a full-time job as iPhone game developer few months ago. I had to relocate to another city and accustom myself to new work style, so there were little time to write here. From now on I promise more regular updates &#8211; add my blog to feed reader, you won&#8217;t regret that for sure. </p>
]]></content:encoded>
			<wfw:commentRss>http://piotrpluta.opol.pl/?feed=rss2&amp;p=301</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android game architecture</title>
		<link>http://piotrpluta.opol.pl/?p=281</link>
		<comments>http://piotrpluta.opol.pl/?p=281#comments</comments>
		<pubDate>Thu, 17 Sep 2009 21:19:38 +0000</pubDate>
		<dc:creator>Piotr Pluta</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://piotrpluta.opol.pl/?p=281</guid>
		<description><![CDATA[Every, even most simple game requires some architecture specification. Inspired by Google I/O talk by Chris Pruett, I made up following game application foundations for Android game:

Architecture is based on three threads: main thread created with every Android application, rendering thread and simulation thread. Simulation should keep watch on timer, update game word, calculate physics, [...]]]></description>
			<content:encoded><![CDATA[<p>Every, even most simple game requires some architecture specification. Inspired by <a href="http://www.youtube.com/watch?v=U4Bk5rmIpic">Google I/O talk by Chris Pruett</a>, I made up following game application foundations for Android game:</p>
<p><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/09/application_architecture_overview.jpg"><img src="http://piotrpluta.opol.pl/wp-content/uploads/2009/09/application_architecture_overview.jpg" alt="application_architecture_overview" title="application_architecture_overview" width="640" height="439" class="alignnone size-full wp-image-282" /></a></p>
<p>Architecture is based on three threads: main thread created with every Android application, rendering thread and simulation thread. Simulation should keep watch on timer, update game word, calculate physics, AI, etc. Rendering thread draws a frame as frequent as possible, and it&#8217;s independent from simulation. If very long draw call is encountered, the simulation wouldn&#8217;t have to wait for it to finish and would continue to update itself, ensuring smoother synchronization with rendering.</p>
<p>Rendering thread must be set up with instance of renderer class implementing IRenderer interface. This way  renderers can be easily attached to application. I hope we wouldn&#8217;t be forced to use anything beside simple Canvas renderer, although if heavier optimization is required, switching to some fancier renderer which uses OpenGL ES to draw textured squares shouldn&#8217;t be a problem.</p>
<p>I have already made some prototypes with flying plane, scrolling background and simple enemies. Game runs fine until garbage collector kicks in, and when it does, everything freezes for about 200-400 miliseconds(!). It happens very often, successfully ruining all gameplay. Of course, that prototype was written very casually, but it appears that almost all memory would have to be allocated before actual gameplay to stop garbage collection during it. </p>
]]></content:encoded>
			<wfw:commentRss>http://piotrpluta.opol.pl/?feed=rss2&amp;p=281</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More thougts on Android</title>
		<link>http://piotrpluta.opol.pl/?p=271</link>
		<comments>http://piotrpluta.opol.pl/?p=271#comments</comments>
		<pubDate>Sun, 30 Aug 2009 19:01:04 +0000</pubDate>
		<dc:creator>Piotr Pluta</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://piotrpluta.opol.pl/?p=271</guid>
		<description><![CDATA[As I am digging deeper into Android development, I decided to share some thoughts about it here.
1. Mobile games / Game development
For my point of view (developer and gamer) it is the most interesting part of Android market. I would really wish that more complex games would show up: point and click adventure, RPG or [...]]]></description>
			<content:encoded><![CDATA[<p>As I am digging deeper into Android development, I decided to share some thoughts about it here.</p>
<p><strong>1. Mobile games / Game development</strong></p>
<p>For my point of view (developer and gamer) it is the most interesting part of Android market. I would really wish that more complex games would show up: point and click adventure, RPG or just some shooter with nice controls and graphics. Although I have to admit, many casual games are beautifully polished and they are just pleasure to play (<a href="http://www.cyrket.com/package/net.hexage.buka">Buka</a> or <a href="http://smartpixgames.com/">Jewellust/Devilry Huntress</a>). </p>
<p>I have already spent some time with SDK, and I am aware that writing complex, graphically demanding game is challenging on Android platform. First of all, main there is Java as main programming language. The old programming joke: </p>
<p> &#8220;Knock, knock&#8221;<br />
 &#8220;- who&#8217;s there?&#8221;<br />
&#8230;very long pause&#8230;<br />
 &#8220;- Java&#8221; </p>
<p>may be funny, but when you write a game on such limited hardware, you suddenly bump into bottlenecks not encountered on other platforms. Excellent talk about Android game development can be found here:<br />
<a href="http://www.youtube.com/watch?v=U4Bk5rmIpic">Google I/O 2009 &#8211; Writing Real-Time Games for Android</a>. It&#8217;s author, Chris Pruett, presents efficent game framework and different rendering methods (Canvas, OpenGL), which I adapted to use with my own project. On the other hand, <a href="http://www.cyrket.com/package/com.bendroid.mystique1">Mystique</a> is a 3D first person adventure game which overcame platform restrictions. I certainly hope that more games like Mystique would appear on Android market.</p>
<p><span id="more-271"></span></p>
<p><strong><br />
2. Malaria Control Mobile</strong></p>
<p>I thought about porting <a href="http://piotrpluta.opol.pl/?page_id=19">Malaria Control</a> to mobile platforms (IPhone, Android). Unfortunately, current game version have to be modified heavily to run on mobile devices. Changing dialogue layout and setting world map to 2D are easy part, but tower defence gameplay is too big to fit in small display. Another issue is too many educational references that would make a little interest to casual player. I think it could be done, but promoting current, &#8220;big&#8221; Malaria Control version as application that raises malaria awareness will probably be easier. Nevertheless, I made a dialogue view for Android, which you can check below and compare to PC version:</p>
<p>- Android version (Malaria Control dialogue example)<br />
<a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/08/mcmobile1.png"><img src="http://piotrpluta.opol.pl/wp-content/uploads/2009/08/mcmobile1.png" alt="Malaria Control Mobile (dialogue example)" title="Malaria Control Mobile (dialogue example)" width="480" height="320" class="alignnone size-full wp-image-272" /></a></p>
<p>- PC version (Malaria Control dialogue example)<br />
<a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/08/mcbig.png"><img src="http://piotrpluta.opol.pl/wp-content/uploads/2009/08/mcbig.png" alt="Malaria Control dialogue example (PC version)" title="Malaria Control dialogue example (PC version)" width="640" height="360" class="alignnone size-full wp-image-273" /></a></p>
<p>As you can see, it is not possible to keep space for two characters and dialogue text in mobile version (resolution and device screen are too small). Instead, text would have to float left or right, depending on which character are talking. Of course, it is one of the possible solutions of this problem and it&#8217;s not necessary the best way. Those difficulties and nuances are nice to solve, and if final effect is plausible, you can be proud of yourself. Of course best way to check usability is to observe someone playing your game or using your application.</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrpluta.opol.pl/?feed=rss2&amp;p=271</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dylan/Springsteen lyrics comparison</title>
		<link>http://piotrpluta.opol.pl/?p=254</link>
		<comments>http://piotrpluta.opol.pl/?p=254#comments</comments>
		<pubDate>Mon, 20 Jul 2009 20:19:03 +0000</pubDate>
		<dc:creator>Piotr Pluta</dc:creator>
				<category><![CDATA[music]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://piotrpluta.opol.pl/?p=254</guid>
		<description><![CDATA[It&#8217;s hardly possible to write something about Bob Dylan that have not been written before. But using computer to analize artist lyrics is rather uncommon, so my first thought was to find most common words used by Dylan in his songs. Bruce Springsteen cites him as one of his influences, so Springsteen lyrics are added [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s hardly possible to write something about <strong>Bob Dylan</strong> that have not been written before. But using computer to analize artist lyrics is rather uncommon, so my first thought was to find most common words used by <strong>Dylan</strong> in his songs. <strong>Bruce Springsteen</strong> cites him as one of his influences, so <strong>Springsteen</strong> lyrics are added as an comparison. </p>
<p>Python was my language of choice to write some simple code that sorts words in order of their occurrence. That task is easy, sure, but you have to get full lyrics first, preferably stored in one place(i.e. file). I haven&#8217;t even bothered to look after something like that on the Net. Instead, I used <a href="http://www.crummy.com/software/BeautifulSoup/">Beautiful Soup</a> to parse artist&#8217;s web pages, download lyrics and write them to file. <a href="http://www.crummy.com/software/BeautifulSoup/">Beautiful Soup</a> is fast and simple Python parser, excellent tool for this kind of job. <a href="http://www.bobdylan.com/">http://www.bobdylan.com/</a> and <a href="http://www.bobdylan.com/">http://www.brucespringsteen.net/</a> contains new and error-free songs lyrics (from 2009 albums) &#8211; you can&#8217;t say that about lyrics found on various strange fan-made pages in the internet.</p>
<p><span id="more-254"></span></p>
<p>Although I specified some popular prepositions, postpositions, pronouns etc. to be omitted, running my &#8220;lyrics processor&#8221; for the first time gave a poor results &#8211; recurring words were &#8220;it&#8217;s&#8221;, &#8220;have&#8221;, &#8220;where&#8221;, &#8220;their&#8221;, &#8220;don&#8217;t&#8221;, &#8220;from&#8221; and so on. I added some more common/unattractive words to omitted list, and got nicer results in graph format:</p>
<p><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/07/dylan.png"><img src="http://piotrpluta.opol.pl/wp-content/uploads/2009/07/dylan.png" alt="Bob Dylan lyrics word frequency" title="Bob Dylan lyrics word frequency" width="500" height="377" class="alignnone size-full wp-image-255" /></a></p>
<p><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/07/springsteen.png"><img src="http://piotrpluta.opol.pl/wp-content/uploads/2009/07/springsteen.png" alt="Bruce Springsteen lyrics word frequency" title="Bruce Springsteen lyrics word frequency" width="500" height="377" class="alignnone size-full wp-image-256" /></a></p>
<p>Those are definitely more interesting. <strong>Dylan</strong> likes to ask questions (but not necessarily answer them), so &#8220;know&#8221; is not a suprise. Both artist use <strong>&#8220;baby&#8221;, &#8220;love&#8221; or &#8220;girl&#8221;</strong>, words common in love-oriented songs (&#8221;It&#8217;s all over now, baby blue&#8221;, &#8220;Tunnel of Love&#8221;). <strong>&#8220;Night&#8221;</strong> and <strong>&#8220;tonight&#8221;</strong> are frequently used by Springsteen, night time is often used/anticipated in his songs (&#8221;Born to run&#8221;, &#8220;Thunder road&#8221;, &#8220;Because The Night&#8221;). </p>
<p>This simple analysis isn&#8217;t 100% accurate, but shows some frequent words used by <strong>Dylan</strong> and <strong>Springsteen</strong>. In future, I may compare more artists and introduce some other comparison method than simple word frequency. I used Python 3000 to do this task &#8211; it is more consistent, new dictionary views make it harder to do some bad mistakes. Unfortunately, there are incompability problems with Beautiful Soup and graph plotting libraries (and many other), they have yet to be ported to 3000. </p>
<p>Below you can find .rar with Python 3000 code I used to calculate frequency and sanity input. You can use WordAnalizer class to calculate common words in any text file, and both lyric files are also there. I didn&#8217;t include plot and parsing code, because they are written in Python 2.6 and including 3000 and 2.6 files in one package could be misleading.</p>
<p><a href="http://piotrpluta.opol.pl/resources/WordAnalizer.rar">WordAnalizer.rar</a></p>
]]></content:encoded>
			<wfw:commentRss>http://piotrpluta.opol.pl/?feed=rss2&amp;p=254</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android development</title>
		<link>http://piotrpluta.opol.pl/?p=241</link>
		<comments>http://piotrpluta.opol.pl/?p=241#comments</comments>
		<pubDate>Fri, 03 Jul 2009 21:43:58 +0000</pubDate>
		<dc:creator>Piotr Pluta</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://piotrpluta.opol.pl/?p=241</guid>
		<description><![CDATA[I&#8217;m the fresh and happy owner of G1 Android phone. I have chosen it instead of Apple IPhone, because Android is open platform and I have read many dissatisfied IPhone developers complaints about Apple distribution model and objective C language unnecessary complexity. Android advertises it&#8217;s SDK as fast and easy, so I had to verify [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m the fresh and happy owner of G1 Android phone. I have chosen it instead of Apple IPhone, because Android is open platform and I have read many dissatisfied IPhone developers complaints about Apple distribution model and objective C language unnecessary complexity. Android advertises it&#8217;s SDK as fast and easy, so I had to verify it immediately after unpacking and fully charging my phone.  SDK comes with Eclipse plugin, which aids refactoring, debugging, provides class and method stubs etc. Installing it, setting enviroment and connecting your phone is piece of cake. After writing &#8220;hello world&#8221; application and running it on my phone , I noticed a possibility of using OpenGL ES 1.0 (fixed pipeline).  I&#8217;m not really familiar with OpenGL API, but I managed to find some code samples showing how to create vertex-colored cube (standard example &#8211; not fun to watch anymore). After adding simple touch interface, I&#8217;m able to rotate my cube using index finger.</p>
<p>The whole process &#8211; setting everything up, going through hello world and adding controls to simple OpenGL ES demo took me around an hour. It is indeed very easy to start developing on Android.  I would like to create something more sophisticated now &#8211; maybe a game with touch interface. Android store is not overwhelmed by games like Apple store, creating even simple, free game could be nice thing for community.</p>
<p>Result may be not very impressive <img src='http://piotrpluta.opol.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , but anyway &#8211; here&#8217;s the screenshot:</p>
<p><img class="alignnone size-full wp-image-242" title="android_OGLes" src="http://piotrpluta.opol.pl/wp-content/uploads/2009/07/android_OGLes.jpg" alt="android_OGLes" width="200" height="406" /></p>
<p>If you would like to read more, a nice artice which compares Android and IPhone development can be found here:</p>
<p><a title="Android vs IPhone Development: a comparison" href="http://greensopinion.blogspot.com/2009/07/android-versus-iphone-development.html" target="_blank">Android vs IPhone Development: a comparison</a></p>
<p>PS. Android also has <a title="ASE - Andorid scripting enviroment" href="http://code.google.com/p/android-scripting/" target="_blank">ASE &#8211; Android scripting enviroment</a> that allows you to write simple Python or Lua scripts directly on your phone (preferably by using attached keyboard). Scripts can be used to make phone calls, send messages, poll location from GPS, use text-to-speech module and many more. There is even a guy who wrote automatic garage door opener using ASE &#8211; you can read about it on his blog:  <a title="brad's life - Android garage door opener" href="http://brad.livejournal.com/2394707.html" target="_blank">brad&#8217;s life </a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrpluta.opol.pl/?feed=rss2&amp;p=241</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Havok vehicle demo</title>
		<link>http://piotrpluta.opol.pl/?p=222</link>
		<comments>http://piotrpluta.opol.pl/?p=222#comments</comments>
		<pubDate>Wed, 01 Jul 2009 21:50:01 +0000</pubDate>
		<dc:creator>Piotr Pluta</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://piotrpluta.opol.pl/?p=222</guid>
		<description><![CDATA[I&#8217;m currently having fun with Havok Physics Vehicle kit. Goal is to create a demo application, which uses Havok to calculate vehicle physics and render that vehicle with DirectX. So far I managed to put everything together: terrain, simple skybox and vehicle with camera following it. Here are some screenshots:
Graphics need polishing and vehicle model [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently having fun with <strong>Havok Physics Vehicle kit</strong>. Goal is to create a demo application, which uses Havok to calculate vehicle physics and render that vehicle with <strong>DirectX</strong>. So far I managed to put everything together: terrain, simple skybox and vehicle with camera following it. Here are some screenshots:</p>

<div class="ngg-galleryoverview" id="ngg-gallery-4-222">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-13" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://piotrpluta.opol.pl/wp-content/gallery/havokvehicle_v0-1/vehicle1.jpg" title=" " class="shutterset_havokvehicle_v0-1" >
				<img title="vehicle1" alt="vehicle1" src="http://piotrpluta.opol.pl/wp-content/gallery/havokvehicle_v0-1/thumbs/thumbs_vehicle1.jpg" width="100" height="75" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-10" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://piotrpluta.opol.pl/wp-content/gallery/havokvehicle_v0-1/vehicle2.jpg" title=" " class="shutterset_havokvehicle_v0-1" >
				<img title="vehicle2" alt="vehicle2" src="http://piotrpluta.opol.pl/wp-content/gallery/havokvehicle_v0-1/thumbs/thumbs_vehicle2.jpg" width="100" height="75" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-11" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://piotrpluta.opol.pl/wp-content/gallery/havokvehicle_v0-1/vehicle3.jpg" title=" " class="shutterset_havokvehicle_v0-1" >
				<img title="vehicle3" alt="vehicle3" src="http://piotrpluta.opol.pl/wp-content/gallery/havokvehicle_v0-1/thumbs/thumbs_vehicle3.jpg" width="100" height="75" />
			</a>
		</div>
	</div>
	 		
	<div id="ngg-image-12" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://piotrpluta.opol.pl/wp-content/gallery/havokvehicle_v0-1/vehicle4.jpg" title=" " class="shutterset_havokvehicle_v0-1" >
				<img title="vehicle4" alt="vehicle4" src="http://piotrpluta.opol.pl/wp-content/gallery/havokvehicle_v0-1/thumbs/thumbs_vehicle4.jpg" width="100" height="75" />
			</a>
		</div>
	</div>
	 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<p>Graphics need polishing and vehicle model is temporary. Notice that size of rendered model and size of <strong>Visual Debugger</strong> vehicle shape don&#8217;t match (in reference to terrain). This is the first issue I have to fix. I plan to add some rigid body objects to scene, crashing into them should be fun. Terrain should be flattened a little (&#8230;or maybe vehicle replaced with an-off road car?). I&#8217;d like to publish some source code here, although some improvements and refactoring have to be done &#8211; it works, but it&#8217;s not very pretty.</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrpluta.opol.pl/?feed=rss2&amp;p=222</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Havok Physics Tutorial 1</title>
		<link>http://piotrpluta.opol.pl/?p=106</link>
		<comments>http://piotrpluta.opol.pl/?p=106#comments</comments>
		<pubDate>Thu, 18 Jun 2009 18:45:07 +0000</pubDate>
		<dc:creator>Piotr Pluta</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://piotrpluta.opol.pl/?p=106</guid>
		<description><![CDATA[Most gamers and video game developers know more or less what is Havok engine. Beside physics simulation and collision detection, Havok offers many other features, like animation, realistic cloth or dynamic destruction of rigid bodies. Being cross platform middleware, Havok is used in pretty large number of video game titles: from PC&#8217;s Painkiller, PSP Killzone: [...]]]></description>
			<content:encoded><![CDATA[<p>Most gamers and video game developers know more or less what is <a title="Havok - home page" href="http://www.havok.com/" target="_blank">Havok engine</a>. Beside physics simulation and collision detection, Havok offers many other features, like animation, realistic cloth or dynamic destruction of rigid bodies. Being cross platform middleware, Havok is used in pretty large number of video game titles: from PC&#8217;s <strong>Painkiller</strong>, PSP <strong>Killzone: Liberation</strong> to <strong>Assassin&#8217;s Creed</strong>, <strong>Dead Space</strong> or <strong>Fallout 3</strong> on modern video game systems. Best thing &#8211; you can try it for free and use it in your home-made game or demo application. After registration on <a title="Download Havok - registration" href="http://software.intel.com/sites/havok/" target="_blank">Havok site</a>, you get binary bundle featuring standard <strong>Havok Physics</strong> and<strong> Havok Animation</strong> products.</p>
<p><a href="http://www.havok.com/"><img class="size-full wp-image-123 alignleft" title="havok_logo" src="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/havok_logo.png" alt="Havok logo" width="214" height="74" /></a>It could be hard for one to instantly &#8220;jump in&#8221; and create a simulation using Havok.  Provided documentation is excellent and there are Havok software engineers on <a title="Intel Software Network - Havok" href="http://software.intel.com/en-us/forums/havok/" target="_blank">Intel Software Network</a> to help and answer questions, but the SDK and it&#8217;s range of features are huge.  Therefore I would like to write some tutorials or helpers about starting with Havok Physics 6.5.0. I believe that beside official support,  it&#8217;s hard to find such information elsewhere,  so hopefully it will help someone (or not, anyway &#8211;  I&#8217;m going to write something).</p>
<p>Tutorial is intended for <strong>C++ developers</strong>, not artits or modellers (you can also use Havok in 3D modelling applications, like 3ds max), so you should have basic C++ skills and <strong>Microsoft Visual C++ IDE</strong>.  I will present how to setup and link libraries, initialize Havok, create a flat surface and preview it in Visual Debugger. Of course all of it can be found in documentation and demos added to SDK, but I&#8217;ll try to compact everything here.  Continue to tutorial with following link:</p>
<p><span id="more-106"></span></p>
<h2>1. Getting started with Visual Debugger</h2>
<p>After unpacking SKD, check folder structure. <em>/Docs</em> contains quickstart and user guides, which you should get familliar with and refer to when something written here is incomplete, doesn&#8217;t work for you or you have a feeling that i&#8217;m just wrong.</p>
<p>Check the <em>/Demo</em> and <em>/Tools</em> folders. <em>/Tools</em> contains <strong>Visual Debugger</strong> &#8211; a very useful application which we will be using extensively from now to preview results of our progress. Powerful feature of Visual Debugger is ability to remotely connect to machine which runs the simulation. In Network bookmark in Visual Debugger options you can set IP address and socket used to communicate over network. If you use the same machine to run simulation and Visual Debugger, set ip address to<strong> localhos</strong>t or<strong> 127.0.0.1 </strong></p>
<p>All right, Visual Debugger presents empty scene and says [Connecting...] on title bar. We have to feed simulation data to it. Go to <em>/Demo</em> folder to find executable demo example in<em> /StandAloneDemos</em>. Run<em><strong> ConsoleExample&#8230; </strong></em>executable and check Visual Debugger. You should see ball breaking through set of walls.  Steer camera to preview entire scene  (check View->Camera->Fly mode).</p>
<p><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/VD_1.jpg"><img class="size-medium wp-image-130 alignnone" style="margin-left: 5px; margin-right: 5px;" title="Havok Visual Debugger in action" src="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/VD_1-300x179.jpg" alt="Havok Visual Debugger in action" width="300" height="179" /></a></p>
<p><strong><em>SimpleMultithreadedConsoleMain.cpp</em></strong> contains whole source code of this demo.  It is excellent starting point to learn.  If you feel adventurous, open provided VC++ solution (.vcproj), look at, modify the code and build it yourself.  Proivided project is already set up, so it should build without a problem. In the next section we will see how to link newly created project and initialize Havok from scratch.</p>
<h2>2. Linking with Havok</h2>
<p>Run <strong>Visual C++</strong> and create new windows console empty project. I use VC++ 2008 Express, if you have another version, there will probably be minor interface differences from provided screenshots.  In project properites window select <strong>Linker->General->Additional Library Directiories</strong>.  Add a library path <strong><em>hk650r1\Lib\win32_net_9-0\debug_multithreaded_dll</em></strong> using file dialog.</p>
<p><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/linking_1.jpg"><img class="size-full wp-image-197 alignnone" title="Linking Havok - additional library directories" src="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/linking_1.jpg" alt="Linking Havok - additional library directories" width="519" height="356" /></a></p>
<p>Add common and physics libraries in<strong> Linker->Input->Additional Dependencies</strong>.</p>
<p><strong>common libraries</strong> <strong>(hk prefix):</strong></p>
<ul type="disc">
<li>hkBase.lib (provides functionality common to all Havok libraries)</li>
<li>hkCompat.lib (version compatibility library)</li>
<li>hkGeometryUtilities.lib (geometry operations)</li>
<li>hkInternal (A public interface to Havok&#8217;s internal classes and data structures)</li>
<li>hkSceneData.lib (data descriptions that are extracted from the animation toolchain)</li>
<li>hkSerialize.lib (import/export library &#8211; havok data serialization)</li>
<li>hkVisualize.lib (Visual Debugger definition)</li>
</ul>
<p><strong>physics libraries (hkp prefix):</strong></p>
<ul type="disc">
<li>hkpConstraintSolver.lib (constraint solver)</li>
<li>hkpCollide.lib (collision detection functionality)</li>
<li>hkpDynamics.lib (core dynamics library)</li>
<li>hkpInternal.lib (a public interface to Havok&#8217;s internal classes and data structures)</li>
<li>hkpUtilities.lib (contains a number of handy utilities, including example actions and the Visual  Debugger)</li>
<li>hkpVehicle.lib (abstraction layer and default vehicle implementations for the Havok Vehicle Kit)</li>
</ul>
<div><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/linking_2.jpg"><img class="size-full wp-image-198 alignnone" title="Linking Havok - additional dependencies" src="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/linking_2.jpg" alt="Linking Havok - additional dependencies" width="498" height="373" /></a></div>
<p>Thats all we need for now. Library detail and dependencies  can be also be found in Quickstart Guide. If you check properties of stand-alone demo mentioned earlier, you will see those libraries linked there. You can copy entire list to your project.</p>
<div>
<p>Now create empty .cpp file <strong>main.cpp</strong> with following main() function:<br />
<code lang="cpp">int main(int argc, const char** argv) {}</code></p>
<p>By doing this a new tab ,<strong> </strong>C/C++, will appear in project configuration properties. Go to<strong> C/C++->General->Additional Include Directories </strong>and add path <em><strong>hk650r1\Source</strong></em>.  That directory will be added to list of directories searched for include files.  From now on, when we write #include statement in our code, compiler will search there for specified headers.</p>
<p><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/linking_3.jpg"><img class="alignnone size-full wp-image-202" title="Linking Havok - additional include directories" src="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/linking_3.jpg" alt="Linking Havok - additional include directories" width="508" height="369" /></a></div>
<div>
<p>In addition, add <strong>HK_DEBUG </strong>to preprocessor definitions (<strong>C/C++ ->Preprocessor->Preprocessor Definitions</strong>) .</div>
<h2>3. Coding &#8211; Havok utility class</h2>
<p>Some coding at last! If you look on that stand alone demo we launched at at the beginning, you will see that it is written procedurally for simplification. Drawback of that solution is much code in one place (although comments written by demo makers are very good and they help to orientate).  I deciced to take adventage of more OO approach. Take a look at declaration of a class which encapsulate Havok data and allow to step the simulation forward.</p>
<pre name="code" class="cpp">
class HavokUtilities
{
public:
 HavokUtilities(void);
 virtual ~HavokUtilities(void);

 void registerVisualDebugger();

 void stepSimulation(float dt);
 void stepVisualDebugger(float dt);

 hkpWorld* getWorld();
 hkVisualDebugger* getVisualDebugger();
 float getTimestep();

private:
 void initHavok();
 void deinitHavok();

 bool m_visualDebuggerActive;

 hkpWorld* m_world;
 hkVisualDebugger* m_vdb;
 hkpPhysicsContext* m_context;

 hkJobThreadPool* m_threadPool;
 hkThreadMemory* m_threadMemory;
 hkJobQueue* m_jobQueue;
 char* m_stackBuffer;
};</pre>
<p>That seems complicated, and it may break <span style="font-weight: bold;"><span style="font-family: "> </span>&#8220;The Single responsibility principle&#8221; </span>but at least everything is contained in single class for your convenience.  Let&#8217;s start with interface:</p>
<ul>
<li><strong>HavokUtilities()</strong> sets default timestep and calls private <strong>initHavok()</strong> method (data initialization).</li>
<li><strong>~HavokUtilities() </strong>calls <strong>deinitHavok()</strong>. This way, if HavokUtilities object is destroyed, all resources assigned by it will be freed.</li>
<li><strong>registerVisualDebugger()</strong> sets up Visual Debugger. If you want to use VD, you have to call this after creating HavokUtilities object</li>
<li><strong>stepSimulation(float dt)</strong> and <strong>stepVisualDebugger(float dt)</strong> methods have to be called inside some loop. They tell the simulation and VD to step forward by delta time dt.</li>
<li><strong>getWorld() </strong>returns pointer to hkpWorld (Havok world instance)</li>
<li><strong>getVisualDebugger() </strong>returns pointer to hkVisualDebugger (VD instance)</li>
</ul>
<p>In the interface section you can see declaration of physics world, Visual Debugger and context(which processes information from referenced world and presents them to debugger).  <strong>World</strong> is container for simulated objects. We can add simulation elements to it, and during simulation stepping physical interactions of those objects will be resolved.</p>
<p>Havok memory, thread pool and job queue are declared below.  Thread pool and job queue are used in multithread world stepping.  If you would like to read more about how multithreading is implemented in Havok, refer to &#8220;<strong>Multithreading</strong>&#8221; chapter in<strong> User Manual</strong>. At the moment keep in mind that after registering physics world with job queue (initHavok() function):</p>
<pre name="code" class="cpp">m_world->registerWithJobQueue(m_jobQueue);</pre>
<p>we can step the world using current and all the threads in the thread pool (stepSimulation() function):</p>
<pre name="code" class="cpp">m_world->stepMultithreaded(m_jobQueue, m_threadPool, dt);</pre>
<p>There is no point in pasting whole source file here, just download header and implementation and add them to your project. Header has also pretty number of necessary includes not listed in class declaration previously. Both have extensive comments so take a look at them and try to figure how everything works. You should have <strong>HavokUtilities.hpp</strong>, <strong>HavokUtilities.cpp</strong> and <strong>main.cpp</strong> with empty main() function in your project.</p>
<p><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/HavokUtilities.hpp">HavokUtilities.hpp</a></p>
<p><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/HavokUtilities.cpp">HavokUtilities.cpp</a></p>
<h2>4. Coding &#8211; application loop</h2>
<p>Now we have to esablish some kind of game loop in main().  We will duplicate this loop from stand alone Havok demo, but before that we have to create our HavokUtilities object, register VDB:</p>
<pre name="code" class="cpp">int main(int argc, const char** argv)
{
    HavokUtilities* havokUtilities = new HavokUtilities();
    havokUtilities->registerVisualDebugger();</pre>
<p>and create application loop:</p>
<pre name="code" class="cpp">
   //create watch object - we will simulate for 30 seconds of real time
   hkStopwatch stopWatch;
   stopWatch.start();
   hkReal lastTime = stopWatch.getElapsedSeconds();

   //initialize fixed time step - one step every 1/60 of a second
   hkReal timestep = 1.f / 60.f;
   //calculate number of steps for entire loop
   //(30 seconds divided by single time step)
   int numSteps = int(30.f / timestep);

   //application loop, breaks after 15 real time seconds
   for ( int i = 0; i < numSteps; ++i )
   {
       //step the simulation and VDB
       havokUtilities->stepSimulation(timestep);
       havokUtilities->stepVisualDebugger(timestep);

       //pause until the actual time has passed
       while (stopWatch.getElapsedSeconds() < lastTime + timestep);
       {
            lastTime += timestep;
       }
   }</pre>
<p>We set a watch to simulate 30 seconds of real time - that's our simulation duration. <strong>1/60 time step</strong> means that simulation should be stepped 60 times during one second of real time.  Time stepping if complicated concept, especially with varying framerate (i.e. in real applications with graphics). For our console demo this fixed step should work well.</p>
<p>After setting time step, we calculate number of steps needed for entire simulation and run a loop, where simulation and VDB are stepped forward by that fixed time step. To simulate real time pass, we hold loop execution after stepping until the actual time has passed. Don't forget to delete HavokUtilities object after loop, so it can call deinitHavok() and free aquired resources.</p>
<p>Our demo should confirm connection to Visual Debugger by writing to the console, although scene in VBD will be still empty - we haven't added any objects to the simulation.</p>
<p><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/simulation_1.jpg"><img class="alignnone size-full wp-image-213" title="Application running with visual debugger connected" src="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/simulation_1.jpg" alt="Application running with visual debugger connected" width="531" height="154" /></a></p>
<h2>5. Coding - creating fixed surface</h2>
<p>Last thing I promised at the beginning of this tutorial - we will create a flat, fixed(static game scene element) surface to preview in VDB.  It's not much, but it shows the basics of Havok shapes creation. Write function definition in main.cpp, before main() function:</p>
<pre name="code" class="cpp">void addFixedSurface(hkpWorld* world, const hkVector4&#038; position,
                             const hkVector4&#038; dimensions)</pre>
<p>Function takes a pointer to physics world, shape position, size and width. Fixed figure with specified dimensions will be added to simulation. Let's see the implementation:</p>
<pre name="code" class="cpp">
void addFixedSurface(hkpWorld* world, const hkVector4&#038; position,
                             const hkVector4&#038; dimensions)
{
  	//addFixedSurface function
  	//creates fixed surface with specified position and dimensions

  	//create box shape using given dimensions
  	hkpConvexShape* shape = new hkpBoxShape(dimensions,0);

  	//create rigid body information structure
  	hkpRigidBodyCinfo rigidBodyInfo;

  	//MOTION_FIXED means static element in game scene
  	rigidBodyInfo.m_motionType = hkpMotion::MOTION_FIXED;
  	rigidBodyInfo.m_shape = shape;
  	rigidBodyInfo.m_position = position;

  	//create new rigid body with supplied info
  	hkpRigidBody* rigidBody = new hkpRigidBody(rigidBodyInfo);

  	//add rigid body to physics world
  	world->lock();
  	world->addEntity(rigidBody);

  	//decerase reference counter for rigid body and shape
  	rigidBody->removeReference();
  	shape->removeReference();

  	world->unlock();
}</pre>
<p>Funtion first creates a hkBoxShape, which defines the object's shape and size for collision detection purposes. hkBoxShape constructor takes half extents as a parameter - X by Y by Z box has a X/2 by Y/2 by Z/2 half extents. This shape, among with position and motion type is used to fill rigid body info structure.  Any scene object that doesn't change it's size could be rigid body - boxes, surfaces, car chassis etc.  MOTION_FIXED motion type means that object will be static in our physics world. It is necessary - fixed motion type will cause it to fall, according to gravitation set during initialization.</p>
<p>The function has one more thing to do:  create a rigid body with rigidBodyInfo passed as a parameter and add it to physics world. Notice the removeReference() calls on rigidBody and shape objects. Havok manages those objects by using a reference system.  Therefore  physics world (hkpWorld) will keep reference to rigid body once added. If we don't need it anymore here, we could decerase reference counter, giving hkpWorld object full ownership over the object.</p>
<p>We have to call <strong>addFixedSurface()</strong> in our main() function, after we create HavokUtilities object:</p>
<pre name="code" class="cpp"> HavokUtilities* havokUtilities = new HavokUtilities();
 havokUtilities->registerVisualDebugger();
 addFixedSurface(havokUtilities->getWorld(), hkVector4(0,0,0),
                 hkVector4(50.0f,1.0f,50.0f));</pre>
<p>This code will create a 100 by 100 surface, with 2 units height, positioned in world origin. Run console application and connect Visual Debugger, you should see something similar to this:</p>
<p><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/simulation_2.jpg"><img class="alignnone size-large wp-image-214" title="Simulation preview in Visual Debugger" src="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/simulation_2-1024x476.jpg" alt="Simulation preview in Visual Debugger" width="559" height="259" /></a></p>
<p>Full <strong>main.cpp</strong> source can be found here:</p>
<p><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/main.cpp">main.cpp</a></p>
<h2>6. Summary</h2>
<p>This demo covers basic knowledge about Havok Physics. Change something in our application, i.e. change created surface or rigid body motion to MOTION_DYNAMIC, and see the results.  The User Guide is very well written and it's your main source of knowledge about Havok, so take a look inside if you haven't already. I plan another part of this tutorial, with dynamic bodies and real physics simulation. If you don't want to wait - see that multithreaded standalone demo supplied with Havok (you should now understand most of the source) - in the next tutorial we create something similar. You can check other demos too, but they have to be build first. Quickstart Guide contains information how to do it.</p>
<p>Archive with full source code and VC++ 2008 solution for this tutorial can be obtained using following link (don't forget to change paths for included directories):</p>
<p><a href="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/HavokTutorial1.rar">HavokTutorial1.rar</a></p>
]]></content:encoded>
			<wfw:commentRss>http://piotrpluta.opol.pl/?feed=rss2&amp;p=106</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Amazon.com &#8211; shopping</title>
		<link>http://piotrpluta.opol.pl/?p=50</link>
		<comments>http://piotrpluta.opol.pl/?p=50#comments</comments>
		<pubDate>Mon, 15 Jun 2009 20:05:23 +0000</pubDate>
		<dc:creator>Piotr Pluta</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://piotrpluta.opol.pl/?p=50</guid>
		<description><![CDATA[I have recently done some shopping at amazon.com store. I bought two programming books not published in Poland, &#8220;Game Coding Complete 3rd Edition&#8221; and &#8220;Programming Game AI by Example&#8221;.
I had done some research before and it appears that both of them are fantastic books about game development. Third edition of Game Coding Complete was released [...]]]></description>
			<content:encoded><![CDATA[<p>I have recently done some shopping at <a href="http://amazon.com">amazon.com</a> store. I bought two programming books not published in Poland, &#8220;Game Coding Complete 3rd Edition&#8221; and &#8220;Programming Game AI by Example&#8221;.</p>
<p><a href="http://www.amazon.com/gp/product/1556220782/"><img class="size-full wp-image-61 alignright" src="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/programming-game-ai.jpg" alt="" width="150" height="200" /></a><a href="http://www.amazon.com/Game-Coding-Complete-Mike-McShaffry/dp/1584506806/"><img class="size-full wp-image-60 alignright" src="http://piotrpluta.opol.pl/wp-content/uploads/2009/06/game-coding-complete.jpg" alt="" width="150" height="200" /></a>I had done some research before and it appears that both of them are fantastic books about game development. Third edition of <a href="http://www.amazon.com/Game-Coding-Complete-Mike-McShaffry/dp/1584506806/">Game Coding Complete</a> was released recently, in March 2009. In principle, if a book has more than one edition, there are  chances for that book to be good. I&#8217;m also waiting for third edition of best programming book I have ever read &#8211; <a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/">Code Complete</a> by Steve McConnell. <a href="http://www.amazon.com/gp/product/1556220782/">Programming Game AI by Example</a> should give me some prospect on AI programming. I have only used simple state machines to manage world entities behavior in my projects .</p>
<p>I can&#8217;t wait until my shipment arrives (It will take around 3 weeks, I have selected standard delivery terms). Until then I&#8217;m going back to reading <a href="http://www.amazon.com/Real-Time-Rendering-Tomas-MOller/dp/1568814240">Real-Time Rendering</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrpluta.opol.pl/?feed=rss2&amp;p=50</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction</title>
		<link>http://piotrpluta.opol.pl/?p=6</link>
		<comments>http://piotrpluta.opol.pl/?p=6#comments</comments>
		<pubDate>Fri, 12 Jun 2009 14:37:40 +0000</pubDate>
		<dc:creator>Piotr Pluta</dc:creator>
				<category><![CDATA[blog-related]]></category>

		<guid isPermaLink="false">http://piotrpluta.opol.pl/?p=6</guid>
		<description><![CDATA[Hello dear reader, my name is Piotr Pluta. I have recently graduated from college (Computer Science at University of Technology in Opole, Poland), so I would like to spend some of my free time discussing coding, development and other subjects here.
I am interested in web development (my M.A. thesis was titled “The accessability and usability [...]]]></description>
			<content:encoded><![CDATA[<p>Hello dear reader, my name is Piotr Pluta. I have recently graduated from college (Computer Science at University of Technology in Opole, Poland), so I would like to spend some of my free time discussing coding, development and other subjects here.</p>
<p>I am interested in web development (my M.A. thesis was titled “The accessability and usability in methodology of creating Web services for disabled people”) and game development (recently I was programming “Imagine Cup” competition entry game,  titled Malaria Control).  You can find my portfolio and works on this page, just follow the links in right panel.</p>
<p>This is my first attempt in blog field, so I will appreciate all feedback. I use Wordpress, because it is a reliable, popular platform and I can customize it to match my own needs.</p>
]]></content:encoded>
			<wfw:commentRss>http://piotrpluta.opol.pl/?feed=rss2&amp;p=6</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
