<?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/"
				  >
<channel>
<title>kman's Blog</title>
<link>http://kman.artician.com/</link>
<description><![CDATA[kman's blog on Artician]]></description>
<image><title>kman's Blog</title>
<link>http://kman.artician.com/</link>
<url>http://uc.artician.com/members/0/0/490/avatar.jpg</url>
</image>
<language>en-us</language>
<pubDate>Sat, 21 Nov 2009 06:15:30 -0500</pubDate>
<item>
<title>The Cynic</title>
<link>http://kman.artician.com/blog/2009/09/the-cynic/</link>
<guid>http://kman.artician.com/blog/2009/09/the-cynic/</guid>
<description><![CDATA[As a young child the first true issue most of us struggle with is that of gender identity. As a young boy I found myself infatuated with girls at a rather young age, but I only understood them in my 20s. With that being said I've never been incredibly successful with relationships. I think I'm only half at fault on this matter, while I lacked the maturity to understand their needs I simply don't see how I could have. Since you don't know me, let me clear on thing up. I am the ideal ... well I remember myself as being ... what today I would call the ideal boyfriend. I was a romantic, and completely devoted. I had fantasies of sacrificing my life in moments of heroism. Like a burning building for example. These were childhood fantasies. Later I moved on to Shakespeare. Well eventually I had my heart broken. Than I had it stepped on, again and again. Eventually the romantic died, and the opportunist emerged. Well that side of coin fell apart and the first entry is not to focus on my love life but emphasize the real problem I've yet to solve.<br />
<br />
My family was a different story. Well we just never connected and probably never will. Under ideal circumstances we respect each other. That happened much later in life too. We used to fight a lot. Mostly because they had an old school mentality of upbringing and I had different ideas that were never heard or listened. Do I love them? Lets keep it at respect. A deep respect that if the situation called for I would sacrifice myself for them. Although I don't know why. Its the sort of sacrifice that a soldier would do for his king. In a way maybe to find a simple solution to a difficult problem that is life.<br />
<br />
Friends... I held them in the highest esteem. I wanted to believe that I could develop the sort of relationship with a friend that was as deep as any one could with family or a lover. After having graduated from a University, I've seen friends move away, join cliques, and simply fall out of touch for any which reason. Still some friendships survived the test of time. I thought that was the real testament of loyalty. I believe as you grow older you become more cynical of the world around you. A theme that may or may not continue. Today I've realized that friendship is artificial. This wasn't a realization over the course of one day, or one week, or a month or a year. This decay slowly, over time. You often don't see it coming when you realize its not there anymore. Worst of all it usually starts with time away from another during which one or both of you in some ways change. You come back to meet someone you don't remember, but as you try and hold onto the past it slips from under you. All that's left is disappointment.<br />
<br />
Work. A job. All things we associate with unhappiness. In their very definition they imply hard labor or responsibility to something greater. I had the ambition of being great. Of working hard early, to achieve the sort of greatness that gives back to humanity and leaves your name as one to be remembered. That dream fades quickly during college acceptance. Strong men don't falter, strong men persevere and grow. Grown men don't cry, that's what young boys learn young. Some call it being stubborn and stubborn I became. Against all odds and all possibilities of failure, naive to the fact that others would kill for what I could have had with ease I pursued my dream. A place that I could come to everyday and not watch the digits of time and become lost for those few hours in something I could dedicate my life to. I ended up getting all the skills needed. All the skills I could hope to attain through higher education. I considered myself as one of the best. Sadly the cynic in me grew larger as I've realized that every single decision in this world is influenced and made threw artificial connections and bonds. From game developers to politicians. We rarely higher people we don't know, or give others the opportunity to come out of their box and become comfortable. We often jump to conclusions; we often believe that what makes us comfortable will do the same for others. People don't realize that the person who seems shy, is not shy because he's afraid. Maybe he's shy because he can't find the words to describe that he disagrees without being disagreeable and making you not like them.<br />
<br />
So what reason is there for a single man. A man who never found love. Never made any real connections. What does a man do that has found every avenue towards happiness blocked. Work only becomes work when it's no longer fun. While walls are built to keep people out, sometimes climbing them is a questionable pursuit of happiness. Look theirs no answer here. Only a stubborn man. A man who will continue to risk it all. Until the world wins and he dies or maybe he'll find happiness.]]></description>
<pubDate>Wed, 30 Sep 2009 19:42:05 -0400</pubDate>
</item>
<item>
<title>Inspiration, Motivation, and Fools Gold</title>
<link>http://kman.artician.com/blog/2009/09/inspiration-motivation-and-fools-gold/</link>
<guid>http://kman.artician.com/blog/2009/09/inspiration-motivation-and-fools-gold/</guid>
<description><![CDATA[<p>I am fairly fond of the title for this post as it does two things. It&#8217;s an open invitation to spam crawlers and this is the first blog post in some time with more than a code snippet or two.</p>
<p>In short, it has been almost a year since I&#8217;ve graduated Full Sail University and since then I have had a number of experiences that made me on numerous occasions question the validity of my life-choices. <span></span>This stems from the idea of immediate sacrifice and delayed gratification towards a brighter and happier future. This for most is an accepted part of life and being successful. While ultimately we all strive for happiness and each time we sacrifice and give we hope it to be a means to an end. Of course as we grow older we slowly but surely realize the real cynical nature of human life.</p>
<p>I&#8217;ve asked myself on occasion; what makes me happy? Is it having a high paycheck? Is it the process of creating video games? Is it sitting at a bar? While I&#8217;ve questioned my motives, I always arrive at the same answer sooner or later. I realize that I simply wish to be challenged and learn. At the core that is what drives me! That is what motivates and inspires me. Still I&#8217;ve never been able to make the jump to a full time Indie, or a commit towards academia.</p>
<p>In the near future I hope to reevaluate why I have failed to follow my real agenda. Attain courage, and achieve some closure.</p>
<p>This is essentially a slightly longer twitter post. Thanks for reading.</p>]]></description>
<pubDate>Tue, 22 Sep 2009 20:58:08 -0400</pubDate>
</item>
<item>
<title>Wordpress Pagination</title>
<link>http://kman.artician.com/blog/2009/05/wordpress-pagination/</link>
<guid>http://kman.artician.com/blog/2009/05/wordpress-pagination/</guid>
<description><![CDATA[<p>Today while striving to wrap up Michael Kofman 2009 I found myself spending longer than I would have liked trying to get a &#8220;wordpress page&#8221; to loop through all of my blog posts with enabled <a href="http://www.tonymarston.net/php-mysql/pagination.html#a3">pagination</a>. The intention was to become familiar with the wordpress framework, install a few plugins and be on my marry way.  Sadly things didn&#8217;t quite go so smoothly. So to make this a lot less painful for future readers here is a short list of steps and plug ins used as well as a final code snippet. After I&#8217;ll discuss some of the alternate methods I found, share my work cited and hopefully put some value into the community.<br />
<span></span></p>
<h4>Wordpress Page Templates</h4>
<p>My first question was how to create a new page in wordpress and apply to it my own layout and stylesheets. This was incredibly easy and intuitive.</p>
<ol>
<li>Create a new .php page that will serve as a template for your new wordpress page.</li>
<li>Page templates are easily recognized by the wordpress CMS via a magical comment.</li>
</ol>

<div><table><tr><td><pre>1
2
3
4
5
</pre></td><td><pre><span>&#60;?php</span>
<span>/*
Template Name: Your Template Name Here
*/</span>
<span>?&#62;</span></pre></td></tr></table></div>

<ol start="3">
<li>Navigate to /wp-admin/ and depending on the version of your dashboard click add page. </li>
<li>Here you can give your page any title you want. And somewhere on the page you should see an option to apply a template to the page (again this varies with wordpress versions so Google or check documentation). If you uploaded your new .php template to the proper location you should conveniently see &#8220;Your Template Name Here&#8221; as an option.</li>
</ol>
<h4>Installing a Pagination Plugin</h4>
<p>I decided to use <a href="http://www.lesterchan.net/wordpress/readme/wp-pagenavi.html">WP-PageNavi</a> although there are several alternatives I&#8217;ve found.</p>
<ul>
<li><a href="http://wordpress.org/extend/plugins/wp-page-numbers/">WP Page Numbers</a></li>
<li><a href="http://wordpress.org/extend/plugins/different-posts-per-page/">Different Posts Per Page</a></li>
</ul>
<p>To download and install follow these instructions:</p>
<blockquote cite="http://www.hongkiat.com/blog/adding-nice-wordpress-pagination/"><p>
   1. Download WP-PageNavi<br />
   2. Upload folder “pagenavi” under wp-contents/plugins<br />
   3. Activate the plugin<br />
   4. Add the following code into your current theme’s php file.</p>
<p>          <?php if(function_exists(’wp_pagenavi’)) { wp_pagenavi(); } ?></p>
<p>   5. Configure the settings under WP-Admin -> Options -> PageNavi<br />
   6. Click “Update Options” and you are done.
</p></blockquote>
<h4>The Lonely Loop</h4>
<p>The reason I titled this lonely loop is because most wordpress documentation will refer to the post entries as &#8220;<a href="http://codex.wordpress.org/The_Loop">THE LOOP</a>&#8220;. The final code snippet that finally got things rolling for me was as follows:</p>

<div><table><tr><td><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td><pre><span>&#60;?php</span> <span>$page</span> <span>=</span> <span>&#40;</span>get_query_var<span>&#40;</span><span>'paged'</span><span>&#41;</span><span>&#41;</span> ? get_query_var<span>&#40;</span><span>'paged'</span><span>&#41;</span> <span>:</span> <span>1</span><span>;</span> 
&nbsp;
		<span>$my_query</span> <span>=</span> <span>new</span> WP_Query<span>&#40;</span><span>'showposts=5&#38;paged=$page'</span><span>&#41;</span><span>;</span>
		<span>$wp_query</span> <span>=</span> <span>$my_query</span><span>;</span>
&nbsp;
		query_posts<span>&#40;</span><span>&#34;showposts=5&#38;paged=<span>$page</span>&#34;</span><span>&#41;</span><span>;</span>
&nbsp;
		<span>while</span> <span>&#40;</span> have_posts<span>&#40;</span><span>&#41;</span> <span>&#41;</span> <span>:</span> the_post<span>&#40;</span><span>&#41;</span> <span>?&#62;</span>
  			&#60;div class=&#34;post&#34; id=&#34;post-<span>&#60;?php</span> the_ID<span>&#40;</span><span>&#41;</span><span>;</span> <span>?&#62;</span>&#34;&#62;
                    &#60;div class=&#34;date&#34;&#62;
                    	&#60;div class=&#34;day&#34;&#62;&#60;center&#62;<span>&#60;?php</span> the_time<span>&#40;</span><span>'d'</span><span>&#41;</span> <span>?&#62;</span>&#60;/center&#62; &#60;/div&#62;
                    	&#60;div class=&#34;month&#34;&#62;&#60;center&#62;<span>&#60;?php</span> the_time<span>&#40;</span><span>'F'</span><span>&#41;</span> <span>?&#62;</span>&#60;/center&#62; &#60;/div&#62;
                    	&#60;div class=&#34;year&#34;&#62;&#60;center&#62;<span>&#60;?php</span> the_time<span>&#40;</span><span>'Y'</span><span>&#41;</span> <span>?&#62;</span>&#60;/center&#62; &#60;/div&#62;
                    &#60;/div&#62;
&nbsp;
                    &#60;h2&#62;&#60;a href=&#34;<span>&#60;?php</span> the_permalink<span>&#40;</span><span>&#41;</span> <span>?&#62;</span>&#34; rel=&#34;bookmark&#34; title=&#34;Permanent Link to <span>&#60;?php</span> the_title_attribute<span>&#40;</span><span>&#41;</span><span>;</span> <span>?&#62;</span>&#34;&#62;<span>&#60;?php</span> the_title<span>&#40;</span><span>&#41;</span><span>;</span> <span>?&#62;</span>&#60;/a&#62;&#60;/h2&#62;
&nbsp;
                    <span>&#60;?php</span> the_content<span>&#40;</span><span>'Read the rest of this entry &#38;raquo;'</span><span>&#41;</span><span>;</span> <span>?&#62;</span>
&nbsp;
                    &#60;p&#62;<span>&#60;?php</span> comments_popup_link<span>&#40;</span><span>'No Comments &#38;#187;'</span><span>,</span> <span>'1 Comment &#38;#187;'</span><span>,</span> <span>'% Comments &#38;#187;'</span><span>&#41;</span><span>;</span> <span>?&#62;</span>&#60;/p&#62;
                &#60;/div&#62;
                &#60;br class=&#34;clear&#34; /&#62;
                &#60;br class=&#34;clear&#34; /&#62;
		<span>&#60;?php</span> <span>endwhile</span><span>;</span> <span>?&#62;</span>
&nbsp;
&nbsp;
       &#60;div&#62;<span>&#60;?php</span> next_posts_link<span>&#40;</span><span>'Older Entries'</span><span>&#41;</span><span>?&#62;</span>&#60;/div&#62;
       &#60;div&#62;<span>&#60;?php</span> previous_posts_link<span>&#40;</span><span>'Newer Entries'</span><span>&#41;</span><span>?&#62;</span>&#60;/div&#62;
&nbsp;
        <span>&#60;?php</span> <span>if</span><span>&#40;</span><span>function_exists</span><span>&#40;</span><span>'wp_pagenavi'</span><span>&#41;</span><span>&#41;</span> <span>&#123;</span> wp_pagenavi<span>&#40;</span><span>&#41;</span><span>;</span> <span>&#125;</span> <span>?&#62;</span></pre></td></tr></table></div>

<h4>Obstacles Overcome</h4>
<p>One of the first challenges I faced was realizing that the default loop provided in index.php did not properly render posts but instead interpreted function calls like the_title() with regard to the title of the page (template) opposed to individual posts. I later found according to slightly misleading documentation that a new query object is required. I proceeded to create one called $my_query. Where I would prefix function calls as such.</p>

<div><div><pre><span>$my_query</span><span>-&#62;</span><span>have_posts</span><span>&#40;</span><span>&#41;</span></pre></div></div>

<p> and</p>

<div><div><pre><span>$my_query</span><span>-&#62;</span><span>the_post</span><span>&#40;</span><span>&#41;</span></pre></div></div>

<p>This seemed to work, but the next problem was getting pagination to work in synch with this new query. The problem was that WP-PageNavi only listens to $wp_query. I had wondered around for some time trying to resolve this particular delima short of writing ajax and the pagination functionality by hand or maybe trying a different plug in. Thank fully after jumping from link to link I finally stumbled onto the following code block.</p>

<div><div><pre><span>&#60;?php</span> <span>$page</span> <span>=</span> <span>&#40;</span>get_query_var<span>&#40;</span><span>'paged'</span><span>&#41;</span><span>&#41;</span> ? get_query_var<span>&#40;</span><span>'paged'</span><span>&#41;</span> <span>:</span> <span>1</span><span>;</span>
query_posts<span>&#40;</span><span>&#34;showposts=5&#38;paged=<span>$page</span>&#34;</span><span>&#41;</span><span>;</span>
<span>while</span> <span>&#40;</span> have_posts<span>&#40;</span><span>&#41;</span> <span>&#41;</span> <span>:</span> the_post<span>&#40;</span><span>&#41;</span> <span>?&#62;</span>
&#60;h2&#62;&#60;a href=&#34;<span>&#60;?php</span> the_permalink<span>&#40;</span><span>&#41;</span> <span>?&#62;</span>&#34;&#62;<span>&#60;?php</span> the_title<span>&#40;</span><span>&#41;</span> <span>?&#62;</span>&#60;/a&#62;&#60;/h2&#62;
&#60;span class=&#34;entry-date&#34;&#62;<span>&#60;?php</span> the_time<span>&#40;</span><span>'F d, Y'</span><span>&#41;</span><span>;</span> <span>?&#62;</span>&#60;/span&#62;
<span>&#60;?php</span> the_content<span>&#40;</span><span>&#41;</span><span>;</span> <span>?&#62;</span>
<span>&#60;?php</span> <span>endwhile</span> <span>?&#62;</span></pre></div></div>

<p>This finally got the ball rolling. I had only correct a few errors that sparked from the constant experimentation like a random reseting of the query at the end of the while loop. Conveniently above the pagination caused the current page to always read 1.</p>
<p>Hope this will be helpful to someone in the future. Here is an unordered list of sources.<br />
http://codex.wordpress.org/Template_Tags/query_posts<br />
http://codex.wordpress.org/The_Loop<br />
http://codex.wordpress.org/Function_Reference/WP_Query<br />
http://codex.wordpress.org/IRC<br />
http://almosteffortless.com/2006/12/21/wordpress-pagination-on-a-page/<br />
http://jarodtaylor.com/blog/wordpress-ultimate-archive-index-with-pagination/<br />
http://www.w3cgallery.com/w3c-css/wordpress-pagination-in-pagephp-or-display-subpages-as-paging-under-parent-page<br />
http://wordpress.org/support/topic/256899<br />
http://www.lesterchan.net/wordpress/readme/wp-pagenavi.html</p>]]></description>
<pubDate>Mon, 25 May 2009 20:52:19 -0400</pubDate>
</item>
<item>
<title>Obama News Conference</title>
<link>http://kman.artician.com/blog/2009/03/obama-news-conference/</link>
<guid>http://kman.artician.com/blog/2009/03/obama-news-conference/</guid>
<description><![CDATA[<object width="512" height="296"><param name="movie" value="http://www.hulu.com/live/embed/kX_hBA2frMXQmyhmH95LVZvsEgZCmVJT"> </param><embed src="http://www.hulu.com/live/embed/kX_hBA2frMXQmyhmH95LVZvsEgZCmVJT" type="application/x-shockwave-flash" width="512" height="296"></embed></object>]]></description>
<pubDate>Tue, 24 Mar 2009 18:49:31 -0400</pubDate>
</item>
<item>
<title>Getting Started with wxWidgets</title>
<link>http://kman.artician.com/blog/2009/03/getting-started-with-wxwidgets/</link>
<guid>http://kman.artician.com/blog/2009/03/getting-started-with-wxwidgets/</guid>
<description><![CDATA[<p>I wanted to explore what wxWidgets was all about after learning that tool programmers in the game industry commonly use it in their development environment. Getting started with wxWidgets on a windows platform is fairly straight forward.</p>
<p>Download the latest stable release http://www.wxwidgets.org/downloads/<br />
Go ahead and grab wxMSW - installer for Windows. Make sure your visual studio is closed so that the environment variable gets set up correctly.</p>
<p>Next your going to need to compile the library. So go ahead and navigate to installDir\build\msw.<br />
Open up wx.dsw and convert it to your native Visual Studio format. Close visual studio back down and open up each vcproj in the current directory through notepad or notepad++. Search and replace each of the following:<br />
       - RuntimeLibrary=&#8221;3&#8243; with RuntimeLibrary=&#8221;1&#8243;<br />
       - RuntimeLibrary=&#8221;2&#8243; with RuntimeLibrary=&#8221;0&#8243;</p>
<p>Once your done. Open up the solution again, and right click the solution in the solution explorer. Select Batch Build. Select only the release and debug for each project. Once complete your ready to create your first wxWidget application with the added work of including all the directories and .lib in your project settings.</p>
<p>Here are two good links to help you get through this:<br />
http://wiki.wxwidgets.org/Compiling_WxWidgets_on_Windows<br />
http://wiki.wxwidgets.org/MSVC_.NET_Setup_Guide#Project_Properties</p>
<p>If it doesn&#8217;t work out right, go ahead and triple check everything!</p>
<p>What I learned from all this was that while wxWidgets are great for multiplatform development they are probably not a solution for developing game GUIs. I&#8217;d love to hear what others think on this subject, meanwhile I&#8217;ll move on to setting up my own GUI framework after a few hours of sleep.</p>
]]></description>
<pubDate>Mon, 23 Mar 2009 07:44:11 -0400</pubDate>
</item>
<item>
<title>Getting Started with wxWidgets</title>
<link>http://kman.artician.com/blog/2009/03/getting-started-with-wxwidgets1/</link>
<guid>http://kman.artician.com/blog/2009/03/getting-started-with-wxwidgets1/</guid>
<description><![CDATA[<p>I wanted to explore what wxWidgets was all about after learning that tool programmers in the game industry commonly use it in their development environment. Getting started with wxWidgets on a windows platform is fairly straight forward.</p>
<p>Download the latest stable release http://www.wxwidgets.org/downloads/<br />
Go ahead and grab wxMSW - installer for Windows. Make sure your visual studio is closed so that the environment variable gets set up correctly.</p>
<p>Next your going to need to compile the library. So go ahead and navigate to installDir\build\msw.<br />
Open up wx.dsw and convert it to your native Visual Studio format. Close visual studio back down and open up each vcproj in the current directory through notepad or notepad++. Search and replace each of the following:<br />
       - RuntimeLibrary=&#8221;3&#8243; with RuntimeLibrary=&#8221;1&#8243;<br />
       - RuntimeLibrary=&#8221;2&#8243; with RuntimeLibrary=&#8221;0&#8243;</p>
<p>Once your done. Open up the solution again, and right click the solution in the solution explorer. Select Batch Build. Select only the release and debug for each project. Once complete your ready to create your first wxWidget application with the added work of including all the directories and .lib in your project settings.</p>
<p>Here are two good links to help you get through this:<br />
http://wiki.wxwidgets.org/Compiling_WxWidgets_on_Windows<br />
http://wiki.wxwidgets.org/MSVC_.NET_Setup_Guide#Project_Properties</p>
<p>If it doesn&#8217;t work out right, go ahead and triple check everything!</p>
<p>What I learned from all this was that while wxWidgets are great for multiplatform development they are probably not a solution for developing game GUIs. I&#8217;d love to hear what others think on this subject, meanwhile I&#8217;ll move on to setting up my own GUI framework after a few hours of sleep.</p>]]></description>
<pubDate>Mon, 23 Mar 2009 07:44:11 -0400</pubDate>
</item>
<item>
<title>New Sandbox</title>
<link>http://kman.artician.com/blog/2009/03/new-sandbox/</link>
<guid>http://kman.artician.com/blog/2009/03/new-sandbox/</guid>
<description><![CDATA[<p>During a casual conversation someone brings up the idea of writing their own game engine. This is usually met rather stern remarks about complexity, lines of code, and a unworthy endeavor. Well for the most part I would say that is a true statement, and let me just say that is not what I&#8217;m trying to do. Well I&#8217;m trying not to think about it that way. My goal over the course of this week is to assemble together several sub systems I&#8217;ve done before, and some that I haven&#8217;t into a comprehensive sandbox. Then split it into several plug and play DLLs that I can use in future projects.</p>
<p>What I have so far:</p>
<ul>
<li>Math Library</li>
<li>Event Handler</li>
<li>Win32 Framework</li>
<li>Resource Manager</li>
<li>DirectX Initialization and Callbacks</li>
</ul>
<p>What I&#8217;m tackling this week:</p>
<ul>
<li>GUI Framework</li>
<li>wxWidgets Integration</li>
<li>Network Framework</li>
<li>Console Debugger</li>
</ul>
]]></description>
<pubDate>Mon, 23 Mar 2009 01:00:28 -0400</pubDate>
</item>
<item>
<title>New Sandbox</title>
<link>http://kman.artician.com/blog/2009/03/new-sandbox1/</link>
<guid>http://kman.artician.com/blog/2009/03/new-sandbox1/</guid>
<description><![CDATA[<p>During a casual conversation someone brings up the idea of writing their own game engine. This is usually met rather stern remarks about complexity, lines of code, and a unworthy endeavor. Well for the most part I would say that is a true statement, and let me just say that is not what I&#8217;m trying to do. Well I&#8217;m trying not to think about it that way. My goal over the course of this week is to assemble together several sub systems I&#8217;ve done before, and some that I haven&#8217;t into a comprehensive sandbox. Then split it into several plug and play DLLs that I can use in future projects.</p>
<p>What I have so far:</p>
<ul>
<li>Math Library</li>
<li>Event Handler</li>
<li>Win32 Framework</li>
<li>Resource Manager</li>
<li>DirectX Initialization and Callbacks</li>
</ul>
<p>What I&#8217;m tackling this week:</p>
<ul>
<li>GUI Framework</li>
<li>wxWidgets Integration</li>
<li>Network Framework</li>
<li>Console Debugger</li>
</ul>]]></description>
<pubDate>Mon, 23 Mar 2009 01:00:28 -0400</pubDate>
</item>
<item>
<title>My Full Sail Experience</title>
<link>http://kman.artician.com/blog/2009/02/my-full-sail-experience/</link>
<guid>http://kman.artician.com/blog/2009/02/my-full-sail-experience/</guid>
<description><![CDATA[<p>What drove me to take the plunge?</p>
<p class="MsoNormal">After high school I was very frustrated by the core classes that defined the first two years of a regular University. I was becoming even more frustrated by the partying, and lack of vision most of my friends and peers were only concerned about. I don’t remember what conversation made me remember Full Sail but it was a school I had known about since middle school and I truly felt my passion was in game development. I decided that I want two things out of my career. First interesting and challenging work that would keep me ever interested. Second I wanted to work at a fun place that allowed for creativity. So long story made a little shorter, Full Sail University is one of two schools at the time that might hope to provide for the sort of education that really teaches you the internal workings of making a game. I took the plunge. I packed up everything I owned into my car at the time 1998 Nissan Maxima, and drove it from Philadelphia to Winter Park FL. Thankfully my apartment was ready; I choose to stay at Winter Park Pointe apartments because they were the closest and cheapest in the area. I also decided to not have a roommate after a few disappointing attempts. So for the next few months I slept on nothing but a mattress.</p>
<p class="MsoNormal">The first three months are crucial at Full Sail; they help separate those who can and cannot handle the program. Odd schedules that have classes end at 1am and start again at 9am the next day. It was interesting trying to adapt to it, and many of us became nocturnal. The next month the schedule changed again. Oh yes, a semester is only a month long and classes are 40 hours a week. The pacing was perfect for me and I really dug all the knowledge. I was excited to be there, and I was just amazed at the different types of people I was surrounded by and all of whom held a strong interest in video games. I bought a PS3, and started playing games a lot more than ever before in my life. At some point along the way I think I lost sight of my goal and what was at stake. After the first three months I felt like I had C++ down solid.</p>
<p class="MsoNormal">The rest of the year we spent learning MFC, Win32, C#, DirectX, and Design Patterns. Along the way we also had a few general education classes needed for accreditation, but they too were all geared towards Game Development. This included an English course that had us write a full game design document. Math in Linear Algebra, Calculus, and Physics all laid out the foundation for what was to come.</p>
<p class="MsoNormal">The first game making experience was defined by two classes; Software Game Development and Software Game Production. I feel like both experiences deserve a post mortem but the lessons learned cannot be learned from reading this.</p>
<p class="MsoNormal">After the half way point it felt like we did something really great. We made a game! A great one at that. I, Casey Flach, and Charlie Prouse put together a 3D top down shooter in a roughly five weeks. Who knew that making a game doesn’t take months but weeks? Well we were hungry for more knowledge and the next few months more than helped satisfy that appetite. We took classes in Artificial Intelligence, Networking, Machine Architecture, OpenGL, Optimization, and Engine Development.</p>
<p class="MsoNormal">And we finally made it … final project… to be continued….</p>
]]></description>
<pubDate>Sun, 15 Feb 2009 18:26:59 -0500</pubDate>
</item>
<item>
<title>My Full Sail Experience</title>
<link>http://kman.artician.com/blog/2009/02/my-full-sail-experience1/</link>
<guid>http://kman.artician.com/blog/2009/02/my-full-sail-experience1/</guid>
<description><![CDATA[<p>What drove me to take the plunge?</p>
<p>After high school I was very frustrated by the core classes that defined the first two years of a regular University. I was becoming even more frustrated by the partying, and lack of vision most of my friends and peers were only concerned about. I don’t remember what conversation made me remember Full Sail but it was a school I had known about since middle school and I truly felt my passion was in game development. I decided that I want two things out of my career. First interesting and challenging work that would keep me ever interested. Second I wanted to work at a fun place that allowed for creativity. So long story made a little shorter, Full Sail University is one of two schools at the time that might hope to provide for the sort of education that really teaches you the internal workings of making a game. I took the plunge. I packed up everything I owned into my car at the time 1998 Nissan Maxima, and drove it from Philadelphia to Winter Park FL. Thankfully my apartment was ready; I choose to stay at Winter Park Pointe apartments because they were the closest and cheapest in the area. I also decided to not have a roommate after a few disappointing attempts. So for the next few months I slept on nothing but a mattress.</p>
<p>The first three months are crucial at Full Sail; they help separate those who can and cannot handle the program. Odd schedules that have classes end at 1am and start again at 9am the next day. It was interesting trying to adapt to it, and many of us became nocturnal. The next month the schedule changed again. Oh yes, a semester is only a month long and classes are 40 hours a week. The pacing was perfect for me and I really dug all the knowledge. I was excited to be there, and I was just amazed at the different types of people I was surrounded by and all of whom held a strong interest in video games. I bought a PS3, and started playing games a lot more than ever before in my life. At some point along the way I think I lost sight of my goal and what was at stake. After the first three months I felt like I had C++ down solid.</p>
<p>The rest of the year we spent learning MFC, Win32, C#, DirectX, and Design Patterns. Along the way we also had a few general education classes needed for accreditation, but they too were all geared towards Game Development. This included an English course that had us write a full game design document. Math in Linear Algebra, Calculus, and Physics all laid out the foundation for what was to come.</p>
<p>The first game making experience was defined by two classes; Software Game Development and Software Game Production. I feel like both experiences deserve a post mortem but the lessons learned cannot be learned from reading this.</p>
<p>After the half way point it felt like we did something really great. We made a game! A great one at that. I, Casey Flach, and Charlie Prouse put together a 3D top down shooter in a roughly five weeks. Who knew that making a game doesn’t take months but weeks? Well we were hungry for more knowledge and the next few months more than helped satisfy that appetite. We took classes in Artificial Intelligence, Networking, Machine Architecture, OpenGL, Optimization, and Engine Development.</p>
<p>And we finally made it … final project… to be continued….</p>]]></description>
<pubDate>Sun, 15 Feb 2009 18:26:59 -0500</pubDate>
</item>
<item>
<title>Unity 3D Particle Demo</title>
<link>http://kman.artician.com/blog/2009/02/unity-3d-particle-demo/</link>
<guid>http://kman.artician.com/blog/2009/02/unity-3d-particle-demo/</guid>
<description><![CDATA[Unity 3D has been a really great experience at my new job at Zeitgeist Games. Although I’m under NDA and can’t talk about what I’ve really been working on, I decided it would be a good idea to share with you a learning demo I put together that demonstrates the capabilities of Unity3D in a browser.<br />
<br />
Take a look and I hope you like this <a href="http://michaelkofman.com/UnitParticleExperiment.html">Unity3D Particle Demo</a>.]]></description>
<pubDate>Sun, 15 Feb 2009 14:22:58 -0500</pubDate>
</item>
<item>
<title>Working with Unity3D</title>
<link>http://kman.artician.com/blog/2009/02/working-with-unity3d/</link>
<guid>http://kman.artician.com/blog/2009/02/working-with-unity3d/</guid>
<description><![CDATA[<p>Unity 3D has been a really great experience at my new job at Zeitgeist Games. Although I&#8217;m under NDA and can&#8217;t talk about what I&#8217;ve really been working on, I decided it would be a good idea to share with you a learning demo I put together that demonstrates the capabilities of Unity3D in a browser.</p>
<p>Take a look and I hope you like this <a href="http://michaelkofman.com/UnitParticleExperiment.html" target="_self">Unity3D Particle Demo</a>.</p>
]]></description>
<pubDate>Sun, 15 Feb 2009 14:20:21 -0500</pubDate>
</item>
<item>
<title>Working with Unity3D</title>
<link>http://kman.artician.com/blog/2009/02/working-with-unity3d1/</link>
<guid>http://kman.artician.com/blog/2009/02/working-with-unity3d1/</guid>
<description><![CDATA[<p>Unity 3D has been a really great experience at my new job at Zeitgeist Games. Although I&#8217;m under NDA and can&#8217;t talk about what I&#8217;ve really been working on, I decided it would be a good idea to share with you a learning demo I put together that demonstrates the capabilities of Unity3D in a browser.</p>
<p>Take a look and I hope you like this <a href="http://michaelkofman.com/UnitParticleExperiment.html" target="_self">Unity3D Particle Demo</a>.</p>]]></description>
<pubDate>Sun, 15 Feb 2009 14:20:21 -0500</pubDate>
</item>
<item>
<title>&quot;I Come From a Future That Will No Longer Exist&quot;</title>
<link>http://kman.artician.com/blog/2009/01/I-Come-From-a-Future-That-Will-No-Longer-Exist/</link>
<guid>http://kman.artician.com/blog/2009/01/I-Come-From-a-Future-That-Will-No-Longer-Exist/</guid>
<description><![CDATA[<a href="http://www.apple.com/trailers/independent/special/" target="_blank">http://www.apple.com/trailers/independent/special/</a><br />
<br />
oh yea ... check out 12]]></description>
<pubDate>Mon, 05 Jan 2009 04:39:13 -0500</pubDate>
</item>
<item>
<title>Remember not to panic</title>
<link>http://kman.artician.com/blog/2009/01/Remember-not-to-panic/</link>
<guid>http://kman.artician.com/blog/2009/01/Remember-not-to-panic/</guid>
<description><![CDATA[Well I absolutely had to blog. This little incident surely made my night (or day .. well thats another story). So anyways I woke with a knock on my door. My 26&quot; monitor I had FedEx-ed from Philadelphia arrived and with a new speaker system well I was surely in business to finally do what I had long delayed; and that is to bring my beastly machine into functional order once more.<br />
<br />
I began by going to Wallmart picking up some Dust Remover and got to work by completely taking apart my mobo and even replacing the Arctic solution that needed or not has been there for the past two years. It was a fun activity, scraping off the greese, dusting the fans. I felt in tune with my hardware again. Well ... that moment only lasted briefly as I began to put the machine back together I had also wanted to reorganize the wiring. Primarily the PSU wiring was horrendous. I went as far as to use duct tape to hold certain wires in place. It looked fantastic and I go to power the machine on. ... ... <br />
<br />
Right thats preciously what happened. Nothing at all. I was bewildered as I double checked everything and it seemed to be on order. Yes I did re arrange the wiring but regardless it was all connected properly. Well, back to the basics I thought. Lets get the son of a bitch to post. I stripped out everything but the CPU/heatsink.<br />
<br />
And ... well it turned ON!!!<br />
<br />
But no post, in fact the power button only seemed to work once and after that I would have to flip the PSU off. I quickly went in with my nose, and nothing seemed to be burning so I was completely at a loss. I dropped into a search and the only real suggestion I found was the 4 part test on cardboard - mobo + cpu + speaker + psu. Well pretty much what I had already tried but ... out of the box. Since I did take the thing out once i could have made the mistake of putting in wrong (look at this point I was pretty agitated). I decided to take a break, watch a movie.<br />
<br />
<img src="http://farm4.static.flickr.com/3097/3162926496_862b00997f.jpg?v=0" alt=""><br />
<br />
<img src="http://farm4.static.flickr.com/3089/3162091303_35b4015b55.jpg?v=0" alt=""><br />
<br />
I resumed with a spare PSU, who's ATX connector was 4 deep (see picture) opposed to the 3 deep of my other PSU (it did work mind you). Well it worked, and so next time your in a similar situation ... well remember not to panic.]]></description>
<pubDate>Sat, 03 Jan 2009 05:15:06 -0500</pubDate>
</item>
<item>
<title>Hey Artician</title>
<link>http://kman.artician.com/blog/2008/08/Hey-Artician/</link>
<guid>http://kman.artician.com/blog/2008/08/Hey-Artician/</guid>
<description><![CDATA[It feels like it's been ages since I've spent quality time on Artician. Is there any hope of becoming nearly as active in the near future, afraid not. My time has become ever so prioritized, and as sad as it is I'm as far from Art as I'll ever be. Two years ago I made the decision to program video games, and I am five months away from living my dream (well getting paid for it).<br />
<br />
I started final project last week. Essentially it marks the end of our education, and now begins a different form of learning. The kind others are only privileged to experience in the industry or in post grad studies. We'll be pitching two game ideas this Wed, one of which will be fleshed out into a Game Bible, accompanied by Gantt charts, intense UML diagrams, and than development into a polished product (well I hope). Despite lack of final exams, coding labs, we are busier than ever. I particularly took on the role as project officer, and my main job has been to keep the team on track (I was lucky enough to be part of the ultimate dream team of programmers, and this has been largely a non-issue). But I think most importantly my job has been to motivate and inspire others.<br />
<br />
My approach has never involved, criticism (constructive or not), and it has always been about hands off leadership. In certain cases this is very dangerous, and I would recommend this for everyone. My method is based on inspiration. I work hard everyday, and don't ask the same of others. If you wait long enough, people begin to feel uneasy, and soon enough you'll be shocked and amazed at the sort of things that they will do without even saying a word. I think the job of any project leader is to do one thing and one thing only. Make the job of other easier, and more productive. As long as you can justify what your doing as such, your safe, and in time you'll gain the sort of respect that doesn't go away. Better yet, you make friends.<br />
<br />
I've got a new website up btw.<br />
<a href="http://www.michaelkofman.com/" target="_blank">http://www.michaelkofman.com/</a><br />
<br />
It's in development-ish, I don't do web design anymore, and I actually had to spend a good minute to get back into CSS yet alone learn some PHP (I just can't take it seriously, no matter how hard I try). Hopefully in the coming months I'll beef it up just a bit, and feed my obsession for perfection.<br />
<br />
My immediate goals are to drive the game project forward, and keep up with my other duties ( a Mars based education game for NASA, a research internship for AI, and the ever difficult task of maintaining a proper living environment; cooking, cleaning, laundry, paying the bills ).<br />
<br />
I hope that Artician is doing well without me trolling the forums and new submissions. Eric is a great guy that is determined and I'd go as far as to say destined for great things. Along with Henry, one of the few people who I can truly be myself around, I wish you guys the best and of course keep on doing what you guys do!]]></description>
<pubDate>Tue, 12 Aug 2008 07:54:58 -0400</pubDate>
</item>
<item>
<title>Exoporting from Maya</title>
<link>http://kman.artician.com/blog/2008/08/Exoporting-from-Maya/</link>
<guid>http://kman.artician.com/blog/2008/08/Exoporting-from-Maya/</guid>
<description><![CDATA[Game developers, big and small, are often tasked with content generation. We write tools that range from scripters, effects editors, to the infamous level editors. While level editors serve an important role in the game development cycle, sometimes time and limited man power don&#8217;t allow for the creation of a fully featured environment.
In this tutorial [...]]]></description>
<pubDate>Tue, 12 Aug 2008 07:17:08 -0400</pubDate>
</item>
<item>
<title>Exoporting from Maya</title>
<link>http://kman.artician.com/blog/2008/08/exoporting-from-maya1/</link>
<guid>http://kman.artician.com/blog/2008/08/exoporting-from-maya1/</guid>
<description><![CDATA[<p>Game developers, big and small, are often tasked with content generation. We write tools that range from scripters, effects editors, to the infamous level editors. While level editors serve an important role in the game development cycle, sometimes time and limited man power don&#8217;t allow for the creation of a fully featured environment.</p>
<p>In this tutorial we&#8217;ll go straight to the source with the creation of our Maya exporter. We will not be covering Mel, or building our own GUI. Instead we&#8217;ll be adopting from the <span>MPxFileTranslator</span>, a maya file exporter. We&#8217;ll be saving out our code into an XML file format that can then be used as input for character models, or even levels.</p>
<p><span></span></p>
<p>Understanding Maya&#8217;s naming convention is key to feeling comfortable and eventually predicting variable names when exploring further feature sets of the Maya API.</p>
<p>Nearly all Maya prefixes begin with the letter <span><strong>M</strong></span>; which of course stands for Maya and defines a Maya wrapper class. Next we have <span><strong>MFn</strong></span>; which stands for Maya Function set. For example <span>MFnMesh</span>, contains specific functions and variables that appropriately define a mesh (<em>a mesh is a collection of vertices, normals and uv coordinates in 3D space</em>) object in Maya. The MFn prefix is not limited to only visible objects in Maya. For instance, <span>MFnDependencyNode</span> is a conceptual object that is used to define a node inside the Maya graph architecture (we&#8217;ll cover the Maya architecture shortly, so don&#8217;t stress it).</p>
<p>Another important prefix in Maya is the <span><strong>MIt</strong></span> prefix that stands for Maya iterator. An iterator is not a difficult concept for those who are familiar with the STL library. It points towards some position in a data set (in this case a tree) and allows us for easy traversal, going to the next object ( <span>itr.next()</span> ) and looping until done ( <span>while(!itr.isDone())</span> ).</p>
<p>The last and final prefix to take note of is the <span><strong>MPx</strong></span>. It stands for Maya Proxy object (see proxy). Quite simply it provides us with an interface towards integrating into Maya itself. Common uses of MPx are the <span>MPxFileTranslator</span> which we will be focusing on in this tutorial and the <span>MPxCommand</span> which allows the user to create his or her own custom Maya commands. For more information please reference the Maya Documentation.</p>
<p>Now that we are past the formalities, we can begin to talk about how Maya organizes it&#8217;s data, so that we can begin to extract from it. Essentially everything in Maya is stored inside a Directed Acyclic Graph or DAG (this one keyword will be very important so please take note of it now).  For those familiar with web design this is equivalent to the HTML DOM object, for those not familiar I will refer to the data structure of a <em>graph</em>. The major difference in definition of a graph data structure and the DAG is that child nodes cannot be their own parents. See picture below.</p>
<p><a href="http://michaelkofman.com/mk2009/wp-content/uploads/2008/08/dagandnotadag.jpg"><img class="aligncenter size-medium wp-image-90" title="dagandnotadag" src="http://michaelkofman.com/wp-content/uploads/2008/08/dagandnotadag-300x174.jpg" alt="" width="300" height="174" /></a></p>
<p><strong>Step 1 – creating a proxy<br />
</strong></p>
<p>Create a new class and derive from <span>MPxFileTranslator</span>.</p>
<p><span>class CFileTranslator : public MPxFileTranslator<br />
</span></p>
<p><span> You will need to overload the following functions<br />
</span></p>
<p><span><span> </span><span>static void * creator(void);<br />
</span></span></p>
<p><span> MStatus writer(const MFileObject&#38; file, const MString&#38; optionString, FileAccessMode mode);<br />
</span></p>
<p><span> bool haveWriteMethod(void)const { return true; }<br />
</span></p>
<p><span> MString defaultExtension() const { return &#8220;xml&#8221;;}<br />
</span></p>
<p><span> MString filter() const { return &#8220;*.xml&#8221;;}<br />
</span></p>
<p><strong>Step 2 – creating a an exporter class<br />
</strong></p>
<p>Our Maya exporter will execute after pushing file -&#62; export all or file -&#62; export selection. Our entry point is than inside the <span>writer()</span> function that we have overloaded. In order to check for selection we can perform the simple if check for <span>mode == kExportActiveAccessMode</span> else we export all. Since this is more of a feature than base functionality I won&#8217;t cover exporting by selection in any great detail but its implementation is not very different from exporting all.</p>
<p>We now have the simple design decision to write all our code inside the <span>CFileTranslator</span> class we created earlier or simply create a new class that will be specific towards our needs. We will want this new class to contain a few basic functions. Such as <span>ClearAndReset()</span>, <span>ExportVertexData()</span> and <span>WriteToFile()</span>. We will call these in that sequence from within the <span>CFileTranslator</span>&#8217;s <span>writer()</span> function.</p>
<p><strong>Step 3 – data structures and data members<br />
</strong></p>
<p>Next we&#8217;ll create some basic data structures that we&#8217;ll fill out during exporting. One thing to note is that we&#8217;ll be using Maya&#8217;s intrinsic data types such as MFloatPoint which is essentially Maya&#8217;s version of a 3-tulupe vector that contains floats for the x, y, and z coordinates.</p>
<p><span>typedef struct _tVertex<br />
</span></p>
<p><span> {<br />
</span></p>
<p><span> MFloatPoint point;<br />
</span></p>
<p><span> MFloatVector normal;<br />
</span></p>
<p><span> float uv[2];<br />
</span></p>
<p><span> }UniqueVertex;<br />
</span></p>
<p>Here we created a new datatype that will contain the vertex position (<span>point</span>), the vertex normal (<span>normal</span>) and the UV texture coordinates (<span>uv[2]</span>). As we export our data we&#8217;re looking to optimize Maya&#8217;s vertex list by creating avoid duplicate vertices and creating a unique vertex list. We&#8217;ll than create our own triangle list that store indices into this our array of unique vertices. For a better idea on how index buffers work, reference Chad Vernon&#8217;s website at (<a href="http://www.chadvernon.com/blog/tutorials/directx9/vertex-and-index-buffers/">http://www.chadvernon.com/blog/tutorials/directx9/vertex-and-index-buffers/</a>). So the last important data structure we&#8217;ll need to generate is our triangle.</p>
<p><span>typedef struct _tTriangle<br />
</span></p>
<p><span>{<br />
</span></p>
<p><span> unsigned int verts[3];<br />
</span></p>
<p><span>}Triangle;<br />
</span></p>
<p><span> std::vector&#60;UniqueVertex&#62;    m_UniqueVertList;<br />
</span></p>
<p><span> std::vector&#60;Triangle&#62;    m_TriangleList;<br />
</span></p>
<p>Wrapping the above into a mesh structure would allow us to export more than one mesh at a time. These are further improvements that you may consider making to the base exporter.</p>
<p><strong>Step 4 – the loop<br />
</strong></p>
<p>The idea is quite simple, but the work may become a little tedious. Our goal is to go through go through Maya&#8217;s DAG , find all the Meshes and export them. The tedious part is that we&#8217;ll be doing a very similar traversal for just about each part of the export process since the DAG contains everything from Mesh objects to lights and transforms.</p>
<p>Thankfully the iteration process is quite straightforward. We begin by creating a MItDag. We specify that we&#8217;ll be traversing in <em>depth first</em> order, and we&#8217;ll be looking for <em>Meshes</em>. The code should look something like this.</p>
<p><span>MItDag dagIt(MItDag::kDepthFirst, MFn::kMesh);<br />
</span></p>
<p><span> </span>Next we loop through each element, each time checking if the Mesh is an intermediate object, which simply means it&#8217;s something left over in Maya history but is not the current model we continue. Else we begin exporting by calling <span>GetMesh()</span>, our own function that will fill out our data structures from earlier.</p>
<p><span>for (;!dagIt.isDone(); dagIt.next())<br />
</span></p>
<p><span> {<br />
</span></p>
<p><span> MDagPath currPath;<br />
</span></p>
<p><span> dagIt.getPath(currPath);<br />
</span></p>
<p><span> MFnMesh currMesh(currPath);<br />
</span></p>
<p><span> if (currMesh.isIntermediateObject())<br />
</span></p>
<p><span> continue;<br />
</span></p>
<p><span> GetMesh(currMesh);<br />
</span></p>
<p><span> }<br />
</span></p>
<p><strong>Step 5 – Creating a unique vertex list from Maya&#8217;s data<br />
</strong></p>
<p><strong> </strong>We&#8217;re now inside the GetMesh() function at which point our prime objective is to fill out our m_UniqueVertList and m_TriangleList for our mesh. This is also a good time to go ahead and pull out things like the mesh transform, or any custom attributes if you so wish. Again we will not focus on these features and move onto the actual data.</p>
<p>We begin by creating a MDagPath object which essentially will contain the directory, or path if you will, of the mesh we are attempting to export.</p>
<p><span>MDagPath path;<br />
</span></p>
<p><span> currMesh.getPath(path);<br />
</span></p>
<p>Next we&#8217;ll create a new itterator to traverse the polygons of our mesh (aka triangles). We&#8217;ll also create a few arrays that we&#8217;ll populate with Maya&#8217;s vertex positions, vertex normals, and UV coordinates.</p>
<p><span>MItMeshPolygon polyItr(path);<br />
</span></p>
<p><span> MFloatPointArray _tPoints;<br />
</span></p>
<p><span> currMesh.getPoints(_tPoints);<br />
</span></p>
<p><span> MFloatVectorArray _tNormals;<br />
</span></p>
<p><span> currMesh.getNormals(_tNormals);<br />
</span></p>
<p><span> MFloatArray _tVArrays;<br />
</span></p>
<p><span> MFloatArray _tUArrays;<br />
</span></p>
<p><span> currMesh.getUVs(_tVArrays,_tUArrays);<br />
</span></p>
<p>Something to take note of now, is that the index of the vertex positions, normals, and UVs will all be unique. Although the index of the U and V coordinates is a 1:1, and will use the same value.</p>
<p>If you have kept up with this tutorial so far, congratulations, we&#8217;re now in the final stretch and I will simply go ahead and post up the code for generating the unique vertex list and triangle list per mesh. Remember that this code snippet is my own and your coding style may or may not adhere to it. The important part is that you understand the process involved.</p>
<p><span>for (; !polyItr.isDone(); polyItr.next())<br />
</span></p>
<p><span> {<br />
</span></p>
<p><span> Triangle tmpTriangle;<br />
</span></p>
<p><span> for (int vertIndex = 0; vertIndex &#60; 3; ++vertIndex)<br />
</span></p>
<p><span> {<br />
</span></p>
<p><span> UniqueVertex tmpVertex;<br />
</span></p>
<p><span> tmpVertex.point = _tPoints[polyItr.vertexIndex(vertIndex)];<br />
</span></p>
<p><span> tmpVertex.normal = _tNormals[polyItr.normalIndex(vertIndex)];<br />
</span></p>
<p><span> int uvIndex = -1;<br />
</span></p>
<p><span> if(polyItr.getUVIndex(vertIndex, uvIndex))<br />
</span></p>
<p><span> {<br />
</span></p>
<p><span> tmpVertex.uv[0] = _tVArrays[uvIndex];<br />
</span></p>
<p><span> tmpVertex.uv[1] = _tUArrays[uvIndex];<br />
</span></p>
<p><span> }<br />
</span></p>
<p><span> else<br />
</span></p>
<p><span> continue; // this is a bad place to be!<br />
</span></p>
<p><span> bool exists = false;<br />
</span></p>
<p><span> int i = 0;<br />
</span></p>
<p><span> int size = m_UniqueVertList.size();<br />
</span></p>
<p><span> for (; i &#60; size; ++i)<br />
</span></p>
<p><span> {<br />
</span></p>
<p><span> if(m_UniqueVertList[i].point == tmpVertex.point &#38;&#38; m_UniqueVertList[i].normal == tmpVertex.normal &#38;&#38;<br />
</span></p>
<p><span> m_UniqueVertList[i].uv[0] == tmpVertex.uv[0] &#38;&#38; m_UniqueVertList[i].uv[1] == tmpVertex.uv[1] )<br />
</span></p>
<p><span> {<br />
</span></p>
<p><span> exists = true;<br />
</span></p>
<p><span> break;<br />
</span></p>
<p><span> }<br />
</span></p>
<p><span> }<br />
</span></p>
<p><span> if (exists)<br />
</span></p>
<p><span> {<br />
</span></p>
<p><span> tmpTriangle.verts[vertIndex] = i;<br />
</span></p>
<p><span> continue;<br />
</span></p>
<p><span> }<br />
</span></p>
<p><span> tmpTriangle.verts[vertIndex] = m_UniqueVertList.size();<br />
</span></p>
<p><span> m_UniqueVertList.push_back(tmpVertex);<br />
</span></p>
<p><span> }<br />
</span></p>
<p><span> m_TriangleList.push_back(tmpTriangle);<br />
</span></p>
<p><span> }<br />
</span></p>
<p>Since I didn&#8217;t cover everything involved with creating a Maya exporter and assumed some familiarity, or rather ability to use the Maya Documentation, please feel free to post comments and ask questions. I&#8217;ll be glad to make clarifications, but at the moment I need to get back to work.</p>]]></description>
<pubDate>Tue, 12 Aug 2008 07:17:08 -0400</pubDate>
</item>
<item>
<title>Final Project Begins, It?s Go Time!</title>
<link>http://kman.artician.com/blog/2008/08/Final-Project-Begins-Its-Go-Time/</link>
<guid>http://kman.artician.com/blog/2008/08/Final-Project-Begins-Its-Go-Time/</guid>
<description><![CDATA[I&#8217;m excited, no thrilled, I&#8217;m so anxious I can&#8217;t find the words to describe how I feel right now. Its the first day of school again. Oh the antcipation. You know when you go to sleep right away, in hopes of making tomorrow come faster, only to wake up hours before thinking and dreaming about [...]]]></description>
<pubDate>Wed, 06 Aug 2008 05:12:12 -0400</pubDate>
</item>
<item>
<title>Final Project Begins, It&acirc;s Go Time!</title>
<link>http://kman.artician.com/blog/2008/08/final-project-begins-its-go-time1/</link>
<guid>http://kman.artician.com/blog/2008/08/final-project-begins-its-go-time1/</guid>
<description><![CDATA[<p>I&#8217;m excited, no thrilled, I&#8217;m so anxious I can&#8217;t find the words to describe how I feel right now. Its the first day of school again. Oh the antcipation. You know when you go to sleep right away, in hopes of making tomorrow come faster, only to wake up hours before thinking and dreaming about nothing else.</p>
<p>We finally made it to Final Project! The next five months will be the most important months for me at FullSail. They will define all that I&#8217;ve learned, they will define all that I&#8217;m capable of. These last months will be the last stepping stones towards breaking into my dream job. There&#8217;s nothing more to say but this.</p>
<p>No matter what happens, no matter what goes wrong, no matter what challanges lie ahead. Our final project will be amazing, I know it. And with the months to come, I think I&#8217;ll convince you!</p>]]></description>
<pubDate>Wed, 06 Aug 2008 05:12:12 -0400</pubDate>
</item>
<item>
<title>Inverse Kinematics and Jacobians</title>
<link>http://kman.artician.com/blog/2008/08/Inverse-Kinematics-and-Jacobians/</link>
<guid>http://kman.artician.com/blog/2008/08/Inverse-Kinematics-and-Jacobians/</guid>
<description><![CDATA[
I recently wrote a paper on my research into procedural animation. We are only a few days from final project and my big game proposal is largely animation based. I thought it would be a good idea to put together a simple demonstration of Inverse Kinematics before Wednsday.
Although I was fairly successful at implementing the [...]]]></description>
<pubDate>Sun, 03 Aug 2008 04:01:58 -0400</pubDate>
</item>
<item>
<title>Inverse Kinematics and Jacobians</title>
<link>http://kman.artician.com/blog/2008/08/inverse-kinematics-and-jacobians1/</link>
<guid>http://kman.artician.com/blog/2008/08/inverse-kinematics-and-jacobians1/</guid>
<description><![CDATA[<p><a href="http://michaelkofman.com/mk2009/wp-content/uploads/2008/08/robaticarm.png"><img class="alignright size-medium wp-image-84" title="robaticarm" src="http://michaelkofman.com/wp-content/uploads/2008/08/robaticarm-300x236.png" alt="Robotic Arm" width="300" height="236" /></a></p>
<p>I recently wrote a paper on my research into procedural animation. We are only a few days from final project and my big game proposal is largely animation based. I thought it would be a good idea to put together a simple demonstration of Inverse Kinematics before Wednsday.</p>
<p><span></span></p>
<p>Although I was fairly successful at implementing the basic hierarchy, I am miles away from true IK. At the moment I&#8217;m attempting to comprehend Jacobians, but I feel my understanding for Calculus is really holding me back, as I&#8217;m having a hard time understanding fundemental concepts such as partial derivatives and how to represent derivites in code. Of course these are only set backs that I will resolve in the coming days.</p>
<p>For one I am glad I decided to keep this Unit Test very light and keep the process very itterative. This is usually quite the opposite to how I approach problems, but in this case it was largely to my benefit, as it allows for the implementation of small features before tackling the monster that is IK.</p>
<p>The steps I took are as follows:</p>
<ol>
<li>Render a joint on screen using D3DXCreateTeapot (later changed to D3DXCreateSphere)</li>
<li>Add simple camera controls</li>
<li>Build a simplified skeleton architectures. This involves joints, and bones.
<ul>
<li>A joint is packed with a 4&#215;4 local and global matrix representing both orientation and translation.</li>
<li>A local matrix is relative to its parent or @ origin (identity matrix) if no parent is present.</li>
<li>A global matrix is set or computed by taking the inverse of the local matrix. (this step will refined later)</li>
<li>A joint contains a list of children (bones). This allows us to climb down the hierarchy.</li>
<li>A joint contains an index into it&#8217;s parent (joint). This allows us to climb up the hierarchy.</li>
<li>A bone contains an index into it&#8217;s fromJoint, and an index into it&#8217;s toJoint.</li>
<li>If a a bone contains no toJoint it is assumed as the endeffector.</li>
</ul>
</li>
<li>Build a DummySkeleton function that initializes a simple arm hierarchy as seen above. This is fast and easy, and would be later replaced with a filestream and a tool.</li>
<li>Render the skeleton.
<ul>
<li>Rendering joints as sphere will allow for simple collision tests when regarding picking</li>
<li>Bones are rendered through D3DPT_LINELIST.</li>
<li>Utilization of recursive breadth first traversal and ID3DXMatrixStack for push, and pop functionality.</li>
</ul>
</li>
<li>Add picking (simply changing the appearance color of the joints for visual confirmation)
<ul>
<li>This will probably involve having to add additional information to an already rather large joint class.</li>
</ul>
</li>
<li>Add highlighed, and selected states to the joints.
<ul>
<li>Again I opted to keep these inside the joints</li>
</ul>
</li>
<li>When selected, translate the joint based on cursor position (should already be taken care of inside the picking algorithm). There is again some heavy use of inverses in this function, and this is where we can draw relationships between the data, to hopefully create better data structures during the next iteration.</li>
<li>Although imo, a minor step before attempting true IK. Implementing bounds based on bone length and DOF values for the axis, we will be officially at the milestone of Dynamic Control.</li>
</ol>]]></description>
<pubDate>Sun, 03 Aug 2008 04:01:58 -0400</pubDate>
</item>
<item>
<title>Procedural Animation</title>
<link>http://kman.artician.com/blog/2008/07/Procedural-Animation/</link>
<guid>http://kman.artician.com/blog/2008/07/Procedural-Animation/</guid>
<description><![CDATA[Below is a recent research paper I&#8217;ve done on procedural animation over the duration of one month in between classes. I take no credit for the ideas presented, as they are not original. To be more precise it is a paper better served as reference notes for future work in the area.
Introduction
Next generation games are [...]]]></description>
<pubDate>Wed, 30 Jul 2008 00:10:49 -0400</pubDate>
</item>
<item>
<title>Procedural Animation</title>
<link>http://kman.artician.com/blog/2008/07/procedural-animation1/</link>
<guid>http://kman.artician.com/blog/2008/07/procedural-animation1/</guid>
<description><![CDATA[<p>Below is a recent research paper I&#8217;ve done on procedural animation over the duration of one month in between classes. I take no credit for the ideas presented, as they are not original. To be more precise it is a paper better served as reference notes for future work in the area.</p>
<p><span></span><strong>Introduction</strong></p>
<p>Next generation games are becoming more demanding of large behavior sets, and therefore more animations per character. This trend is primarily noticeable through third person action adventure games such as Naughty Dog’s Uncharted, and Rockstar’s Grand Theft Auto 4. This demand is easily the prime reason for increased budgets when creating a next-gen video game [11]. Art assets are numerous and motion capture is often very expansive, especially so for startup studios. Thanks largely in part to systems like Natural Motion’s Euphoria, and Will Wright’s Spore; the industry has turned towards procedural animations.<br />
Animation Systems</p>
<p>There are various forms of animation systems available. These range from simple free-bodies, morphing, articulated animations, and skin-bone animation [00]. This paper will focus on implementing a skin-bone animation, and analyze the restrictions and limitations of such a system.</p>
<p>Skin bone animation combines hierarchical joints that stem from the root (usually being the pelvis area), and associate sets of vertices to a single or multiple bones as is the case with smoothed skin animation.</p>
<p>In order to implement a hierarchical system, each node usually contains a several degrees of freedom, a quaternion to represent rotation, and a vector to represent translation. By distributing the matrix in such a form we cut back from the rather redundant &#60;0, 0, 0, 1&#62; vector for the last row or column in the matrix. Each joint is in reference to its parent, and the root note is respectively in global space. Due to this incoherency, the vertices will need to be translated into world space. This process is often referred to as flattening the hierarchy.</p>
<p>Below is a list of common structures that I will reference in the coming paragraphs. This will also give you a good sense of the architecture [10].</p>
<p><em><br />
</em><span><strong>Transform</strong></span><br />
class transform_t<br />
{<br />
public:<br />
transform_t();<br />
quaternion rotation;<br />
vector3&#60;float&#62; position;<br />
};<br />
A spatial transform structure is a good way to represent joints inside a skeleton structure and similarly we can include the bone information inside this same structure. It’s important to begin to get a good grasp over the required data, over a static composition.</p>
<p><span><strong>Bone</strong></span><br />
class bone_t<br />
{<br />
public:<br />
enum<br />
{<br />
X_ROTATION =1&#60;&#60;0,<br />
Y_ROTATION =1&#60;&#60;1,<br />
Z_ROTATION =1&#60;&#60;2<br />
};<br />
bone_t();<br />
float dof[6];<br />
float distance;<br />
int parent;<br />
int options;<br />
};<br />
The bone primarily represents the edges for the skeleton. This one way to go about your architecture and in reality there are many. In this example we specify in the options bit field which degree of freedom we’ll use. Based on that, we can also use the enum declared above to specify which dof (degrees of freedom) we’d like to access. The stored value of a dof is a pair of minimum and maximum values in radians for that joint. Where distance, is the offset along Z-axis. Finally the parent points us towards the index of our parent bone</p>
<p><span><strong>Animation Sequence</strong></span><br />
class sequence_t<br />
{<br />
public:<br />
sequence_t();<br />
float fps;<br />
int index;<br />
int numframes;<br />
};<br />
Sequences act very much like mini-players in our architecture where we reference the time, in this case our fps, the index into our frames list which has a reference to a complete pose, and the number of frames to play for.</p>
<p>Our final structure would be a skeleton or a character class that encapsulates all of the above, and handles the hierarchy flattening, updating, rendering, and the animation. In the next section we will discuss motion graphs and talk and how modern games procedurally generate it’s animation from limited budgets.<br />
<strong></strong></p>
<p><strong>Motion Graphs</strong><br />
Procedural animations can be classified into three forms. The most common in triple A titles is the parametric approach, which we’ll focus on here. This method is a combination of motion graphs and blending functions. Another approach is often presented by Ken Perlin [03] on his website, where walk cycles, butterfly wings, and other forms of movement are defined by math functions. Spore to some surprise is the former of the two, and the animation system is actually defined backwards where the mesh defines the bone structure and not the other way around. Finally a we have the Euphoria approach which combines rag doll physics system with an animation system and some clever AI to create its own set of procedural animations [11][13].</p>
<p>Taking into consideration only the parametric approaches, data is usually represented through either move trees or motion graphs. The former involves a designer to specify the exact transitions from one animation to another, and usually is done with short clips of animation. Although this process is considerably simpler than motion graphs it is also proportionally more expansive. Each time a new clip of animation is needed, the studio must reserve time for professional actors and/or stunt men to produce, and so these are usually all done in one go and often times don’t come out perfect. At the current state of the industry it is safe to assume that this is the most used approach.</p>
<p>Motion graphs help define transitions from one animation into another where smooth, seamless set of actions can be generated on the fly. This technique to my knowledge was pioneered or made popular by Lucas Kovar [09]. We begin with a corpus of motion capture data. Someone than edits the footage and associates each set of frames with labels. Labels simply act as human-legible strings that define the motion, such as “jump”, “walk”, “kick”, or “ballet”. I will not attempt to recreate Kovar’s work in this paper since his paper on motion graphs is largely distributed over the internet and is cited at the end of the paper. Instead I will help draw an understanding and familiarity with the algorithms involved.</p>
<p>After the motion capture data is recorded and labeled, we begin by generating an error function based of point clouds [16]. For each frame we compute the average distance of from frame i to frame j. From this data we can now generate our error function. See figure above. Next we compute the minima, which are simply points with the highest probability for transitions. Since this error function is based off point clouds, we are now less focusing primarily on the mesh as opposed to the bones which may lead to miss-interpretation. Such as certain rotations, like those in the wrist are sometimes less significant than those of the waist. After our minima is calculated we use those points to build the nodes of our animation and create transitions into other minima via blending functions (see blending below). Next we prune our graph against; dead ends - nodes with no children, sinks – nodes that contain one or only a few children but have many connections pointing towards them. And finally we want to prune our data against nodes that take in one type of label but who’s children do not share the same label for n depth. This final prune helps avoid a character from transition into awkward states in order to reach his goal; like going from “boxing” into “ballet”.</p>
<p>After the graph is properly generated we can utilize A* with heuristics to generate walk paths for our animations. For more on this, again, please reference Kovar’s work.<br />
<strong></strong></p>
<p><strong>Blending</strong><br />
Real time animation in video games is evolving beyond cut-scenes and the fidelity involves balancing responsive controls towards smooth animations. We will consider blending techniques from linear interpolation to the more advanced approaches such as discussed by Leslie Ikemoto from the University of Berkley in her paper on Quick Transitions with Cached Multi-Way Blends [02].</p>
<p>Interpolation through functions is the most common form of transitioning from frame to frame of animation. Linear interpolation is the simplest way to handle translation without the seeing obscure artifacts. When handling rotation, by using a quaternion we can avoid scaling artifacts that can arise when using matrices. Spherical interpolation, commonly referred to as slerp is performed on the quaternions [06].</p>
<p>Breezier functions are often also good function to use, since it quite simply the interpolation of A onto B and C onto D and than AB onto CD. For further research on blending, and more particularly motion graph blends, I recommend reading Leslie’s paper on Multi-Way blends, where multiple samples are taken and an average motion is assumed.<br />
<strong></strong></p>
<p><strong>Sliding Foot Syndrome</strong></p>
<p>A very common problem when it comes to procedural animations, is the uncanny foot sliding, that creates unrealistic locomotion. This is often due to interpolation blending, that can creates unrealistic forward kinematics, particularly in the feet, since our eyes are so in tune to picking up such subtleties in human motion, the common solution is to perform an inverse kinematics algorithm onto the feet, and essentially clamp them to the ground.</p>
<p>To perform IK, we begin at the end-effectors [07] of the bones, in this case the feet nodes, and then perform the following steps:</p>
<p>1. Given a target point, we perform attempt to rotate our joint towards the target and perform a distance check from the tip of our bone to the target.</p>
<p>2. If we can’t reach the target based on the allowed degree’s of freedom we, begin a recursive process of moving down our hierarchy and readjusting our angles to achieve the maximum possible distance.</p>
<p>This algorithm will not guarantee realistic motion, and weights are often used to prefer one joint to another. Another approach is to split up the geometry into multiple parts, such as the body, arms, and legs. This allows for some optimization, particularly in a system that utilizes instancing. It also avoid obscure postures.</p>
<p>Remember that sometimes reaching the target is not possible, and this should be accounted for, since it may produce artifacts [10].<br />
<strong>Creating Intelligence: Behavior Tree Design and Implementation</strong><br />
Due to higher expectations and level of interaction of AI agents, current-gen titles need to be both goal oriented and quick to make changes. The solution has grown to be hierarchical logic. These include HFSM (hierarchical Finite State Machine), HTN (hierarchical task network planner), and hierarchical scripting. Each given advantages and disadvantages, one new technique has emerged that was largely adopted by Damian Isla Halo 2 to be more precise. Behavior trees are the best compromise for the previous three techniques.</p>
<p>A behavior tree, is a tree that defines animations, sounds, into actions and conditions, that make up a task node. A task node can either succeed or fail. Before moving on, I’ll quickly define a composite. A composite can be considered children nodes from a task. These are not leaf nodes usually, but are broken down into two types. Sequencers, and selectors. A sequence is a condition in which case all child nodes must be successful to return true, and selectors return true if any of the children return true. As Alex Champandard points out, these are simply the AND/OR logic that most people are quite familiar with. Sequences and selectors are usually added onto basic state machine by a designer (usually through some sort of GUI). Similarly this has application into scripting. The final piece that makes behavior trees extremely powerful are filters that can be applied between nodes. These filters utilize the decorator design pattern, and can attempt to prune the hierarchy based off specific criteria. Creating multiples of such filters, a behavior tree specific design patterns will begin to immerge. Examples of which are timers, loops, counters, and so on. To learn more about behavior trees, I highly recommend AIGameDev.com, and Alex’s three part video tutorial on the subject.</p>
<p>To relate the topic back to procedural animation, a good approach is to split up the motion graph queries from the higher level logic. Which can be better handled through a separate data structure. Let’s consider a dog that’s currently eating a bowl of dog cereal, but is suddenly attacked. This would involve several very specific animations before going straight into his bark animation. The dog would first stop eating, look around, after he finds his target, glare at it, and begin to growl.</p>
<p><strong>Work Cited</strong><br />
[00] Lecture notes from Real Time Animation by Shawn Stafford. FullSail University.</p>
<p>[01] Learning to Move Autonomously in a Hostile World, Leslie Ikemoto, University of California at Berkeley. http://www.animate-me.com/~leslie/papers/moveAutonomous.pdf</p>
<p>[02] Quick Transitions with Cached Multi-way Blends, Leslie Ikemoto, University of California at Berkeley. http://www.animate-me.com/~leslie/papers/i3d2007.pdf</p>
<p>[03] Ken Perlin’s Experiments on Procedural Animation, http://www.mrl.nyu.edu/~perlin/</p>
<p>[04] Inverse Kinematics by Hugo Elias, http://freespace.virgin.net/hugo.elias/models/m_ik.htm</p>
<p>[05] Inverse Kinematics – Improved Meathods by Hugo Elias, http://freespace.virgin.net/hugo.elias/models/m_ik2.htm</p>
<p>[06] The Matrix and Quaternion FAQ, http://web.archive.org/web/20041029003853/http:/www.j3d.org/matrix_faq/matrfaq_latest.html#Q47</p>
<p>[07] Physics Based Animation by Erleben, Sporring, Henriksen, Dohlmann.</p>
<p>[08] Inverse Kinematics Using Jacobians, http://diegopark.googlepages.com/computergraphics</p>
<p>[09] Motion Graphs by Lucas Kovar, University of Wisconsin Maddison. http://www.cs.wisc.edu/graphics/Papers/Gleicher/Mocap/mograph.pdf</p>
<p>[10] Inverse Kinematics for Humanoid Skeleton Tutorial by Jonathan Kreuzer. http://www.3dkingdoms.com/ik.htm#ikappen</p>
<p>[11] Planting Spores of Procedural Animation? by Dave Mark. http://aigamedev.com/discussion/planting-the-spores-of-procedural-animation</p>
<p>[12] The Crysis of Integrating Next-Gen Animations and AI, by Alex J. Champandard. http://aigamedev.com/reviews/crysis-animation-integration</p>
<p>[13] 9 Tips for Creating Rich Behaviors on a Low Animation Budget, by Alex J. Champandard. http://aigamedev.com/animation/budget-rich-behaviors</p>
<p>[14] The Backbone of AI Behaviors: Movement and Animation, by Alex J. Champandard. http://aigamedev.com/tutorials/backbone-behaviors-movement-animation</p>
<p>[15] Behavior Trees for Next-Gen AI, by Alex J. Champandard (3 parts). http://aigamedev.com/videos/behavior-trees-part1</p>
<p>[16] Point Cloud, Wikipedia (2008). http://en.wikipedia.org/wiki/Point_cloud</p>]]></description>
<pubDate>Wed, 30 Jul 2008 00:10:49 -0400</pubDate>
</item>
<item>
<title>Work Cited on Procedural Animation</title>
<link>http://kman.artician.com/blog/2008/07/Work-Cited-on-Procedural-Animation/</link>
<guid>http://kman.artician.com/blog/2008/07/Work-Cited-on-Procedural-Animation/</guid>
<description><![CDATA[A research paper that spans only a single month is due this Wednsday and I&#8217;ve just finished compiling all my notes. I can&#8217;t say it was easy, some of the material i stumbled upon was simply beyond me. I&#8217;ll attempt at working these into a slightly better order at a later time, but for the [...]]]></description>
<pubDate>Sun, 27 Jul 2008 03:23:04 -0400</pubDate>
</item>
<item>
<title>Work Cited on Procedural Animation</title>
<link>http://kman.artician.com/blog/2008/07/work-cited-on-procedural-animation1/</link>
<guid>http://kman.artician.com/blog/2008/07/work-cited-on-procedural-animation1/</guid>
<description><![CDATA[<p>A research paper that spans only a single month is due this Wednsday and I&#8217;ve just finished compiling all my notes. I can&#8217;t say it was easy, some of the material i stumbled upon was simply beyond me. I&#8217;ll attempt at working these into a slightly better order at a later time, but for the time being here is the list.<br />
[00] <strong>Lecture notes from Real Time Animation by Shawn Stafford</strong>. FullSail University.<br />
[01]<strong> Learning to Move Autonomously in a Hostile World</strong>, Leslie Ikemoto, University of California at Berkeley. <a href="http://www.animate-me.com/~leslie/papers/moveAutonomous.pdf">http://www.animate-me.com/~leslie/papers/moveAutonomous.pdf</a><br />
[02] <strong>Quick Transitions with Cached Multi-way Blends</strong>, Leslie Ikemoto, University of California at Berkeley. <a href="http://www.animate-me.com/~leslie/papers/i3d2007.pdf">http://www.animate-me.com/~leslie/papers/i3d2007.pdf</a><br />
[03] <strong>Ken Perlin’s Experiments on Procedural Animation</strong>, <a href="http://www.mrl.nyu.edu/~perlin/">http://www.mrl.nyu.edu/~perlin/</a><br />
[04]<strong> Inverse Kinematics</strong> by Hugo Elias, <a href="http://freespace.virgin.net/hugo.elias/models/m_ik.htm">http://freespace.virgin.net/hugo.elias/models/m_ik.htm</a><br />
[05]<strong> Inverse Kinematics – Improved Meathods</strong> by Hugo Elias, <a href="http://freespace.virgin.net/hugo.elias/models/m_ik2.htm">http://freespace.virgin.net/hugo.elias/models/m_ik2.htm</a><br />
[06] <strong>The Matrix and Quaternion FAQ</strong>, <a href="http://web.archive.org/web/20041029003853/http:/www.j3d.org/matrix_faq/matrfaq_latest.html#Q47">http://web.archive.org/web/20041029003853/http:/www.j3d.org/matrix_faq/matrfaq_latest.html#Q47</a><br />
[07] <strong>Physics Based Animation</strong> by Erleben, Sporring, Henriksen, Dohlmann.<br />
[08]<strong> Inverse Kinematics Using Jacobians</strong>, <a href="http://diegopark.googlepages.com/computergraphics">http://diegopark.googlepages.com/computergraphics</a><br />
[09] <strong>Motion Graphs</strong> by Lucas Kovar, University of Wisconsin Maddison. <a href="http://www.cs.wisc.edu/graphics/Papers/Gleicher/Mocap/mograph.pdf">http://www.cs.wisc.edu/graphics/Papers/Gleicher/Mocap/mograph.pdf</a><br />
[10]<strong> Inverse Kinematics for Humanoid Skeleton Tutorial</strong> by Jonathan Kreuzer. <a href="http://www.3dkingdoms.com/ik.htm#ikappen">http://www.3dkingdoms.com/ik.htm#ikappen</a><br />
[11]<strong> Planting Spores of Procedural Animation?</strong> by Dave Mark. <a href="http://aigamedev.com/discussion/planting-the-spores-of-procedural-animation">http://aigamedev.com/discussion/planting-the-spores-of-procedural-animation</a><br />
[12] <strong>The Crysis of Integrating Next-Gen Animations and AI,</strong> by Alex J. Champandard. <a href="http://aigamedev.com/reviews/crysis-animation-integration">http://aigamedev.com/reviews/crysis-animation-integration</a><br />
[13] <strong>9 Tips for Creating Rich Behaviors on a Low Animation Budget</strong>, by Alex J. Champandard. <a href="http://aigamedev.com/animation/budget-rich-behaviors">http://aigamedev.com/animation/budget-rich-behaviors</a><br />
[14]<strong> The Backbone of AI Behaviors: Movement and Animation</strong>, by Alex J. Champandard. <a href="http://aigamedev.com/tutorials/backbone-behaviors-movement-animation">http://aigamedev.com/tutorials/backbone-behaviors-movement-animation</a><br />
[15]<strong> Behavior Trees for Next-Gen AI</strong>, by Alex J. Champandard (3 parts). <a href="http://aigamedev.com/videos/behavior-trees-part1">http://aigamedev.com/videos/behavior-trees-part1</a><br />
Please bear in mind this is by no means extensive, and there are several papers I&#8217;ve read but could not recall the locations of.</p>]]></description>
<pubDate>Sun, 27 Jul 2008 03:23:04 -0400</pubDate>
</item>
<item>
<title>Generating a Dynamic Grid Based of 4 Points</title>
<link>http://kman.artician.com/blog/2008/07/Generating-a-Dynamic-Grid-Based-of-4-Points/</link>
<guid>http://kman.artician.com/blog/2008/07/Generating-a-Dynamic-Grid-Based-of-4-Points/</guid>
<description><![CDATA[Given four points in space:
Vec3f vTopLeft, vTopRight, vBottomLeft, vBottomRight;
and a value for the cell density
unsigned int uiDensity;
We&#8217;re trying to generate a set of verticies in 3D space. These points are not limited in any way by being on the same plane.
The reason for this algorithm was originally quite simple and this solution was far from [...]]]></description>
<pubDate>Wed, 23 Jul 2008 02:11:49 -0400</pubDate>
</item>
<item>
<title>Go Go Space Boy</title>
<link>http://kman.artician.com/blog/2008/06/Go-Go-Space-Boy/</link>
<guid>http://kman.artician.com/blog/2008/06/Go-Go-Space-Boy/</guid>
<description><![CDATA[We went to the beach today<br />
<br />
man the people I'm around now sure are interesting ... &quot;it's hot&quot; &quot;oh the sun&quot; &quot;oh the water&quot; &quot;the water is salty&quot; &quot;its far&quot; &quot;I have 'private' stuff to do&quot;<br />
<br />
god damn it!<br />
<br />
anyways we got an ok turn out<br />
<br />
saw the space shuttle go up for the first time ever.<br />
<br />
It was AMAZING!<br />
<br />
seriously, take me to space ... I want to see it ...]]></description>
<pubDate>Sun, 01 Jun 2008 00:12:24 -0400</pubDate>
</item>
<item>
<title>Tennis 2083</title>
<link>http://kman.artician.com/blog/2008/05/Tennis-2083/</link>
<guid>http://kman.artician.com/blog/2008/05/Tennis-2083/</guid>
<description><![CDATA[[youtube=http://www.youtube.com/watch?v=DP9rm8AtFXk]
]]></description>
<pubDate>Thu, 22 May 2008 07:55:00 -0400</pubDate>
</item>
<item>
<title>A new PS3 Tech Demo</title>
<link>http://kman.artician.com/blog/2008/05/A-new-PS3-Tech-Demo/</link>
<guid>http://kman.artician.com/blog/2008/05/A-new-PS3-Tech-Demo/</guid>
<description><![CDATA[Despite all the negative critism by the users I was truly impressed when I saw the new tech demo for the PS3, titled "<a href="http://kotaku.com/372172/watch-the-linger-in-shadows-ps3-demo">Linger In Shadows</a>". Although very abstract, I was highly impressed with the close ups on the cat and the fur shaders. This comes a long way from Shadow of the Colossus. Other points that impressed me were the rope physics, and the depth of field (some of which I expect to be demonstrated in Insomniacs upcoming game).<br /><br />This is a quick share. If you have further understanding of the graphics system please share with me what you might have thought after a closer look.]]></description>
<pubDate>Sat, 17 May 2008 00:12:00 -0400</pubDate>
</item>
</channel>
</rss>