<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>abi.exdream.com - Benjamin Nitschke's Blog - Rocket Commander</title>
    <link>http://exdream.no-ip.info/blog/</link>
    <description>Benjamin Nitschke's Blog about .NET, Game Development and my daily life.</description>
    <language>en-us</language>
    <copyright>abi.exdream.com</copyright>
    <lastBuildDate>Mon, 11 Feb 2008 23:48:36 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>abi@exDream.com</managingEditor>
    <webMaster>abi@exDream.com</webMaster>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=5bab5e3e-0bde-4092-96cc-012bcee7656e</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,5bab5e3e-0bde-4092-96cc-012bcee7656e.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,5bab5e3e-0bde-4092-96cc-012bcee7656e.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5bab5e3e-0bde-4092-96cc-012bcee7656e</wfw:commentRss>
      <slash:comments>11</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Even when I did not post much last week
I was very busy converting all the old XNA 1.0 games to XNA 2.0. I did not only convert
all projects (8 games in total, see below), but I also tested them extensively on
Windows XP, Vista (32 and 64 bit) and the Xbox 360. Additionally a lot of usability
improvements have been implemented in the games, for example the XNA Shooter is now
much easier (was almost impossible to even reach 50% of the level) and a lot more
fun due better balancing. The XNA Racing Game has now a better physic engine and will
not longer let the car fly out of the track or leave ground in loopings. Due the better
input control and fixed physics the cars drive now much faster and it is more challenging
to complete the tracks in shorter time frames.<br /><br />
Games in this article: 
<ul><li><a href="#Chapter1Game">Chapter1Game</a></li><li><a href="#XnaPong">Xna Pong</a></li><li><a href="#XnaBreakout">Xna Breakout</a></li><li><a href="#XnaTetris">Xna Tetris</a></li><li><a href="#RocketCommanderXna">Rocket Commander Xna</a></li><li><a href="#XnaShooter">Xna Shooter</a></li><li><a href="#XnaRacingGame">Xna Racing Game</a></li><li><a href="#DungeonQuestGDC">Dungeon Quest GDC</a></li></ul><br />
Please read my previous post about <a href="http://exdream.no-ip.info/blog/2008/02/01/ConvertingXNA10ProjectsToXNA20.aspx">Converting
XNA 1.0 games to XNA 2.0 for all technical tips</a>. All the games can also be found
on <a href="http://XnaProjects.net">http://XnaProjects.net</a>, but I will also make
them easier accessible on this blog soon, which has an update overdue (need to clean
up the left and right sides) ^^<br /><br />
Thanks to the great VS2005 support of XNA 2.0 all games have now just one single solution
file, which works on Windows and the Xbox 360. The projects can be opened in XNA Game
Studio 2.0 and Visual Studio 2005 without having to <a href="http://exdream.no-ip.info/blog/2007/07/19/XnaProjectChangerToolWithVS2008Support.aspx">convert
the files over and over again like in the past</a>. The Icons for all games were also
improved. Lets take a look at the Icons (.ico files) on Windows:<br /><br /><img src="http://exdream.no-ip.info/blog/content/binary/XnaIconsWindows.jpg" border="0" /><br />
For the Xbox 360 game icons the .png files (usually named GameThumbnail.png) are used:<br /><br /><img src="http://exdream.no-ip.info/blog/content/binary/XnaIconsXbox360.jpg" border="0" width="382" /><br />
Ok, let's take a look at the games and what has changed for them. Most games are pretty
much the same as for XNA 1.0, but a lot of smaller bugs were fixed and they have been
tested more.<br /><br /><ul><li><a name="Chapter1Game"></a><b>Chapter1Game</b>: This application is not really a game,
but a test project to check out if XNA 2.0 is properly working on both Windows and
the Xbox 360. It is from the first chapter of my book <a href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470126779.html">"Professional
XNA Game Programming"</a>. BTW: The second edition of the book is coming out soon,
there are 3 more chapters about Multiplayer game programming and a cool new role playing
game.<br /><br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/Chapter1GameSetup.exe">Chapter1GameSetup.exe
(210 KB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/Chapter1GameSourceCode.zip">Chapter1GameSourceCode.zip
(57 KB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/Chapter1GameScreenshot1.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=Chapter1GameScreenshot1.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="XnaPong"></a><b>Xna Pong</b>: Xna Pong is a simple clone of the favorite
pong game from 1978. It is just a few hunderd lines of code and should be very easy
to understand.<br /><br />
This game is from the book "Professional XNA Game Programming" by Benjamin Nitschke.
For more information read chapter 2. (2008-02-10: Now updated to XNA 2.0)<br /><br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/XnaPongSetup.exe">XnaPongSetup.exe
(309 KB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/XnaPongSourceCode.zip">XnaPongSourceCode.zip
(258 KB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/XNAPongScreenshot.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=XNAPongScreenshot.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="XnaBreakout"></a><b>Xna Breakout</b>: XNA Breakout is a simple Breakout/Arcanoid
game based on the XNA Pong game from the previous chapter.<br /><br />
It is fully described and covered in Chapter 3 of my book "Professional XNA Game Programming".
The code is quite short and should be easy to understand. (2008-02-10: Now updated
to XNA 2.0)<br /><br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/XnaBreakoutSetup.exe">XnaBreakoutSetup.exe
(383 KB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/XnaBreakoutSourceCode.zip">XnaBreakoutSourceCode.zip
(316 KB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/XNABreakoutScreenshot.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=XNABreakoutScreenshot.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="XnaTetris"></a><b>Xna Tetris</b>: This is a simple, but highly addictive
Tetris game. You can control the blocks with your cursor keys, aswd or a game pad
and the game works both on Windows and the Xbox 360. Reaching levels above 5 is really
hard. My highest level was 9, try to reach more :) (2008-02-10: Now updated to XNA
2.0)<br /><br />
This game introduces the helper classes (chapter 4 of my book) and makes more use
of unit testing and game components in XNA.<br /><br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/XnaTetrisSetup.exe">XnaTetrisSetup.exe
(310 KB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/XnaTetrisSourceCode.zip">XnaTetrisSourceCode.zip
(277 KB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/XNATetrisScreenshot1.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=XNATetrisScreenshot1.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="RocketCommanderXna"></a><b>Rocket Commander Xna</b>: XNA port of the famous
Rocket Commander game. The game principle stayed the same, but the controls were a
little bit simplified to make it more fun on the Xbox 360.<br /><br />
If you want to learn more about the Rocket Commander game, check out its official
website <a href="http://www.RocketCommander.com">www.RocketCommander.com</a> and check
out the Video Tutorials on Coding4Fun by MSDN. (2008-02-10: Now updated to XNA 2.0,
also supports very big resolutions now and runs faster on the Xbox 360)<br /><br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/RocketCommanderXnaSetup.exe">RocketCommanderXnaSetup.exe
(16.5 MB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/RocketCommanderXnaSourceCode.zip">RocketCommanderXnaSourceCode.zip
(52.8 MB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/RocketCommanderXnaScreenshot1.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=RocketCommanderXnaScreenshot1.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="XnaShooter"></a><b>Xna Shooter</b>: Shoot'n'up game specifically created
for my book "Professional XNA Game Programming". It features full HDTV support, runs
on Windows and the Xbox 360, 5 weapon types, 5 enemy types, a powerful ship and some
power ups. It is quite fun to play and it gets harder and harder the longer you play.
Based partly on the Rocket Commander XNA engine, but also features lots of new effects
and shaders. (2008-02-10: Now updated to XNA 2.0, also much easier and balanced)<br /><br />
This game and the racing game are the most improved. The game works now much better
in high resolutions and on the Xbox 360. But most importantly the game is now much
easier, balanced and more fun. Additionally a level percentage is now visible on the
bottom and more EMP bombs can be picked up to make it easier at the end of the level. 
<br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/XnaShooterSetup.exe">XnaShooterSetup.exe
(14.9 MB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/XnaShooterSourceCode.zip">XnaShooterSourceCode.zip
(32.2 MB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/XnaShooterScreenshot0014.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=XnaShooterScreenshot0014.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="XnaRacingGame"></a><b>Xna Racing Game</b>: XNA Racing Game Starter Kit I
wrote for <a href="http://creators.xna.com">http://creators.xna.com</a>. More information
and more downloads can be found on <a href="http://XnaRacingGame.com">http://XnaRacingGame.com</a>.
It runs best on the Xbox 360 in HDTV (1920x1200), but it also runs fine on the PC.
(2008-02-10: Now updated to XNA 2.0, driving also improved a lot, better tested on
Xbox 360 and fixed some issues).<br /><br />
Following things were improved: Shadow mapping on very big resolutions works now (crashed
before), more options for lower quality settings, fixed physics, car now always stays
on the road, fixed loopings, cars are much faster now, winning conditions work better
now, and fixed several other bugs. 
<br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/XnaRacingGameSetup.exe">XnaRacingGameSetup.exe
(40.2 MB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/XnaRacingGameSourceCode.zip">XnaRacingGameSourceCode.zip
(95.4 MB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/RacingGameScreenshotBig03.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=RacingGameScreenshotBig03.jpg" border="0" /><br /><br /></a></li></ul></li><li><a name="DungeonQuestGDC"></a><b>Dungeon Quest GDC</b>: And finally the Dungeon Quest
XNA Game, which was developed in just 4 days on the GDC 2007 at the XNA Contest. Dungeon
Quest GDC is a relatively complex 3D role playing game (at least for just 4 days of
work). An early version even supported coop multiplayer on the Xbox 360 via splitscreen.
The game was developed by Benjamin Nitschke (abi.exDream.com) and Christoph Rienaecker
(WAII). (2008-02-10: Now updated to XNA 2.0). This is NOT the full Dungeon Quest game
(see www.DungeonQuestGame.com for that), this is just the GDC version.<br /><br />
Please note that the level was reduced to allow loading on the Xbox 360 (which otherwise
crashes with an OutOfMemoryException), the game is not fully playable, only the first
part is implemented. You can also press F2 to toggle the Options menu and some minor
bugs were fixed. But this game is no longer supported, I will not improve it anymore!
Please check out the new Dungeon Quest game from www.DungeonQuestGame.com, which is
coming in a month or so.<br /><ul><li>
Game Installer: <a href="http://arenawars.net/XnaProjects/DungeonQuestGDCSetup.exe">DungeonQuestGDCSetup.exe
(25.6 MB)</a></li><li>
Source Code and Game Content: <a href="http://arenawars.net/XnaProjects/DungeonQuestGDCSourceCode.zip">DungeonQuestGDCSourceCode.zip
(67.2 MB)</a></li><li>
Screenshot:<br /><a href="http://arenawars.net/XnaProjects/DungeonQuest_Day4_01.jpg"><img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;Height=200&amp;Link=DungeonQuest_Day4_01.jpg" border="0" /><br /><br /></a></li></ul></li></ul>
Have fun with all the games :)<img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=5bab5e3e-0bde-4092-96cc-012bcee7656e" /></body>
      <title>All XNA Games converted to XNA 2.0 from Rocket Commander to the Racing Game.</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,5bab5e3e-0bde-4092-96cc-012bcee7656e.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2008/02/11/AllXNAGamesConvertedToXNA20FromRocketCommanderToTheRacingGame.aspx</link>
      <pubDate>Mon, 11 Feb 2008 23:48:36 GMT</pubDate>
      <description>Even when I did not post much last week I was very busy converting all the old XNA 1.0 games to XNA 2.0. I did not only convert all projects (8 games in total, see below), but I also tested them extensively on Windows XP, Vista (32 and 64 bit) and the Xbox 360. Additionally a lot of usability improvements have been implemented in the games, for example the XNA Shooter is now much easier (was almost impossible to even reach 50% of the level) and a lot more fun due better balancing. The XNA Racing Game has now a better physic engine and will not longer let the car fly out of the track or leave ground in loopings. Due the better input control and fixed physics the cars drive now much faster and it is more challenging to complete the tracks in shorter time frames.&lt;br&gt;
&lt;br&gt;
Games in this article: 
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#Chapter1Game"&gt;Chapter1Game&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#XnaPong"&gt;Xna Pong&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#XnaBreakout"&gt;Xna Breakout&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#XnaTetris"&gt;Xna Tetris&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#RocketCommanderXna"&gt;Rocket Commander Xna&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#XnaShooter"&gt;Xna Shooter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#XnaRacingGame"&gt;Xna Racing Game&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#DungeonQuestGDC"&gt;Dungeon Quest GDC&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
Please read my previous post about &lt;a href="http://exdream.no-ip.info/blog/2008/02/01/ConvertingXNA10ProjectsToXNA20.aspx"&gt;Converting
XNA 1.0 games to XNA 2.0 for all technical tips&lt;/a&gt;. All the games can also be found
on &lt;a href="http://XnaProjects.net"&gt;http://XnaProjects.net&lt;/a&gt;, but I will also make
them easier accessible on this blog soon, which has an update overdue (need to clean
up the left and right sides) ^^&lt;br&gt;
&lt;br&gt;
Thanks to the great VS2005 support of XNA 2.0 all games have now just one single solution
file, which works on Windows and the Xbox 360. The projects can be opened in XNA Game
Studio 2.0 and Visual Studio 2005 without having to &lt;a href="http://exdream.no-ip.info/blog/2007/07/19/XnaProjectChangerToolWithVS2008Support.aspx"&gt;convert
the files over and over again like in the past&lt;/a&gt;. The Icons for all games were also
improved. Lets take a look at the Icons (.ico files) on Windows:&lt;br&gt;
&lt;br&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/XnaIconsWindows.jpg" border="0"&gt; 
&lt;br&gt;
For the Xbox 360 game icons the .png files (usually named GameThumbnail.png) are used:&lt;br&gt;
&lt;br&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/XnaIconsXbox360.jpg" border="0" width="382"&gt; 
&lt;br&gt;
Ok, let's take a look at the games and what has changed for them. Most games are pretty
much the same as for XNA 1.0, but a lot of smaller bugs were fixed and they have been
tested more.&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a name="Chapter1Game"&gt;&lt;/a&gt;&lt;b&gt;Chapter1Game&lt;/b&gt;: This application is not really a game,
but a test project to check out if XNA 2.0 is properly working on both Windows and
the Xbox 360. It is from the first chapter of my book &lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470126779.html"&gt;"Professional
XNA Game Programming"&lt;/a&gt;. BTW: The second edition of the book is coming out soon,
there are 3 more chapters about Multiplayer game programming and a cool new role playing
game.&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/Chapter1GameSetup.exe"&gt;Chapter1GameSetup.exe
(210 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/Chapter1GameSourceCode.zip"&gt;Chapter1GameSourceCode.zip
(57 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/Chapter1GameScreenshot1.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=Chapter1GameScreenshot1.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="XnaPong"&gt;&lt;/a&gt;&lt;b&gt;Xna Pong&lt;/b&gt;: Xna Pong is a simple clone of the favorite
pong game from 1978. It is just a few hunderd lines of code and should be very easy
to understand.&lt;br&gt;
&lt;br&gt;
This game is from the book "Professional XNA Game Programming" by Benjamin Nitschke.
For more information read chapter 2. (2008-02-10: Now updated to XNA 2.0)&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/XnaPongSetup.exe"&gt;XnaPongSetup.exe
(309 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/XnaPongSourceCode.zip"&gt;XnaPongSourceCode.zip
(258 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/XNAPongScreenshot.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=XNAPongScreenshot.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="XnaBreakout"&gt;&lt;/a&gt;&lt;b&gt;Xna Breakout&lt;/b&gt;: XNA Breakout is a simple Breakout/Arcanoid
game based on the XNA Pong game from the previous chapter.&lt;br&gt;
&lt;br&gt;
It is fully described and covered in Chapter 3 of my book "Professional XNA Game Programming".
The code is quite short and should be easy to understand. (2008-02-10: Now updated
to XNA 2.0)&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/XnaBreakoutSetup.exe"&gt;XnaBreakoutSetup.exe
(383 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/XnaBreakoutSourceCode.zip"&gt;XnaBreakoutSourceCode.zip
(316 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/XNABreakoutScreenshot.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=XNABreakoutScreenshot.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="XnaTetris"&gt;&lt;/a&gt;&lt;b&gt;Xna Tetris&lt;/b&gt;: This is a simple, but highly addictive
Tetris game. You can control the blocks with your cursor keys, aswd or a game pad
and the game works both on Windows and the Xbox 360. Reaching levels above 5 is really
hard. My highest level was 9, try to reach more :) (2008-02-10: Now updated to XNA
2.0)&lt;br&gt;
&lt;br&gt;
This game introduces the helper classes (chapter 4 of my book) and makes more use
of unit testing and game components in XNA.&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/XnaTetrisSetup.exe"&gt;XnaTetrisSetup.exe
(310 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/XnaTetrisSourceCode.zip"&gt;XnaTetrisSourceCode.zip
(277 KB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/XNATetrisScreenshot1.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=XNATetrisScreenshot1.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="RocketCommanderXna"&gt;&lt;/a&gt;&lt;b&gt;Rocket Commander Xna&lt;/b&gt;: XNA port of the famous
Rocket Commander game. The game principle stayed the same, but the controls were a
little bit simplified to make it more fun on the Xbox 360.&lt;br&gt;
&lt;br&gt;
If you want to learn more about the Rocket Commander game, check out its official
website &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt; and check
out the Video Tutorials on Coding4Fun by MSDN. (2008-02-10: Now updated to XNA 2.0,
also supports very big resolutions now and runs faster on the Xbox 360)&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/RocketCommanderXnaSetup.exe"&gt;RocketCommanderXnaSetup.exe
(16.5 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/RocketCommanderXnaSourceCode.zip"&gt;RocketCommanderXnaSourceCode.zip
(52.8 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/RocketCommanderXnaScreenshot1.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=RocketCommanderXnaScreenshot1.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="XnaShooter"&gt;&lt;/a&gt;&lt;b&gt;Xna Shooter&lt;/b&gt;: Shoot'n'up game specifically created
for my book "Professional XNA Game Programming". It features full HDTV support, runs
on Windows and the Xbox 360, 5 weapon types, 5 enemy types, a powerful ship and some
power ups. It is quite fun to play and it gets harder and harder the longer you play.
Based partly on the Rocket Commander XNA engine, but also features lots of new effects
and shaders. (2008-02-10: Now updated to XNA 2.0, also much easier and balanced)&lt;br&gt;
&lt;br&gt;
This game and the racing game are the most improved. The game works now much better
in high resolutions and on the Xbox 360. But most importantly the game is now much
easier, balanced and more fun. Additionally a level percentage is now visible on the
bottom and more EMP bombs can be picked up to make it easier at the end of the level. 
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/XnaShooterSetup.exe"&gt;XnaShooterSetup.exe
(14.9 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/XnaShooterSourceCode.zip"&gt;XnaShooterSourceCode.zip
(32.2 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/XnaShooterScreenshot0014.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=XnaShooterScreenshot0014.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="XnaRacingGame"&gt;&lt;/a&gt;&lt;b&gt;Xna Racing Game&lt;/b&gt;: XNA Racing Game Starter Kit I
wrote for &lt;a href="http://creators.xna.com"&gt;http://creators.xna.com&lt;/a&gt;. More information
and more downloads can be found on &lt;a href="http://XnaRacingGame.com"&gt;http://XnaRacingGame.com&lt;/a&gt;.
It runs best on the Xbox 360 in HDTV (1920x1200), but it also runs fine on the PC.
(2008-02-10: Now updated to XNA 2.0, driving also improved a lot, better tested on
Xbox 360 and fixed some issues).&lt;br&gt;
&lt;br&gt;
Following things were improved: Shadow mapping on very big resolutions works now (crashed
before), more options for lower quality settings, fixed physics, car now always stays
on the road, fixed loopings, cars are much faster now, winning conditions work better
now, and fixed several other bugs. 
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/XnaRacingGameSetup.exe"&gt;XnaRacingGameSetup.exe
(40.2 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/XnaRacingGameSourceCode.zip"&gt;XnaRacingGameSourceCode.zip
(95.4 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/RacingGameScreenshotBig03.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=RacingGameScreenshotBig03.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a name="DungeonQuestGDC"&gt;&lt;/a&gt;&lt;b&gt;Dungeon Quest GDC&lt;/b&gt;: And finally the Dungeon Quest
XNA Game, which was developed in just 4 days on the GDC 2007 at the XNA Contest. Dungeon
Quest GDC is a relatively complex 3D role playing game (at least for just 4 days of
work). An early version even supported coop multiplayer on the Xbox 360 via splitscreen.
The game was developed by Benjamin Nitschke (abi.exDream.com) and Christoph Rienaecker
(WAII). (2008-02-10: Now updated to XNA 2.0). This is NOT the full Dungeon Quest game
(see www.DungeonQuestGame.com for that), this is just the GDC version.&lt;br&gt;
&lt;br&gt;
Please note that the level was reduced to allow loading on the Xbox 360 (which otherwise
crashes with an OutOfMemoryException), the game is not fully playable, only the first
part is implemented. You can also press F2 to toggle the Options menu and some minor
bugs were fixed. But this game is no longer supported, I will not improve it anymore!
Please check out the new Dungeon Quest game from www.DungeonQuestGame.com, which is
coming in a month or so.&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Game Installer: &lt;a href="http://arenawars.net/XnaProjects/DungeonQuestGDCSetup.exe"&gt;DungeonQuestGDCSetup.exe
(25.6 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Source Code and Game Content: &lt;a href="http://arenawars.net/XnaProjects/DungeonQuestGDCSourceCode.zip"&gt;DungeonQuestGDCSourceCode.zip
(67.2 MB)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Screenshot:&lt;br&gt;
&lt;a href="http://arenawars.net/XnaProjects/DungeonQuest_Day4_01.jpg"&gt;&lt;img src="http://arenawars.net/XnaProjects/Photo.aspx?Width=320&amp;amp;Height=200&amp;amp;Link=DungeonQuest_Day4_01.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
Have fun with all the games :)&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=5bab5e3e-0bde-4092-96cc-012bcee7656e" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,5bab5e3e-0bde-4092-96cc-012bcee7656e.aspx</comments>
      <category>All;Development;Game Development;Other;Programming;Racing Game;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=7597edbd-a105-4d85-98a9-ced60522acf9</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,7597edbd-a105-4d85-98a9-ced60522acf9.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,7597edbd-a105-4d85-98a9-ced60522acf9.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7597edbd-a105-4d85-98a9-ced60522acf9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://exdream.no-ip.info/blog/content/binary/Xna1toXna2.jpg" border="0" />
        <br />
When I wrote this (a little bit each day while working on converting the old XNA projects)
I was very aware about the disappointment of my blog readers about the fact that I
did not blog much in the last couple of months, especially on XNA. I not only got
a lot of emails about that, but also quite a lot of questions, especially since XNA
2.0 was released. I made yet another promise to myself to change that and finally
blog more, maybe not only when something very interesting pops up, but instead about
the everyday issues I run into.<br /><br />
Some Notes about <b>XNA 2.0</b>: More solid, lots of little new features, networking,
while it may not be a very complete solution, at least it is now possible on the Xbox
360 and overall I have the feeling even more people are interested in XNA than a year
ago. Plus the guys at the XNA Team doing a great job and are constantly improving
the <a href="http://creators.xna.com/">XNA Creators Club</a> website for us game programmers
and artists :)<a href="http://creators.xna.com"><br /><img src="http://creators.xna.com/Themes/default/images/common/logo_xna.png" border="0" /></a><br /><br />
Several people had problems using the old XNA 1.0 code of my games and make them work
with XNA 2.0, so here is a little help in case you want to convert XNA 1.0 projects
to XNA 2.0. You will also notice this if you go to any XNA community site as most
samples will still be in XNA 1.0 and not work out of the box in XNA 2.0, and many
of those will probably never be changed since they are not longer actively being developed.<br /><br />
For most games almost all of the code can stay unchanged, you just have to poke at
a few things that have changed in the framework or were improved. <a href="http://creators.xna.com/Education/whatsnew.aspx">More
information about converting projects can be found here</a> (read this first, this
article is based on the stuff there). You can also use the <a href="http://msdn2.microsoft.com/en-us/library/bb976061.aspx">Cross-Platform
Game Project Converter from XNA 2.0</a> to add a Xbox 360 project to your existing
Windows XNA project without having to create a separate project (it is helpful, but
I used pretty much the same trick for all of my XNA 1.0 games anyway).<br /><br />
Let's go through the steps:<br /><br /><ol><li>
Either use the <a href="http://creators.xna.com/GameStudio2/ProjectUpgradeWizardForXNAGameStudio2.htm">XNA
project conversion utility</a> (can be found on the XNA Creators Club website) or
just create a new XNA 2.0 project in VS 2005.<br /><br /></li><li>
If you created a new project, drag all source code files into the project and seperate
the content files out and put them all in the existing <b>Content </b>directory (only
there the content pipeline is activated). If you just converted a project and the
content files did not move, move them yourself to the content directory. Gladly all
my projects with more than 5 content files had a special content directory anyway,
so no need to change anything content-wise for them. If you don't want some of the
files to be compiled to .xnb files, you have to change the build action from "<b>compile</b>"
to "<b>content</b>" (and then use the "<b>copy to output directory</b>" switch) or
to "<b>none</b>" if you want them to be ignored like for .wav files, which are automatically
processed by the .xct (XACT) file for you.<br /><br /></li><li>
Find the line <b>content = new ContentManager(Services);</b> and replace it with <b>Content.RootDirectory
= "Content";</b>. If you do that, get rid of the content manager in your game class
since you can now use the build-in Content property to access the underlying Game
content manager. In case you don't want to do that or if you need an extra variable,
replace the above line with <b>content = new ContentManager(Services, "Content");</b>.
Both ways will make sure all the content is now loaded from the content directory
instead from the main directory of the application. In more complex XNA games you
can also change the BaseGameDirectory to the content directory, but then you would
also have to move all other resource files to this directory (config files, save games,
levels, etc.). It is usually a good idea to separate the compiled (.xnb) content from
the content the user can change (config, levels, etc.), so I suggest just redirecting
the content directory of the content manager.<br /><br /></li><li>
Replace the <b>LoadGraphicsContent(bool)</b> method with <b>LoadContent</b>, remove
all the <b>if (loadAllContent)</b> commands (was never false anyway, just let the
content of the if loop stay) and also remove the call to <b>base.LoadGraphicsContent(bool)</b> (does
not do anything like all the Load or Unload methods in the XNA Game class, they are
just empty virtual methods). You can also ignore this and the next step since it will
only generate depreciated warnings, but I suggest cleaning up your source code whenever
an opportunity like this presents itself. I also added some missing region blocks
to the code and some comments here and there were they were missing.<br /><br /></li><li>
Finally delete the <b>UnloadGraphicsContent</b> method unless it did anything beside <b>base.Unload</b> and <b>base.UnloadGraphicsContent</b>.
In my XNA games the <b>UnloadGraphicsContent</b> usually looked like this and can
be safely removed now (at least if nothing else is in there):</li></ol><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
&lt;summary&gt;</span><br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
Unload graphic content if the device gets lost.</span><br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
&lt;/summary&gt;</span><br /><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">///
&lt;param name="unloadAllContent"&gt;Unload everything?&lt;/param&gt;</span><br /><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">protected</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">override</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">void</span> UnloadGraphicsContent(<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">bool</span> unloadAllContent)<br />
{<br />
  <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">if</span> (unloadAllContent
== <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">true</span>)<br />
    content.Unload();<br /><br />
  <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">base</span>.UnloadGraphicsContent(unloadAllContent);<br />
} <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//
UnloadGraphicsContent(loadAllContent)</span></span></p><br /><li>
In case you load sound and music via the AudioEngine, you have to change the directory
to the content directory too, which will not be done automatically for you since you
load the .xct file directly in the AudioEngine constructor. Basically just exchange
the following code:<br /><br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> audioEngine <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> AudioEngine(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"YourSound.xgs"</span>);<br />
waveBank <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> WaveBank(audioEngine, <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Wave
Bank.xwb"</span>);<br />
soundBank <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> SoundBank(audioEngine, <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Sound
Bank.xsb"</span>);<br /></span></p>
with:<br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> audioEngine <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> AudioEngine(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Content\\YourSound.xgs"</span>);<br />
waveBank <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> WaveBank(audioEngine, <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Content\\Wave
Bank.xwb"</span>);<br />
soundBank <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> SoundBank(audioEngine, <span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Content\\Sound
Bank.xsb"</span>);</span></p>
   <br /></li><li>
In case you have used the <b>StorageDevice </b>and specifically the <b>ShowStorageDeviceGuide </b>helper
method, it is gone now in XNA 2.0. I had it in some helper classes, but never actually
used it. In case you want to show a save game dialog (or some network game select
dialog for example), please follow the XNA 2.0 help instructions to do this asynchronously
now.<br /><br /></li><li>
In case you use any <b>ResourceUsage </b>enum, replace it with <b>TextureUsage </b>instead
or remove it if the issue is not texture related. You can also safely remove any <b>ResourceManagementMode</b>.<b>Automatic </b>parameters,
which are not longer supported. Everything is now automatic anyway. Just if you have
been using <b>ResourceUsage</b>.<b>RenderTarget </b>you will need to change the <b>Texture2D </b>class
to a <b>ResolveTexture2D</b> class in order to archive the same behaviour as before.
Some calls to the device (e.g. <b>ResolveBackBuffer</b>) have also changed and require
a <b>ResolveTexture2D </b>now. You may also want to check if you have any manual texture
management or disposing, which you can remove or simplify.<br /><br /></li><li>
For simpler games (2D) games you should be done now. More complex games using render
targets and other features that have changed in XNA 2.0 will require some more changes,
but after you have done them once (or know where to change what) this is also a quick
process.</li><br />
The following only applies to the <b>RocketCommanderXna</b>, <b>XnaShooter </b>and <b>XnaRacingGame </b>engines,
but you might find similarities with other XNA games and the converting process:<br /><br /><ol><li>
First of all make sure the old XNA 1.1 code gets compileable by going though the changes
mentioned above (e.g. replacing <b>ResourceUsage </b>with <b>TextureUsage </b>or <b>BufferUsage</b>)
and removing everything that does not exist anymore (like <b>ResourceManagementMode</b>.<b>Automatic</b>).
If a method is non-existent in XNA 2.0 like <b>ResolveRenderTarget</b>, comment it
out and remember where it happened.<br /><br /></li><li>
You might go through other issues, but you have to come back to the RenderTarget issue.
This took the most time in the converting process for me (probably half of all my
issues come by something related to changes with <b>RenderTargets </b>in XNA 2.0).
For that reason always make sure that rendering to textures still works while you
make changing. I always used the <b>TestCreateRenderToTexture </b>unit test inside
the <b>RenderToTexture </b>class to figure things out.<br /><br /></li><li>
Additionally to making some changes in the <b>BaseGame </b>class (loading content
via <b>LoadContent</b>, using the <b>base.Content</b> instead of creating a new content
manager, etc.) I also removed all the <b>RenderTarget </b>helper methods and fields
from the BaseGame class (<b>SetRenderTarget</b>, <b>ResetRenderTarget</b>, etc.) and
moved them into the <b>RenderToTexture </b>class. While this makes the code more clean
and restructured by making a few more fields private, if you do not call the new <b>InitializeDepthBufferFormatAndMultisampling </b>of
the <b>RenderToTexture </b>class the calls to <b>SetRenderTarget </b>and <b>ResetRenderTarget </b>will
not work correctly and will not restore the default depth buffer (which has to be
remembered first). If you get the following exception it means the <b>DepthBuffer
Device.DepthStencilBuffer</b> was set to null, but is obviously still used. In order
to fix that make sure the <b>remDepthBuffer </b>variable is set to a correct value
in the <b>InitializeDepthBufferFormatAndMultisampling </b>method!<br /></li></ol><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><br />
An error has occurred during the Clear operation <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">while</span> trying
to clear the depth or stencil buffer, no DepthStencilBuffer surface exists.<br />
System.InvalidOperationException: An error has occurred during the Clear operation <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">while</span> trying
to clear the depth or stencil buffer, no DepthStencilBuffer surface exists.<br />
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(ClearOptions options, Color
color, Single depth, Int32 stencil, Rectangle[] regions)<br />
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(Color color)</span></p>
    
<br /><li>
4. Even if you have now done everything, the app may still crash when you are trying
to clear a render target (which usually happens at the start of each pre or post screen
shader). The reason for the following error is the multi sampling format, which might
be set to the background buffer, but not to the render targets:<br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><br />
The active render target and depth stencil surface must have the same pixel size and
multisampling type.<br />
System.InvalidOperationException: The active render target and depth stencil surface
must have the same pixel size and multisampling type.<br />
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.VerifyDepthRenderTargetCompat()<br />
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(ClearOptions options, Color
color, Single depth, Int32 stencil, Rectangle[] regions)</span></p>
    
<br />
In order to get rid of this error without changing the <b>RenderToTexture </b>class
a lot, you can just comment out the line where multi sampling is activated in <b>BaseGame</b>:<br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">//this.graphics.PreferMultiSampling
= true;</span></span></p></li>
There are probably even more things that I forgot while converting the projects (converted
8 games and about 15 projects in total now), but the above list should be helpful.
Especially for me because I always forget some of those little things and having this
checklist is very helpful.<br /><br />
Tomorrow I will probably test all the XNA 2.0 games on my Xbox 360 and make some final
adjustments and then post them all on <a href="http://XnaProjects.net">http://XnaProjects.net</a> (and
here).<br /><br /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=7597edbd-a105-4d85-98a9-ced60522acf9" /></body>
      <title>Converting XNA 1.0 Projects to XNA 2.0</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,7597edbd-a105-4d85-98a9-ced60522acf9.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2008/02/01/ConvertingXNA10ProjectsToXNA20.aspx</link>
      <pubDate>Fri, 01 Feb 2008 00:32:32 GMT</pubDate>
      <description>&lt;img src="http://exdream.no-ip.info/blog/content/binary/Xna1toXna2.jpg" border="0"&gt;
&lt;br&gt;
When I wrote this (a little bit each day while working on converting the old XNA projects)
I was very aware about the disappointment of my blog readers about the fact that I
did not blog much in the last couple of months, especially on XNA. I not only got
a lot of emails about that, but also quite a lot of questions, especially since XNA
2.0 was released. I made yet another promise to myself to change that and finally
blog more, maybe not only when something very interesting pops up, but instead about
the everyday issues I run into.&lt;br&gt;
&lt;br&gt;
Some Notes about &lt;b&gt;XNA 2.0&lt;/b&gt;: More solid, lots of little new features, networking,
while it may not be a very complete solution, at least it is now possible on the Xbox
360 and overall I have the feeling even more people are interested in XNA than a year
ago. Plus the guys at the XNA Team doing a great job and are constantly improving
the &lt;a href="http://creators.xna.com/"&gt;XNA Creators Club&lt;/a&gt; website for us game programmers
and artists :)&lt;a href="http://creators.xna.com"&gt;
&lt;br&gt;
&lt;img src="http://creators.xna.com/Themes/default/images/common/logo_xna.png" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Several people had problems using the old XNA 1.0 code of my games and make them work
with XNA 2.0, so here is a little help in case you want to convert XNA 1.0 projects
to XNA 2.0. You will also notice this if you go to any XNA community site as most
samples will still be in XNA 1.0 and not work out of the box in XNA 2.0, and many
of those will probably never be changed since they are not longer actively being developed.&lt;br&gt;
&lt;br&gt;
For most games almost all of the code can stay unchanged, you just have to poke at
a few things that have changed in the framework or were improved. &lt;a href="http://creators.xna.com/Education/whatsnew.aspx"&gt;More
information about converting projects can be found here&lt;/a&gt; (read this first, this
article is based on the stuff there). You can also use the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb976061.aspx"&gt;Cross-Platform
Game Project Converter from XNA 2.0&lt;/a&gt; to add a Xbox 360 project to your existing
Windows XNA project without having to create a separate project (it is helpful, but
I used pretty much the same trick for all of my XNA 1.0 games anyway).&lt;br&gt;
&lt;br&gt;
Let's go through the steps:&lt;br&gt;
&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
Either use the &lt;a href="http://creators.xna.com/GameStudio2/ProjectUpgradeWizardForXNAGameStudio2.htm"&gt;XNA
project conversion utility&lt;/a&gt; (can be found on the XNA Creators Club website) or
just create a new XNA 2.0 project in VS 2005.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
If you created a new project, drag all source code files into the project and seperate
the content files out and put them all in the existing &lt;b&gt;Content &lt;/b&gt;directory (only
there the content pipeline is activated). If you just converted a project and the
content files did not move, move them yourself to the content directory. Gladly all
my projects with more than 5 content files had a special content directory anyway,
so no need to change anything content-wise for them. If you don't want some of the
files to be compiled to .xnb files, you have to change the build action from "&lt;b&gt;compile&lt;/b&gt;"
to "&lt;b&gt;content&lt;/b&gt;" (and then use the "&lt;b&gt;copy to output directory&lt;/b&gt;" switch) or
to "&lt;b&gt;none&lt;/b&gt;" if you want them to be ignored like for .wav files, which are automatically
processed by the .xct (XACT) file for you.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Find the line &lt;b&gt;content = new ContentManager(Services);&lt;/b&gt; and replace it with &lt;b&gt;Content.RootDirectory
= "Content";&lt;/b&gt;. If you do that, get rid of the content manager in your game class
since you can now use the build-in Content property to access the underlying Game
content manager. In case you don't want to do that or if you need an extra variable,
replace the above line with &lt;b&gt;content = new ContentManager(Services, "Content");&lt;/b&gt;.
Both ways will make sure all the content is now loaded from the content directory
instead from the main directory of the application. In more complex XNA games you
can also change the BaseGameDirectory to the content directory, but then you would
also have to move all other resource files to this directory (config files, save games,
levels, etc.). It is usually a good idea to separate the compiled (.xnb) content from
the content the user can change (config, levels, etc.), so I suggest just redirecting
the content directory of the content manager.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Replace the &lt;b&gt;LoadGraphicsContent(bool)&lt;/b&gt; method with &lt;b&gt;LoadContent&lt;/b&gt;, remove
all the &lt;b&gt;if (loadAllContent)&lt;/b&gt; commands (was never false anyway, just let the
content of the if loop stay) and also remove the call to &lt;b&gt;base.LoadGraphicsContent(bool)&lt;/b&gt; (does
not do anything like all the Load or Unload methods in the XNA Game class, they are
just empty virtual methods). You can also ignore this and the next step since it will
only generate depreciated warnings, but I suggest cleaning up your source code whenever
an opportunity like this presents itself. I also added some missing region blocks
to the code and some comments here and there were they were missing.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Finally delete the &lt;b&gt;UnloadGraphicsContent&lt;/b&gt; method unless it did anything beside &lt;b&gt;base.Unload&lt;/b&gt; and &lt;b&gt;base.UnloadGraphicsContent&lt;/b&gt;.
In my XNA games the &lt;b&gt;UnloadGraphicsContent&lt;/b&gt; usually looked like this and can
be safely removed now (at least if nothing else is in there):&lt;/li&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt; &lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
Unload graphic content if the device gets lost.&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;///
&amp;lt;param name="unloadAllContent"&amp;gt;Unload everything?&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;override&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;void&lt;/span&gt; UnloadGraphicsContent(&lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;bool&lt;/span&gt; unloadAllContent)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;if&lt;/span&gt; (unloadAllContent
== &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;true&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; content.Unload();&lt;br&gt;
&lt;br&gt;
&amp;nbsp; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;base&lt;/span&gt;.UnloadGraphicsContent(unloadAllContent);&lt;br&gt;
} &lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//
UnloadGraphicsContent(loadAllContent)&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;li&gt;
In case you load sound and music via the AudioEngine, you have to change the directory
to the content directory too, which will not be done automatically for you since you
load the .xct file directly in the AudioEngine constructor. Basically just exchange
the following code:&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt; audioEngine &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; AudioEngine(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"YourSound.xgs"&lt;/span&gt;);&lt;br&gt;
waveBank &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; WaveBank(audioEngine, &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Wave
Bank.xwb"&lt;/span&gt;);&lt;br&gt;
soundBank &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; SoundBank(audioEngine, &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Sound
Bank.xsb"&lt;/span&gt;);&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
with:&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt; audioEngine &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; AudioEngine(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Content\\YourSound.xgs"&lt;/span&gt;);&lt;br&gt;
waveBank &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; WaveBank(audioEngine, &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Content\\Wave
Bank.xwb"&lt;/span&gt;);&lt;br&gt;
soundBank &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; SoundBank(audioEngine, &lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Content\\Sound
Bank.xsb"&lt;/span&gt;);&lt;/span&gt;
&lt;/p&gt;
&amp;nbsp; &amp;nbsp;&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
In case you have used the &lt;b&gt;StorageDevice &lt;/b&gt;and specifically the &lt;b&gt;ShowStorageDeviceGuide &lt;/b&gt;helper
method, it is gone now in XNA 2.0. I had it in some helper classes, but never actually
used it. In case you want to show a save game dialog (or some network game select
dialog for example), please follow the XNA 2.0 help instructions to do this asynchronously
now.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
In case you use any &lt;b&gt;ResourceUsage &lt;/b&gt;enum, replace it with &lt;b&gt;TextureUsage &lt;/b&gt;instead
or remove it if the issue is not texture related. You can also safely remove any &lt;b&gt;ResourceManagementMode&lt;/b&gt;.&lt;b&gt;Automatic &lt;/b&gt;parameters,
which are not longer supported. Everything is now automatic anyway. Just if you have
been using &lt;b&gt;ResourceUsage&lt;/b&gt;.&lt;b&gt;RenderTarget &lt;/b&gt;you will need to change the &lt;b&gt;Texture2D &lt;/b&gt;class
to a &lt;b&gt;ResolveTexture2D&lt;/b&gt; class in order to archive the same behaviour as before.
Some calls to the device (e.g. &lt;b&gt;ResolveBackBuffer&lt;/b&gt;) have also changed and require
a &lt;b&gt;ResolveTexture2D &lt;/b&gt;now. You may also want to check if you have any manual texture
management or disposing, which you can remove or simplify.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
For simpler games (2D) games you should be done now. More complex games using render
targets and other features that have changed in XNA 2.0 will require some more changes,
but after you have done them once (or know where to change what) this is also a quick
process.&lt;/li&gt;&gt;
&lt;br&gt;
The following only applies to the &lt;b&gt;RocketCommanderXna&lt;/b&gt;, &lt;b&gt;XnaShooter &lt;/b&gt;and &lt;b&gt;XnaRacingGame &lt;/b&gt;engines,
but you might find similarities with other XNA games and the converting process:&lt;br&gt;
&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
First of all make sure the old XNA 1.1 code gets compileable by going though the changes
mentioned above (e.g. replacing &lt;b&gt;ResourceUsage &lt;/b&gt;with &lt;b&gt;TextureUsage &lt;/b&gt;or &lt;b&gt;BufferUsage&lt;/b&gt;)
and removing everything that does not exist anymore (like &lt;b&gt;ResourceManagementMode&lt;/b&gt;.&lt;b&gt;Automatic&lt;/b&gt;).
If a method is non-existent in XNA 2.0 like &lt;b&gt;ResolveRenderTarget&lt;/b&gt;, comment it
out and remember where it happened.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
You might go through other issues, but you have to come back to the RenderTarget issue.
This took the most time in the converting process for me (probably half of all my
issues come by something related to changes with &lt;b&gt;RenderTargets &lt;/b&gt;in XNA 2.0).
For that reason always make sure that rendering to textures still works while you
make changing. I always used the &lt;b&gt;TestCreateRenderToTexture &lt;/b&gt;unit test inside
the &lt;b&gt;RenderToTexture &lt;/b&gt;class to figure things out.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Additionally to making some changes in the &lt;b&gt;BaseGame &lt;/b&gt;class (loading content
via &lt;b&gt;LoadContent&lt;/b&gt;, using the &lt;b&gt;base.Content&lt;/b&gt; instead of creating a new content
manager, etc.) I also removed all the &lt;b&gt;RenderTarget &lt;/b&gt;helper methods and fields
from the BaseGame class (&lt;b&gt;SetRenderTarget&lt;/b&gt;, &lt;b&gt;ResetRenderTarget&lt;/b&gt;, etc.) and
moved them into the &lt;b&gt;RenderToTexture &lt;/b&gt;class. While this makes the code more clean
and restructured by making a few more fields private, if you do not call the new &lt;b&gt;InitializeDepthBufferFormatAndMultisampling &lt;/b&gt;of
the &lt;b&gt;RenderToTexture &lt;/b&gt;class the calls to &lt;b&gt;SetRenderTarget &lt;/b&gt;and &lt;b&gt;ResetRenderTarget &lt;/b&gt;will
not work correctly and will not restore the default depth buffer (which has to be
remembered first). If you get the following exception it means the &lt;b&gt;DepthBuffer
Device.DepthStencilBuffer&lt;/b&gt; was set to null, but is obviously still used. In order
to fix that make sure the &lt;b&gt;remDepthBuffer &lt;/b&gt;variable is set to a correct value
in the &lt;b&gt;InitializeDepthBufferFormatAndMultisampling &lt;/b&gt;method!&lt;br&gt;
&lt;/li&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;
&lt;br&gt;
An error has occurred during the Clear operation &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;while&lt;/span&gt; trying
to clear the depth or stencil buffer, no DepthStencilBuffer surface exists.&lt;br&gt;
System.InvalidOperationException: An error has occurred during the Clear operation &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;while&lt;/span&gt; trying
to clear the depth or stencil buffer, no DepthStencilBuffer surface exists.&lt;br&gt;
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(ClearOptions options, Color
color, Single depth, Int32 stencil, Rectangle[] regions)&lt;br&gt;
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(Color color)&lt;/span&gt;
&lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
&lt;li&gt;
4. Even if you have now done everything, the app may still crash when you are trying
to clear a render target (which usually happens at the start of each pre or post screen
shader). The reason for the following error is the multi sampling format, which might
be set to the background buffer, but not to the render targets:&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;
&lt;br&gt;
The active render target and depth stencil surface must have the same pixel size and
multisampling type.&lt;br&gt;
System.InvalidOperationException: The active render target and depth stencil surface
must have the same pixel size and multisampling type.&lt;br&gt;
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.VerifyDepthRenderTargetCompat()&lt;br&gt;
at Microsoft.Xna.Framework.Graphics.GraphicsDevice.Clear(ClearOptions options, Color
color, Single depth, Int32 stencil, Rectangle[] regions)&lt;/span&gt;
&lt;/p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;br&gt;
In order to get rid of this error without changing the &lt;b&gt;RenderToTexture &lt;/b&gt;class
a lot, you can just comment out the line where multi sampling is activated in &lt;b&gt;BaseGame&lt;/b&gt;:&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&lt;span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;//this.graphics.PreferMultiSampling
= true;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/li&gt;&gt;
There are probably even more things that I forgot while converting the projects (converted
8 games and about 15 projects in total now), but the above list should be helpful.
Especially for me because I always forget some of those little things and having this
checklist is very helpful.&lt;br&gt;
&lt;br&gt;
Tomorrow I will probably test all the XNA 2.0 games on my Xbox 360 and make some final
adjustments and then post them all on &lt;a href="http://XnaProjects.net"&gt;http://XnaProjects.net&lt;/a&gt; (and
here).&lt;br&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=7597edbd-a105-4d85-98a9-ced60522acf9" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,7597edbd-a105-4d85-98a9-ced60522acf9.aspx</comments>
      <category>All;Development;Game Development;Other;Programming;Racing Game;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=3d592154-492b-4b20-891a-da296f00e61b</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,3d592154-492b-4b20-891a-da296f00e61b.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,3d592154-492b-4b20-891a-da296f00e61b.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3d592154-492b-4b20-891a-da296f00e61b</wfw:commentRss>
      <slash:comments>10</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Yes. <a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779">My
XNA book</a> is finally out and some people even got an early version last week. There
is also some discussion going on in the XNA Forums and on the <a href="http://p2p.wrox.com/forum.asp?FORUM_ID=322">official
Wrox forum for the book</a>. 
<p></p>
The coolest thing yesterday that my book was on Rank #16 for Computer/Technical books
on Amazon.com and on Rank 500 something for all books. Quite impressive if you ask
me, hopefully it will continue to stay high and make me filthy rich .. just kidding. 
<p><a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"><img src="http://exdream.no-ip.info/blog/images/XnaBookSmall.jpg" border="0" /></a></p><p>
Yesterday I wanted to put all the samples from the book on my blog, but it is already
way to overloaded here with screenshots and games, adding another 10 games will not
make anything better. Instead I had a crazy idea to create a XNA Community site in
one day. It is called <a href="http://XnaProjects.net/">XnaProjects.Net</a>. The idea
is for everyone to submit their games and links. News are grabbed with <a href="http://blogsearch.google.com/">Google
Blog Search</a> and more features will come in July 2007 when I got more than 5 minutes
time in a row. 
</p><p>
Anyway, check out this great new website, submit your games and links and check out
whats already submitted by me (10 Games so far, yes, thats a lot of XNA games I did
in the past few months): 
</p><ul><li>
XNA Pong 
</li><li>
XNA Breakout 
</li><li>
XNA Tetris 
</li><li>
Rocket Commander XNA 
</li><li>
XNA Shooter 
</li><li>
XNA Racing Game 
</li><li>
SimpleRacingGame 
</li><li>
SpeedyRacer 
</li><li>
Dungeon Quest 
</li><li>
Skinning with Collada Models in XNA 
</li></ul>
You can find source code and game installers for all of these games, including some
nice screenshots and a YouTube video for each of them on the <a href="http://XnaProjects.net/">XnaProjects.Net</a> website.
Check it out:<br /><a href="http://XnaProjects.net/"><img src="http://exdream.no-ip.info/blog/content/binary/XnaProjectsNet.PNG" border="0" /></a><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=3d592154-492b-4b20-891a-da296f00e61b" /></body>
      <title>My XNA book is out and XnaProjects.Net launches</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,3d592154-492b-4b20-891a-da296f00e61b.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/05/04/MyXNABookIsOutAndXnaProjectsNetLaunches.aspx</link>
      <pubDate>Fri, 04 May 2007 13:29:43 GMT</pubDate>
      <description>Yes. &lt;a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"&gt;My XNA
book&lt;/a&gt; is finally out and some people even got an early version last week. There
is also some discussion going on in the XNA Forums and on the &lt;a href="http://p2p.wrox.com/forum.asp?FORUM_ID=322"&gt;official
Wrox forum for the book&lt;/a&gt;. 
&lt;p&gt;
&lt;/p&gt;
The coolest thing yesterday that my book was on Rank #16 for Computer/Technical books
on Amazon.com and on Rank 500 something for all books. Quite impressive if you ask
me, hopefully it will continue to stay high and make me filthy rich .. just kidding. 
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"&gt;&lt;img src="http://exdream.no-ip.info/blog/images/XnaBookSmall.jpg" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Yesterday I wanted to put all the samples from the book on my blog, but it is already
way to overloaded here with screenshots and games, adding another 10 games will not
make anything better. Instead I had a crazy idea to create a XNA Community site in
one day. It is called &lt;a href="http://XnaProjects.net/"&gt;XnaProjects.Net&lt;/a&gt;. The idea
is for everyone to submit their games and links. News are grabbed with &lt;a href="http://blogsearch.google.com/"&gt;Google
Blog Search&lt;/a&gt; and more features will come in July 2007 when I got more than 5 minutes
time in a row. 
&lt;/p&gt;
&lt;p&gt;
Anyway, check out this great new website, submit your games and links and check out
whats already submitted by me (10 Games so far, yes, thats a lot of XNA games I did
in the past few months): 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
XNA Pong 
&lt;/li&gt;
&lt;li&gt;
XNA Breakout 
&lt;/li&gt;
&lt;li&gt;
XNA Tetris 
&lt;/li&gt;
&lt;li&gt;
Rocket Commander XNA 
&lt;/li&gt;
&lt;li&gt;
XNA Shooter 
&lt;/li&gt;
&lt;li&gt;
XNA Racing Game 
&lt;/li&gt;
&lt;li&gt;
SimpleRacingGame 
&lt;/li&gt;
&lt;li&gt;
SpeedyRacer 
&lt;/li&gt;
&lt;li&gt;
Dungeon Quest 
&lt;/li&gt;
&lt;li&gt;
Skinning with Collada Models in XNA 
&lt;/li&gt;
&lt;/ul&gt;
You can find source code and game installers for all of these games, including some
nice screenshots and a YouTube video for each of them on the &lt;a href="http://XnaProjects.net/"&gt;XnaProjects.Net&lt;/a&gt; website.
Check it out:&lt;br&gt;
&lt;a href="http://XnaProjects.net/"&gt; &lt;img src="http://exdream.no-ip.info/blog/content/binary/XnaProjectsNet.PNG" border="0"&gt; &lt;/a&gt;&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=3d592154-492b-4b20-891a-da296f00e61b" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,3d592154-492b-4b20-891a-da296f00e61b.aspx</comments>
      <category>All;Development;Game Development;Other;Programming;Racing Game;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=999a41b7-8f24-4559-875f-706f1ca38e42</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,999a41b7-8f24-4559-875f-706f1ca38e42.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,999a41b7-8f24-4559-875f-706f1ca38e42.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=999a41b7-8f24-4559-875f-706f1ca38e42</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Sorry for not blogging yesterday. We were
working all day on our game here on the GDC 2007 and it was very noisy and distracting
here. If you want to watch us work: We are in the Moscone North Lobby and shouldn't
be hard to find. Anyway, I will probably just blog at the morning of the next day
for each day here. 
<p>
Our game is called <b>Dungeon Quest</b> and we are absolutely insane because we want
to create a Multiplayer Role Playing Game in just 4 days and we haven't even thought
of all the distractions here. I will try to give you a screen per day and tell you
want we have done so far. 
</p><p>
Yesterday we worked purely on the environment, the level and the general game idea
and some smaller details. As I said before we started with nothing, I just created
a new project and Christoph did just open up 3DS Max and started working, there are
no textures or models we have already done. And we both have never worked on a role
playing game before. 
</p><p>
In the morning we still had a lot of problems getting our computers up and running
(3DS Max wasn't starting, I needed lots of plugins and tools, stuff like that). It
usually takes a day or more to set up a development machine in our opinion. Probably
a week until you got all the important tools installed you forgot in the first day.
Anyway, we finally started to build the cave, create new custom collada exporter for
that and placed lights. While Christoph was working on the 3D cave I was getting the
engine up and running and noticed that there are many things that have to be done: 
</p><ul><li>
Like just rendering some text on the screen, 
</li><li>
Finding a good font for that, 
</li><li>
Creating a bitmap font, 
</li><li>
Also making other UI elements (selected monster, health, level up, etc.) 
</li><li>
Rendering shaders and playing around with point lights 
</li><li>
Working on many other smaller issues like effects, billboards, vertex formats, etc. 
</li><li>
Most unit tests require a good camera and testing the cave level itself was very hard,
so I already created the ThridPersonCamera class we going to use for this game. 
</li></ul>
I started with most classes that are required for that and I also could drop in some
Texture/Font code from Rocket Commander XNA, but most of the shader and collada import
classes had to be created from scratch. Then we spend all evening and even this morning
tweaking the shaders, getting all the lights working, adding fog, figuring out how
to do 6 complex light passes in one shader, and so on. 
<p>
Today we will focus on building the main character, getting some collision detection
working and some basic game logic (keys, doors, monster state machines, player behaviour
and animations). Hopefully I can provide you with a nicer screenshot tomorrow, just
an empty level is pretty boring. 
<br /><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_Game_Progress_Day1.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_Game_Progress_Day1small.jpg" border="0" /></a></p><p>
And here are some pictures from yesterday for your enjoyment.<br /><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_01.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_01small.jpg" border="0" /></a><br />
This is the lobby of the Moscone North building at the GDC. The GDC Expo hall is below
us and on Monday the Serious Games Summit was here, but we hadn't had any time to
even check out who is speaking at the actual GDC. At wednesday I will be at some Collada
round table speaking about Collada and issues we had with it so far ^^ 
</p><p><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_02.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_02small.jpg" border="0" /></a><br />
There are many art galleries here in San Francisco and the Asian population is also
huge. It was not hard to find an Asian Art Gallery. 
</p><p><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_03.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_03small.jpg" border="0" /></a><br />
Here you can see an ad for Microsoft's Vista Operating System directly in front of
the big Mac building here (seems a lot of people got one here). There is nothing interesting
about a Mac for a game developer IMO. 
</p><p><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_04.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_04small.jpg" border="0" /></a><br />
Alcatraz at day time. I already showed you a picture at night earlier. 
</p><p><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_05.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_05small.jpg" border="0" /></a><br />
A view from my desk at the Hotel over San Francisco. Its still impressive every day
you wake up ^^ 
</p><p><a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_06.jpg"><img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_06small.jpg" border="0" /></a><br />
And some picture of a place I don't know the name of. Usually I would look it up,
but I have to go back to work. Cya tomorrow!<img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=999a41b7-8f24-4559-875f-706f1ca38e42" /></p></body>
      <title>GDC 2007 - Dungeon Quest - Day 1</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,999a41b7-8f24-4559-875f-706f1ca38e42.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/03/06/GDC2007DungeonQuestDay1.aspx</link>
      <pubDate>Tue, 06 Mar 2007 23:14:02 GMT</pubDate>
      <description>Sorry for not blogging yesterday. We were working all day on our game here on the GDC 2007 and it was very noisy and distracting here. If you want to watch us work: We are in the Moscone North Lobby and shouldn't be hard to find. Anyway, I will probably just blog at the morning of the next day for each day here.
&lt;p&gt;
Our game is called &lt;b&gt;Dungeon Quest&lt;/b&gt; and we are absolutely insane because we want
to create a Multiplayer Role Playing Game in just 4 days and we haven't even thought
of all the distractions here. I will try to give you a screen per day and tell you
want we have done so far. 
&lt;p&gt;
Yesterday we worked purely on the environment, the level and the general game idea
and some smaller details. As I said before we started with nothing, I just created
a new project and Christoph did just open up 3DS Max and started working, there are
no textures or models we have already done. And we both have never worked on a role
playing game before. 
&lt;p&gt;
In the morning we still had a lot of problems getting our computers up and running
(3DS Max wasn't starting, I needed lots of plugins and tools, stuff like that). It
usually takes a day or more to set up a development machine in our opinion. Probably
a week until you got all the important tools installed you forgot in the first day.
Anyway, we finally started to build the cave, create new custom collada exporter for
that and placed lights. While Christoph was working on the 3D cave I was getting the
engine up and running and noticed that there are many things that have to be done: 
&lt;ul&gt;
&lt;li&gt;
Like just rendering some text on the screen, 
&lt;li&gt;
Finding a good font for that, 
&lt;li&gt;
Creating a bitmap font, 
&lt;li&gt;
Also making other UI elements (selected monster, health, level up, etc.) 
&lt;li&gt;
Rendering shaders and playing around with point lights 
&lt;li&gt;
Working on many other smaller issues like effects, billboards, vertex formats, etc. 
&lt;li&gt;
Most unit tests require a good camera and testing the cave level itself was very hard,
so I already created the ThridPersonCamera class we going to use for this game. 
&lt;/ul&gt;
I started with most classes that are required for that and I also could drop in some
Texture/Font code from Rocket Commander XNA, but most of the shader and collada import
classes had to be created from scratch. Then we spend all evening and even this morning
tweaking the shaders, getting all the lights working, adding fog, figuring out how
to do 6 complex light passes in one shader, and so on. 
&lt;p&gt;
Today we will focus on building the main character, getting some collision detection
working and some basic game logic (keys, doors, monster state machines, player behaviour
and animations). Hopefully I can provide you with a nicer screenshot tomorrow, just
an empty level is pretty boring. 
&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_Game_Progress_Day1.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_Game_Progress_Day1small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
And here are some pictures from yesterday for your enjoyment.&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_01.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_01small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
This is the lobby of the Moscone North building at the GDC. The GDC Expo hall is below
us and on Monday the Serious Games Summit was here, but we hadn't had any time to
even check out who is speaking at the actual GDC. At wednesday I will be at some Collada
round table speaking about Collada and issues we had with it so far ^^ 
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_02.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_02small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
There are many art galleries here in San Francisco and the Asian population is also
huge. It was not hard to find an Asian Art Gallery. 
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_03.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_03small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
Here you can see an ad for Microsoft's Vista Operating System directly in front of
the big Mac building here (seems a lot of people got one here). There is nothing interesting
about a Mac for a game developer IMO. 
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_04.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_04small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
Alcatraz at day time. I already showed you a picture at night earlier. 
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_05.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_05small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
A view from my desk at the Hotel over San Francisco. Its still impressive every day
you wake up ^^ 
&lt;p&gt;
&lt;a href="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_06.jpg"&gt;&lt;img src="http://exdream.no-ip.info/blog/content/binary/GDC2007_day1_06small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
And some picture of a place I don't know the name of. Usually I would look it up,
but I have to go back to work. Cya tomorrow!&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=999a41b7-8f24-4559-875f-706f1ca38e42" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,999a41b7-8f24-4559-875f-706f1ca38e42.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=2b9f62ce-fc9c-4696-8f7f-701903f8285b</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,2b9f62ce-fc9c-4696-8f7f-701903f8285b.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,2b9f62ce-fc9c-4696-8f7f-701903f8285b.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2b9f62ce-fc9c-4696-8f7f-701903f8285b</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Don't ask me how I managed to not post
anything this week. My plan was certainly different, but I didn't want to post my
problem with this little project too early. To make up with the lack of blog posts
this year until now this is going to be a very long and hopefully very useful article
:-) 
<p></p><h2>Content
</h2><ul><li><a href="#Downloads">Video, Screenshot and Downloads</a></li><li><a href="#Introduction">Introduction and why Collada?</a></li><li><a href="#ClassOverview">Class Overview</a></li><li><a href="#LoadingCollada">Loading collada files</a></li><li><a href="#AnimationData">Problems with the animation data</a></li><li><a href="#Optimizations1">Optimizing vertices</a></li><li><a href="#Optimizations2">Optimizing the Optimization</a></li><li><a href="#Shaders1">Adjusting the shaders for skinned meshes</a></li><li><a href="#Shaders2">Post screen shaders for the final result</a></li><li><a href="#References">References and Links</a></li></ul><p><br /><a name="Downloads"><h2>Video, Screenshot and Downloads
</h2></a>First of all, here is a video for the project I'm talking about here:<br /><a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/Oyd18KokT_o"></a><a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/Oyd18KokT_o"></a><a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/Oyd18KokT_o"></a><object height="350" width="425"><param name="movie" value="http://www.youtube.com/v/Oyd18KokT_o" /><embed src="http://www.youtube.com/v/Oyd18KokT_o" type="application/x-shockwave-flash" height="350" width="425"></embed></object></p><p>
Screenshot of the same scene (better quality since youtube videos just suck quality
wise):<br /><a href="images/TestGobilnColladaSceneScreenshot0009.jpg"><img src="images/TestGobilnColladaSceneScreenshot0009small.jpg" border="0" /></a></p><p>
Before you start reading this article I suggest you download the executable and source
code first in case you want to try it out directly while reading. The whole project
is based on the RocketCommanderXNA engine and just adds the ColladaModel.cs class,
which does all the amazing stuff you see in the video ;-) The video above shows shadowing
from the XNA Shooter engine, which is not yet released and their fore not included
in the downloads. The rest of the code is the same, just the shadow map rendering
was removed. More details about shadow mapping in XNA can also be found in my book
(plug plug plug ^^).<br /></p><ul><li>
The source code is about 2.6 MB and contains projects for XNA Game Studio Windows
and the Xbox platform, as well as a project for Visual Studio 2005. It was tested
on Windows XP and Vista 32 and 64 bit as well as on the Xbox 360.<br /><a href="SkinningWithColladaModelsInXnaSourceCode.zip">SkinningWithColladaModelsInXnaSourceCode.zip
(2.6 MB)</a></li><li>
The executable contains the output (32 bit Windows, but runs on 64 bit and Vista too)
from the project in case you just want to try it out or do not have <b>XNA Game Studio
Express</b> installed yet. You still need the <b>XNA Framework</b> for this program, <a href="http://www.microsoft.com/downloads/details.aspx?familyid=2E136A1F-F187-478C-9DA5-AAEB0904782B&amp;displaylang=en">download
it here</a>, if you do not have it installed yet! You also need a <b>Shader Model
2.0</b> capable graphic card.<br /><a href="SkinningWithColladaModelsInXnaExecuteable.zip">SkinningWithColladaModelsInXnaExecuteable.zip
(2.5 MB)<br /><br /></a>Update <b>2007-02-26</b>: Fixed time steps, in release mode with more than 200-300
fps the animation was getting too slow. Now works flawless :)<br /></li></ul>
Please note that the 3D Goblin Model was created by my friend Christoph Rienaecker
(WAII) and if you want to use it, please credit him (see Readme.txt). The source code
and collada loading class can be used freely too, but I want some credits too (at
least in the source code ^^). 
<p><br /><a name="Introduction"><h2>Introduction and why Collada?
</h2></a>OK, let's get started. I talked a lot about the XNA Content Pipeline and its problems
on my blog, and in several recent interviews and also in my upcoming XNA book. For
projects like Rocket Commander or even the Racing Game it was sometimes a little bit
annoying, but I could do everything I needed by loading X files and adding some features
to it to fix the tangents, load the correct shader techniques, etc.<br />
However XNA does not support loading animation data or gives you a way to display
them. You have to do all that work by yourself. This includes static mesh animations
(like it was used in Rocket Commander, I just left it out in Rocket Commander XNA),
but also skeletal animation with bones and skinned meshes. 
</p><p>
There is a nice project on CodePlex called <a href="http://www.codeplex.com/animationcomponents">XNA
Animation Component Library</a>, but it only support FBX and ASCII X files (and recently
BVH, ASF and AMC formats) and I could not get any of my test models to work with this
library. The main thing missing here is good shader support and it also has a lot
of problems with complex animated models. Other than that exporting 3D Models as X
files is really a pain in the ass, no matter which exporter you use (<a href="http://www.andytather.co.uk/Panda/directxmax.aspx">Panda
Exporter for 3dsMax</a> was good a year ago, I still use it, now <a href="http://www.mindcontrol.org/%7Ehplus/graphics/kwxport.html">kiloWatt
X file Exporter for 3dsMax</a> is better, and the Microsoft X File Exporter for Max
always sucked). Simple models might work, but the more complex 3D models get and the
more meshes and animation data is stored in a scene, the more problems you will have.
Sometimes it is not possible to reconstruct everything correctly on your importer
side. 
</p><p>
Anyway, at the very beginning of the Racing Game development there was no content
pipeline in XNA (it was Beta 1) and I implemented loading 3D Models with help of the
collada file format, which is basically just XML and very easy to read. For that reason
it was relatively simple to get some 3D data loaded and displayed in the early XNA
versions with help of vertex buffers. There were some problems with shader settings
and I had to try many different exporters and ended up with the one from <a href="http://www.feelingsoftware.com/content/view/16/30/">Feeling
Software</a>. Back then it had still some problems loading shaders and using the correct
techniques, but the recent version (3.0.2) is much better and works like a charm. 
</p><p>
After Microsoft had implemented the content pipeline and made it possible to load
X and FBX files indirectly by going over the content pipeline I had to remove most
of my collada code and re implement the model loading with the new framework. Loading
and displaying 3D models was much simpler this way and especially some early unit
tests were really simple, but as soon I tried shaders and loading tangents there were
a bunch of problems. I reported many bugs back then and it has gotten a lot better,
but I still had to fix several issues in the Racing Game and Rocket Commander XNA
myself like finding out the correct shader technique and fixing tangent data with
help of a custom model processor. 
</p><p>
Some things like the level loading in the Racing Game just do not work with X or FBX
files because they use splines, which are not exported at all in these formats. Collada
came as the rescue again because it is really no big problem for this format. Later
versions of the Racing Game removed the collada level loading and introduced a binary
format for the levels, but the importer still accepts collada files. 
</p><p>
Recently I wanted to test a couple of animated models and use skinning since it can
often be more useful than static animations and it usually looks much better, especially
for organic 3D models. As I said above I could not get anything working with the <a href="http://www.codeplex.com/animationcomponents">XNA
Animation Component Library</a> and I especially do not like the way they still use
the content pipeline and the project is too complicated for me anyway (I just do not
need 6 different file formats, I just want one and it should work perfectly with all
the features I need). 
</p><p>
After some searching I saw some guy called remi from the <a href="https://collada.org/public_forum/">collada
forum</a> was working on importing collada models too and I posted some thoughts there
too (maybe this was a mistake, I got many emails asking me about tips ^^). <a href="https://collada.org/public_forum/viewtopic.php?p=2373&amp;highlight=&amp;sid=f5b56a89076e08d6c4175db5490db4da#2373">Here
is the thread about that in the collada forum</a>. He has provided a test project
with some models and it works nice for static meshes without shader information, but
that was not really what I was searching for. 
</p><p>
This was a month ago and I had not much time working on any of these issues, but after
restarting my blog earlier this week I thought this would be a nice topic to talk
about. I'm still pretty busy with <a href="http://www.ArenaWars.net">Arena Wars Reloaded</a>,
but I worked a couple of hours every day on this little test program for the past
few days. The rest of this article explains the project and into which problems I
ran. 
<br /><a name="ClassOverview"><h2>Class Overview
</h2></a>Before we go into the details here is a little class overview of the project.
As I said before the Rocket Commander XNA engine was used to get up and running with
the project without having to re implement the basics. Most of the classes were already
in place and had not to be changed. ColladaModel and SkinnedTangentVertex are the
2 new classes and to help us out with the XML loading of the collada files the XmlHelper
class was also brought into the project. 
</p><p><a href="images/SkinningInColladaClassOverview.png"><img src="images/SkinningInColladaClassOverviewSmall.png" border="0" /></a></p><p>
I wrote the ColladaModel file from scratch, but I could reuse some of the static mesh
loading code I had done last year. All of the bone and animation loading code was
just try and error and I only used the <a href="http://www.khronos.org/files/collada_spec_1_4">collada
specifications</a> as a source of help, but most stuff had to be tested with the unit
tests at the end of the class many many times. 
</p><p>
The main program just calls the unit tests TestGoblinColladaModelScene or TestShowBones,
there is no real game here, its just a test program. The unit test then calls several
Standard Engine classes for doing all the post screen processing, rendering the ground
plane, etc. More importantly the ColladaModel class itself basically just provides
a constructor and a Render method, everything else is private and will be handled
automatically for you. Most people might ignore this, but this is always the most
important thing about my classes, the use should be as simple as possible and when
I look at the projects mentioned above I really ask myself why people sometimes think
so complicated. 
</p><p>
The internal Bone class inside ColladaModel is used to store all the bones in a flat
list, but each entry has a parent and a list old children bones. This way the list
can be used both in a simple for loop, but you can also go through it recursively
(which is obviously slower and often more complicated). We will talk about the loading
process in a minute. 
</p><p>
All the mesh data is stored in vertices, which is just a list of SkinnedTangentVertex
structs. The SkinnedTangentVertex struct is very much like the standard TangentVertex
struct used in Rocket Commander XNA, but it has 2 new members: blendIndices and blendWeights.
Both are in the form of Vector3 and their fore can hold 3 values allowing us to interpolate
up to 3 bone influences for each vertex in the shader. More is often not required
and we have to re normalize all bone weights anyway, so skipping the least important
bone weights is not a big deal. My test models use mostly max. 2-3 influences. Please
also note that the vertex shader has now a lot more work to do with all that skinning
and you should really optimize it as much as possible. Both the number of vertices
we have to process is important (we will talk about optimizing that in the optimizing
part of this article) and also the number of instructions the vertex shader has, both
numbers should be as low as possible. The GPU is really fast processing this data,
but if you do not have animated geometry with bones, there is no reason to let it
process all that data (which can make the vertex shader 2-3 times longer and slower).
The ground of our test scene does not use a skinning shader as an example. 
</p><p>
And finally there are some additions to the ShaderEffect class. First of all we got
a new shader called "SkinnedNormalMapping", which does the same thing as the normal
mapping (or parallax mapping) shader, but it has an array of 80 bone matrices we can
use for skinning. These matrices are set with help of the SetBoneMatrices method in
the Set Parameter region of ShaderEffect.cs. 
</p><p><br /><a name="LoadingCollada"><h2>Loading collada files
</h2></a></p><p>
Before we go into the details of the loading process, lets make sure we read the summary
of the class first because it clearly states what we can do and can't do with this
class. This is just a test project and I wanted to make things as simple as possible
for both you as the reader and for my requirements. 
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
&lt;summary&gt;</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
Collada model. Supports bones and animation for collada (.dae) exported</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
3D Models from 3D Studio Max (8 or 9).</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
This class is just for testing and it will only display one single mesh</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
with bone and skinning support, the mesh also can only have one single</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
material. Bones can be either in matrix mode or stored with transform</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
and rotation values. SkinnedTangentVertex is used to store the vertices.</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">   ///
&lt;/summary&gt;</span><br /><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">   class</span> ColladaModel
: IDisposable</span></p><p>
OK, with that said let's go directly into the loading code, which is located in the
constructor of this class. All variables used in these class are just for internal
use, all you need to know are the vertices and bone lists, which I have already mentioned,
and the vertex and index buffers, which are used for rendering. All the rest of the
variables are just there to help us loading the collada file (don't worry, there are
not many variables anyway and most methods are short too). 
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> Constructor<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Create a model from a collada file</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;param name="setName"&gt;Set name&lt;/param&gt;</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">public</span> ColladaModel(<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> setName)<br />
    {<br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Set name to identify this model and build the filename</span><br />
        name <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> setName;<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> filename <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> Path.Combine(ColladaDirectory,<br />
            StringHelper.ExtractFilename(name, <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">true</span>) <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span><span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"."</span><span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span><br />
            ColladaExtension);<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Load file</span><br />
        Stream file <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> File.OpenRead(filename);<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">string</span> colladaXml <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> StreamReader(file).ReadToEnd();<br />
        XmlNode colladaFile <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> XmlHelper.LoadXmlFromText(colladaXml);<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Load material (we only support one)</span><br />
        LoadMaterial(colladaFile);<br />
        <br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Load bones</span><br />
        LoadBones(colladaFile);<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Load mesh (vertices data, combine with bone weights)</span><br />
        LoadMesh(colladaFile);<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And finally load bone animation data</span><br />
        LoadAnimation(colladaFile);<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Close file, we are done.</span><br />
        file.Close();<br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
ColladaModel(setFilename)</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span></span><p><font face="Verdana" size="2">As you can see first of all the filename is constructed
and we just load the file as a text file and throw it to the XmlHelper.LoadXmlFromText
helper method (which just uses the existing XmlDocument functionality to load xml
from a string). We now get the main collada node, which contains all the children
nodes we need for loading the materials, bones, meshes, etc.</font></p><p><font face="Verdana" size="2">Next all the materials are loaded, but we are only going
to use the first one we find because we only support one single mesh anyway. The LoadMaterial
method goes through all used textures and shader effects from the collada file and
constructs the material at the end of the method with help of a new constructor in
the Material class itself. While this is cool and a lot easier than loading material
data from x files, it is not very exciting code, so let's move along.</font></p><p><font face="Verdana" size="2">Even through the bones are located at the end of the
collada file, we have to load them first because all our other loading methods, specifically
LoadMesh and LoadAnimation need the bone tree structure and the overall bone list
to work. All bones are loaded in sequential order because we want to make sure that
we can use the animation matrices later in an easy way without having to check the
parent order all the time. Only this way we can be sure that going through our flat
bones list we still respect the internal tree structure and always initialize the
parents first because the children bones matrices are always multiplied with the parent
bones.</font></p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">foreach</span> (XmlNode
boneNode <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">in</span> boneNodes)<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (boneNode.Name
== <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"node"</span> &amp;&amp;<br />
            (XmlHelper.GetXmlAttribute(boneNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"id"</span>).Contains(<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"Bone"</span>)
||<br />
            XmlHelper.GetXmlAttribute(boneNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"type"</span>).Contains(<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"JOINT"</span>)))<br />
        {<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
[...] get matrix</span><br />
            matrix <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> LoadColladaMatrix(...);<br /><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Create this node, use the current number of bones as number.</span><br />
            Bone newBone <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Bone(matrix,
parentBone, bones.Count,<br />
                XmlHelper.GetXmlAttribute(boneNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"sid"</span>));<br /><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Add to our global bones list</span><br />
            bones.Add(newBone);<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And to our parent, this way we have a tree and a flat list in</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
the bones list :)</span><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (parentBone
!<span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>)<br />
                parentBone.children.Add(newBone);<br /><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Create all children (will do nothing if there are no sub bones)</span><br />
            FillBoneNodes(newBone,
boneNode);<br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
foreach if (boneNode.Name)</span></span></p><p></p></span><a name="AnimationData">As you can see the code uses the XmlHelper class extensively
because otherwise the code would look much uglier and complex. Next we have to load
the mesh itself, this is probably the longest method and not easy to figure out if
you work with collada for the first time. Good thing I had already done that in the
past and I only had to add the code for getting the blend weights and indices.</a> The
following code does load all the weights, which we will use later to fill the blendWeights
and blendIndices members of the SkinnedTangentVertex struct vertices list. The code
for that is actually a little bit more complicated because we have to find out which
weights are the top 3 weights for each vertex in case more than 3 are given.
</p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><p><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> Load
weights<br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">float</span>[]
weights <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>;<br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">foreach</span> (XmlNode
sourceNode <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">in</span> skinNode)<br />
    {<br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Get all inv bone skin matrices</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (sourceNode.Name
== <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"source"</span> &amp;&amp;<br />
            XmlHelper.GetXmlAttribute(sourceNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"id"</span>).Contains(<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"bind_poses"</span>))<br />
        {<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Get inner float array</span><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">float</span>[]
mat <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> StringHelper.ConvertStringToFloatArray(<br />
                XmlHelper.GetChildNode(sourceNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"float_array"</span>).InnerText);<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> boneNum <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
boneNum &lt; bones.Count; boneNum++)<br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (mat.Length <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">/</span> 16
&gt; boneNum)<br />
                {<br />
                    bones[boneArrayOrder[boneNum]].invBoneSkinMatrix <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><br />
                        LoadColladaMatrix(mat,
boneNum <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 16);<br />
                } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for if</span><br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
if</span><br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Get all weights</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (sourceNode.Name
== <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"source"</span> &amp;&amp;<br />
            XmlHelper.GetXmlAttribute(sourceNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"id"</span>).Contains(<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"skin-weights"</span>))<br />
        {<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Get inner float array</span><br />
            weights <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> StringHelper.ConvertStringToFloatArray(<br />
                XmlHelper.GetChildNode(sourceNode, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"float_array"</span>).InnerText);<br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
if</span><br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
foreach</span><br /><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (weights
== <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>)<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">throw</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> InvalidOperationException(<br />
            <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"No
weights were found in our skin, unable to continue!"</span>);<br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span></p><p><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"><font color="#000000"><font face="Verdana" size="2">For
more information about the mesh loading please check out the last region in the LoadMesh
method, it should explain all the important steps in case you want to add something
there or just look how it works.</font></font></span></p></span><p></p><h2>Problems with the animation data
</h2><p>
Getting the animation data was not so easy. First of all I never had done this before
because my collada files for the Racing Game were all just static meshes and I really
did not need any animation there. Everything that is actually animated in the Racing
Game was done directly in XNA, not in 3D Studio.
</p><p>
The first problem is the many formats that animation data can be in. You can have
rotations around any axis or translations and even scalings, but most of your bones
will only use one or two of these if they are animated at all. Alternatively all the
animation data can be computed directly by the exporter plugin in 3D Studio Max and
this way you can make sure that all the animation data is in the correct format. It
makes testing certainly a lot harder and if you don't even know the format the matrices
are in or how to apply them to each other in which order, you are in a world of trouble.
</p><p>
This is exactly what happened to me, I had most of my test models with rotation animation
data only, but the Goblin above from my friend Christoph was done with another technique
and the exporter could only export the matrices, so I had to support that too. After
some try and error I managed to get the basic animations for my test models working.
They are all in the project, feel free to load and test them. To test the bone
animations I used the following unit test:
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> Unit
Testing<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Note: Allow calling all this even in release mode (see Program.cs)</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> TestShowBones<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
TestShowBones</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">public</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">static</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">void</span> TestShowBones()<br />
    {<br />
        ColladaModel model <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>;<br />
        PlaneRenderer groundPlane <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>;<br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Bone colors for displaying bone lines.</span><br />
        Color[] BoneColors <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Color[]<br />
            { Color.Blue,
Color.Red, Color.Yellow, Color.White, Color.Teal,<br />
            Color.RosyBrown,
Color.Orange, Color.Olive, Color.Maroon, Color.Lime,<br />
            Color.LightBlue,
Color.LightGreen, Color.Lavender, Color.Green,<br />
            Color.Firebrick,
Color.DarkKhaki, Color.BlueViolet, Color.Beige };<br /><br />
        TestGame.Start(<span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"TestLoadColladaModel"</span>,<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">delegate</span><br />
            {<br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Load our goblin here, you can also load one of my test models!</span><br />
                model <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> ColladaModel(<br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//"Goblin");</span><br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//"test_bones_simple_baked");</span><br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//"test_bones_advanced_baked");</span><br />
                    <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"test_man_baked"</span>);<br /><br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And load ground plane</span><br />
                groundPlane <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> PlaneRenderer(<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Vector3(0,
0, -0.001f),<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Plane(<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Vector3(0,
0, 1), 0),<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Material(<br />
                        <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"GroundStone"</span>, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"GroundStoneNormal"</span>, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"GroundStoneHeight"</span>),<br />
                    50);<br />
            },<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">delegate</span><br />
            {<br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Show ground</span><br />
                groundPlane.Render(ShaderEffect.parallaxMapping, <span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);">"DiffuseSpecular20"</span>);<br /><br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Show bones without rendering the model itself</span><br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (model.bones.Count
== 0)<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span>;<br /><br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Update bone animation.</span><br />
                model.UpdateAnimation(Matrix.Identity);<br /><br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Show bones (all endpoints)</span><br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">foreach</span> (Bone
bone <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">in</span> model.bones)<br />
                {<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">foreach</span> (Bone
childBone <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">in</span> bone.children)<br />
                        BaseGame.DrawLine(<br />
                            bone.finalMatrix.Translation,<br />
                            childBone.finalMatrix.Translation,<br />
                            BoneColors[bone.num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">%</span> BoneColors.Length]);<br />
                } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
foreach (bone)</span><br />
            });<br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
TestShowBones()</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span></span></p><p>
The most important call here is the call to UpdateAnimations, which goes through the
list of bones and updates the so called finalMatrix from the Bone class for each of
the bones. In earlier versions this code was horribly complicated and still had a
lot of problems, but as soon as I removed all the rotation, translation, scaling,
etc. animation support and just allow loading the correctly baked matrices from the
collada files, the code has become much simpler (the actual code does have some optimizations
in it, but it is basically the same as the posted code here):
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> Update
animation<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Update animation.</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">private</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">void</span> UpdateAnimation(Matrix
renderMatrix)<br />
    {<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> aniMatrixNum <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>)(BaseGame.TotalTime <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> frameRate)) <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">%</span> numOfAnimations;<br /><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">foreach</span> (Bone
bone <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">in</span> bones)<br />
        {<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Just assign the final matrix from the animation matrices.</span><br />
            bone.finalMatrix <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> bone.animationMatrices[aniMatrixNum];<br /><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Also use parent matrix if we got one</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
This will always work because all the bones are in order.</span><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (bone.parent
!<span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">null</span>)<br />
                bone.finalMatrix
*=<br />
                    bone.parent.finalMatrix;<br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
foreach</span><br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
UpdateAnimation()</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span></span></p><p>
For the loading itself we just have to make sure that the animationMatrices are the
correct ones. Collada saves them in a absolute mode. Earlier code from me constructed
relative matrices (relative to the initial bone matrix), it was easier to
construct relative matrices from the rotation, translation, etc. animation data, but
much harder to use these matrices later for the animation. Having these absolute
matrices makes the UpdateAnimation code so much easier, so make sure you always use
them this way.
</p><p>
However, when rendering the vertices later we can't use the absolute matrices because
the vertices have to transformed first to get into a relative space to the bones,
rotations should not be around the origin, but around the bone positions. Luckily
for us (and you should have seen my face when I finally found out that these matrices
already exist in collada and I did not have to create them myself in my own over complicated
way ^^) collada stores the so called invBoneSkin matrices for each bone. By applying
these matrices we can easily get the bone matrices we need for rendering, these are
directly passed to our shader (as compressed 4x3 matrices BTW to save shader constants,
the code for that is a little bit more complex, please check out ShaderEffect.cs and
the SkinnedNormalMapping.fx shader itself for details).
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> GetBoneMatrices<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Get bone matrices for the shader. We have to apply the invBoneSkinMatrix</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
to each final matrix, which is the recursively created matrix from</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
all the animation data (see UpdateAnimation).</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;returns&gt;&lt;/returns&gt;</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">private</span> Matrix[]
GetBoneMatrices(Matrix renderMatrix)<br />
    {<br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Update the animation data in case it is not up to date anymore.</span><br />
        UpdateAnimation(renderMatrix);<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And get all bone matrices, we support max. 80 (see shader).</span><br />
        Matrix[] matrices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> Matrix[Math.Min(80,
bones.Count)];<br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
num &lt; matrices.Length; num++)<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
The matrices are constructed from the invBoneSkinMatrix and</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
the finalMatrix, which holds the recursively added animation matrices</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
and finally we add the render matrix too here.</span><br />
            matrices[num] <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><br />
                bones[num].invBoneSkinMatrix <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> bones[num].finalMatrix <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> renderMatrix;<br /><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> matrices;<br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
GetBoneMatrices()</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span><br /></span></p><p>
And this is what you finally get after executing the TestShowBones unit test. I had
not implemented mesh loading or the shader itself at this point. I just was loading
and testing the bones itself.
</p><a href="images/TestShowBones_TestMan.jpg"><img src="images/TestShowBones_TestManSmall.jpg" border="0" /></a><p>
 
</p><a name="Optimizations1"><h2>Optimizing the vertices
</h2><p>
One major problem with the loaded mesh is the high vertices count, I had two test
models with 30k and 60k vertices and as you can imagine this will slow down the vertex
shader quite a lot and it is really not necessary to process all these vertices because
many of them are exactly the same. The reason we end up with an unoptimized vertices
list anyway is because collada stores seperate lists for each component we have to
put together at the end of the LoadMesh method. By doing so we have to duplicate the
data many times and we just can't know how often each part is reused and how often
the overall vertex changes. If just the texture coordinate or normal differs, we have
a completely different vertex, which will produce different results in the vertex
shader, so just merging everything together is not that simple.
</p><p>
The rendering uses an index buffer anway, but for the data constructed in LoadMesh
it would just be sequential (0, 1, 2 form the first polygon, 3, 4, 5 the next, etc.).
Instead of having one index for each vertex, we can often reuse the same vertex 3
or 4 times and reducing the number of vertices drastically. This has also the advantage
that we can store much more vertices and complexer meshes even if we still use ushort
(16 bit) for our indices (which is half the size of ints and their fore faster). For
example if you have 150,000 vertices, but you can reduce them to 40-50,000 optimized
vertices, they all can be indexed with ushorts :-)
</p><p>
The easy solution is just to optimize all the vertices after all of them have been
loaded, if you have a binary format and do not use collada directly, this solution
is absolutely great, but it still will take a lot of time processing the collada models
if they just have many vertices because we have to check each vertex against each
other one and that can be a lot of compares if you have 60 or 70 thousand vertices
in a mesh. It actually takes up to a whole minute just to compute that and I have
no slow computer ^^ Here is the method that does all that for us:
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> OptimizeVertexBufferSlow<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Optimize vertex buffer. Note: The vertices list array will be changed</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
and shorted quite a lot here. We are also going to create the indices</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
for the index buffer here (we don't have them yet, they are just</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
sequential from the loading process above).</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">/// </span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Note: Slow version because we have to check each vertex against</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
each other vertex, which makes this method exponentially slower</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
the more vertices we have. Takes 10 seconds for 30k vertices,</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
and over 40 seconds for 60k vertices. It is much easier to understand,</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
but it produces the same output as the fast OptimizeVertexBuffer</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
method and you should always use that one (it only requires a couple</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
of miliseconds instead of the many seconds this method will spend).</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;returns&gt;ushort array for the optimized indices&lt;/returns&gt;</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">private</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>[]
OptimizeVertexBufferSlow()<br />
    {<br />
        List&lt;SkinnedTangentVertex&gt; newVertices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;SkinnedTangentVertex&gt;();<br />
        List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>&gt;
newIndices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>&gt;();<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Go over all vertices (indices are currently 1:1 with the vertices)</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
num &lt; vertices.Count; num++)<br />
        {<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Try to find already existing vertex in newVertices list that</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
matches the vertex of the current index.</span><br />
            SkinnedTangentVertex
currentVertex <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> vertices[FlipIndexOrder(num)];<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">bool</span> reusedExistingVertex <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">false</span>;<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> checkNum <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
checkNum &lt; newVertices.Count; checkNum++)<br />
            {<br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (SkinnedTangentVertex.NearlyEquals(<br />
                    currentVertex,
newVertices[checkNum]))<br />
                {<br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Reuse the existing vertex, don't add it again, just</span><br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
add another index for it!</span><br />
                    newIndices.Add((<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>)checkNum);<br />
                    reusedExistingVertex <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">true</span>;<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">break</span>;<br />
                } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
if (TangentVertex.NearlyEquals)</span><br />
            } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for (checkNum)</span><br /><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (reusedExistingVertex
== <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">false</span>)<br />
            {<br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Add the currentVertex and set it as the current index</span><br />
                newIndices.Add((<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>)newVertices.Count);<br />
                newVertices.Add(currentVertex);<br />
            } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
if (reusedExistingVertex)</span><br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for (num)</span><br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Reassign the vertices, we might have deleted some duplicates!</span><br />
        vertices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> newVertices;<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And return index list for the caller</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> newIndices.ToArray();<br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
OptimizeVertexBufferSlow()</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span></span></p><p>
 
</p></a><h2>Optimizing the Optimization
</h2><p>
While this is all nice and dandy and we just optimized the rendering code by 20-30%
(I tested with 9 goblins and using 3 passes for them, 2 for shadowing and 1 for the
rendering), but the loading now takes painfully long. The main idea here is to not
compare every single vertex against every other possible vertex because it does not
make much sense, most of the vertices (&gt;99,9%) will always be different. We only
need to check the ones that share at least the same position.
</p><p>
I started with comparing neighboring vertices, but since the vertices are stored in
index order, they are totally messed up, vertex 1 and 4383 can be equal, but if we
just check -10 to +10 we are going to miss it. Instead we have to know which vertices
come from the same position data, which we know since collada saves unique positions.
All we have to do is to keep a list of all vertices that share the same position and
then we can optimize the comparsions later on. Usually only up to 4 to 6 vertices
share the same position, this way the whole comparison process just needs 60,000 *
6 comparisons, not 60,000*60,000 anymore.
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Initialize reuseVertexPositions and reverseReuseVertexPositions</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
to make it easier to use them below</span><br />
    reuseVertexPositions <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>[trianglecount <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 3];<br />
    reverseReuseVertexPositions <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>&gt;[positions.Count <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">/</span> 3];<br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> i <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
i &lt; reverseReuseVertexPositions.Length; i++)<br />
        reverseReuseVertexPositions[i] <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>&gt;();<br /><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
We have to use int indices here because we often have models</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
with more than 64k triangles (even if that gets optimized later).</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> i <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
i &lt; trianglecount <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 3;
i++)<br />
    {<br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
[...] vertex construction</span></span></p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Remember pos for optimizing the vertices later more easily.</span><br />
        reuseVertexPositions[i] <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> pos <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">/</span> 3;<br />
        reverseReuseVertexPositions[pos <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">/</span> 3].Add(i);<br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for (ushort)</span></span></p><p>
And then finally the fast vesion of OptimizeVertexBuffer, which uses that data:
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#region</span> OptimizeVertexBuffer<br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Optimize vertex buffer. Note: The vertices list array will be changed</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
and shorted quite a lot here. We are also going to create the indices</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
for the index buffer here (we don't have them yet, they are just</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
sequential from the loading process above).</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">/// </span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
Note: This method is highly optimized for speed, it performs</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
hundred of times faster than OptimizeVertexBufferSlow, see below!</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;/summary&gt;</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">///
&lt;returns&gt;ushort array for the optimized indices&lt;/returns&gt;</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">private</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>[]
OptimizeVertexBuffer()<br />
    {<br />
        List&lt;SkinnedTangentVertex&gt; newVertices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;SkinnedTangentVertex&gt;();<br />
        List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>&gt;
newIndices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>&gt;();<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Helper to only search already added newVertices and for checking the</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
old position indices by transforming them into newVertices indices.</span><br />
        List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>&gt;
newVerticesPositions <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">new</span> List&lt;<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span>&gt;();<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Go over all vertices (indices are currently 1:1 with the vertices)</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
num &lt; vertices.Count; num++)<br />
        {<br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Get current vertex</span><br />
            SkinnedTangentVertex
currentVertex <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> vertices[num];<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">bool</span> reusedExistingVertex <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">false</span>;<br /><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Find out which position index was used, then we can compare</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
all other vertices that share this position. They will not</span><br />
            <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
all be equal, but some of them can be merged.</span><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> sharedPos <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> reuseVertexPositions[num];<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">foreach</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> otherVertexIndex <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">in</span> reverseReuseVertexPositions[sharedPos])<br />
            {<br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Only check the indices that have already been added!</span><br />
                <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (otherVertexIndex
!<span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> num
&amp;&amp;<br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Make sure we already are that far in our new index list</span><br />
                    otherVertexIndex
&lt; newIndices.Count &amp;&amp;<br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And make sure this index has been added to newVertices yet!</span><br />
                    newIndices[otherVertexIndex]
&lt; newVertices.Count &amp;&amp;<br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Then finally compare vertices (this call is slow, but thanks to</span><br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
all the other optimizations we don't have to call it that often)</span><br />
                    SkinnedTangentVertex.NearlyEquals(<br />
                    currentVertex,
newVertices[newIndices[otherVertexIndex]]))<br />
                {<br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Reuse the existing vertex, don't add it again, just</span><br />
                    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
add another index for it!</span><br />
                    newIndices.Add((<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>)newIndices[otherVertexIndex]);<br />
                    reusedExistingVertex <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">true</span>;<br />
                    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">break</span>;<br />
                } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
if (TangentVertex.NearlyEquals)</span><br />
            } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
foreach (otherVertexIndex)</span><br /><br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">if</span> (reusedExistingVertex
== <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">false</span>)<br />
            {<br />
                <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Add the currentVertex and set it as the current index</span><br />
                newIndices.Add((<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span>)newVertices.Count);<br />
                newVertices.Add(currentVertex);<br />
            } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
if (reusedExistingVertex)</span><br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for (num)</span><br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Finally flip order of all triangles to allow us rendering</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
with CullCounterClockwiseFace (default for XNA) because all the data</span><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
is in CullClockwiseFace format right now!</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">for</span> (<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">int</span> num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> 0;
num &lt; newIndices.Count <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">/</span> 3;
num++)<br />
        {<br />
            <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">ushort</span> swap <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> newIndices[num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 3 <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span> 1];<br />
            newIndices[num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 3 <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span> 1] <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> newIndices[num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 3 <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span> 2];<br />
            newIndices[num <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> 3 <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span> 2] <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> swap;<br />
        } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for</span><br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Reassign the vertices, we might have deleted some duplicates!</span><br />
        vertices <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> newVertices;<br /><br />
        <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
And return index list for the caller</span><br />
        <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> newIndices.ToArray();<br />
    } <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
OptimizeVertexBuffer()</span><br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">#endregion</span><br /></span></p><p>
With this optimization loading is now pretty fast and rendering performs also nicely
thanks to the quick shaders we will discuss below. When running ANTS Profiler over
the new project the slowest line of code becomes the actual text parsing, actually
the conversion of the long strings for all vertices data into the actual vertices
float data, especially the positions array. But we can't do anything about that without
loading the data binary and not parsing them ourselfs. It takes maybe half a second
for a 50k vertices model to load, not great, but ok for our little test app.<br /></p><p><a name="Shaders1"><h2>Adjusting the shaders for skinned meshes
</h2></a></p><p>
Now we got a bunch of vertices we can render, but as you know we need a shader to
do anything in XNA, there is no fixed function pipeline. There are also no animation
helper classes like in DirectX, but they won't help you anyway if you want to render
with shaders. Transforming the vertices on the CPU may sometimes be a choice if you
do not have many vertices and not many skinned models overall or if they all have
to be updated the same way. But generally it is a much better idea to transform
all the vertices on the GPU, which costs a little bit more instructions in the vertex
shader, but the rest of the rendering stays the same. Most graphic apps are pixel
shader bound anyway and I use fairly complex pixel shaders too. Additionally on Shader
Model 4.0 cards like the GeForce 8800 with up to 128 parallel unified shader
units you can do very complex vertex shaders and use simpler pixel shaders and it
will just use more units for the vertex shaders automatically :) 
</p><p>
We already have defined the bones matrix array for skinning above and we limited it
to 80 bones per mesh, which is quite a lot. Even if you would spend 3 bones per finger
and 20-30 bones for the body you would still have plenty of bones left for complex
animations. Sure modelers will now say "thats not enough sometimes" ... well, you
can always split up the mesh into several meshes with up to 80 bones each if you really
need more. My graphic artists are happy with 80 bones ^^ 
</p><p>
If we want full Shader Model 2.0 support we can only be sure that we got at least
256 shader constants. NVidia has usually more (1024), but you still want your game
to run on ATI cards too, especially older ones. Each constant can hold a float4 and
we need 4 constants for each 4x4 matrix. This means we can only have up to 64 matrices
with this limit and we still need some constants for the world, view, and projection
matrices, the light and material values and anything else we want to do in our shader.
You should reserve 10-20 constants for that and now we are down to less than 60 matrices,
which might sometimes be too little.
</p><p>
Instead of splitting the mesh or providing a different code path in case the GPU can
do more constants (I couldn't get that do work in XNA for some reason, not sure if
there is some limit or if I made a mistake, my GPU should be able to do at least 1024
constants, and even 2048 for the 8800), there is a trick to save only a 3x4 matrix.
The last colum is always 0, 0, 0, 1 if we have correctly applied the invBoneMatrix
and the animation matrix (see GetBoneMatrices in ColladaModel for details and the
order of the matrices). But saving 4 float3 values still needs 4 shader constants
per matrix so we have to save it as 4x3 matrices instead.
</p><p>
My first idea was to grab the .w values and reconstruct the translation part of the
matrix this way. This worked, but the resulting shader had 80 instructions (from abount
20 without skinning), which is not good for the resulting performance when rendering
many skinned 3D models.<br /></p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">float4x4
RebuildSkinMatrix(<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">float</span> index)<br />
{<br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> float4x4(<br />
        float4(skinnedMatricesVS20[index*3+0].xyz,
0),<br />
        float4(skinnedMatricesVS20[index*3+1].xyz,
0),<br />
        float4(skinnedMatricesVS20[index*3+2].xyz,
0),<br />
        float4(<br />
            skinnedMatricesVS20[index*3+0].w,<br />
            skinnedMatricesVS20[index*3+1].w,<br />
            skinnedMatricesVS20[index*3+2].w,
1));<br />
} <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
RebuildSkinMatrix(.)</span></span></p><p>
A better idea is to use the 4x3 matrix as a 3x4 matrix by just reversing the
order we call mul. This involves some changes to the vertex shader code and looks
a little bit confusing sometimes, but if you make sure you transform the world matrix
the same way and use it in this reversed mul order too, everything works just fine.
Another thing that can be optimized is to pre-multiply the indices of blendIndices
for each vertex at the loading time. These indices never change and they don't really
care if they are 0, 1, 2 or 0, 3, 6, etc. We save one instruction per matrix
we are going to reconstruct (the rest is optimized out by the compiler). This is the
much easier version of RebuildSkinMatrix, for more details take a look at the SkinnedNormalMapping.fx
file:
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Note: This returns a transposed matrix, use it in reversed order.</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
First tests used a 3x3 matrix +3 w values for the transpose values, but</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
reconstructing this in the shader costs 20+ extra instructions and after</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
some testing I found out this is finally the best way to use 4x3 matrices</span><br /><span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
for skinning :)</span><br />
float4x4 RebuildSkinMatrix(<span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">float</span> index)<br />
{<br />
    <span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;">return</span> float4x4(<br />
        skinnedMatricesVS20[index+0],<br />
        skinnedMatricesVS20[index+1],<br />
        skinnedMatricesVS20[index+2],<br />
        float4(0, 0, 0, 1));<br />
} <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
RebuildSkinMatrix(.)</span><br /></span></p><p><font color="#000000">This results in a vertex shader that has almost half as many
instructions as before and their fore is twice as fast :) Good work. Performance tests
showed that I could increase the framerate from 220 fps to 270 fps just by doing that
(test scene with 9 goblins). The following code is actually more or less the only
part you have to replace in an existing shader if you want to make it skinnable (plus
providing the helper method and the skinned matrices too of course).</font></p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
First transform position with bones that affect this vertex</span><br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Use the 3 indices and blend weights we have precalculated.</span><br />
    float4x4 skinMatrix <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span><br />
        RebuildSkinMatrix(In.blendIndices.x) <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> In.blendWeights.x <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span><br />
        RebuildSkinMatrix(In.blendIndices.y) <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> In.blendWeights.y <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">+</span><br />
        RebuildSkinMatrix(In.blendIndices.z) <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">*</span> In.blendWeights.z;<br />
    <br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Calculate local world matrix with help of the skinning matrix</span><br />
    float4x4 localWorld <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> mul(world,
skinMatrix);<br />
    <br />
    <span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;">//
Now calculate final screen position with world and viewProj matrices.</span><br />
    float4 worldPos <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> mul(localWorld,
float4(In.pos, 1));<br />
    Out.pos <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> mul(worldPos,
viewProj);</span></p><p><font color="#000000"></font> 
</p><a name="Shaders2"><h2>Post screen shaders for the final result
</h2></a><p>
All the skinning code and bone transformations are nice once you get them done, but
without a cool model and some post screen shaders to make the scene look more cool,
it is only half the fun. Good think I got the Goblin 3D Model, thanks to Christoph
(WAII) again. I also had a couple of other test models and another more complex 3D
Model (big evil monster ^^) which was good for some stress testing, but the material
just did not look that cool. 
</p><p>
As you can see on the following image 6 render targets are used to accomplish the
final image. Most shader passes do several things at once and the list of operations
(see right side of the image) is longer than the list of used passes. Most of
this was just trying to get the best looking values together quickly. If you
are an experienced artist you can probably do much better than me, I'm just playing
around with the shader parameters until I get bored and then I leave it the way it
is. The sceneMap (render target nummero three) shows the unmodified scene without
applying the post screen shaders. It does not look half as cool as the final result.
</p><a href="images/TestGoblinScenePostScreenPasses.jpg"><img src="images/TestGoblinScenePostScreenPassesSmall.jpg" border="0" /></a><p></p><p><a name="References">I hope you enjoyed this article and that you are not as tired
as I am writing this all at once (uff). It was a fun project, I have already another
one in mind for next week ;-) Take care.</a> If you have problems, post a comment.
Please note that not all collada models will work, you have to follow the rules of
ColladaModel or improve the class a bit for other use
</p><p>
 
</p><h2>References and Links
</h2><ul><li><a href="SkinningWithColladaModelsInXnaSourceCode.zip">SkinningWithColladaModelsInXnaSourceCode.zip
(2.6 MB) from this article</a></li><li><a href="SkinningWithColladaModelsInXnaExecuteable.zip">SkinningWithColladaModelsInXnaExecuteable.zip
(2.5 MB) from this article</a></li><li><a href="http://www.codeplex.com/animationcomponents">XNA Animation Component Library</a></li><li><a href="http://www.andytather.co.uk/Panda/directxmax.aspx">Panda Exporter for 3dsMax</a></li><li><a href="http://www.mindcontrol.org/%7Ehplus/graphics/kwxport.html">kiloWatt X file
Exporter for 3dsMax</a></li><li><a href="http://www.khronos.org/collada/">Official Collada site from the Khronos Group</a></li><li><a href="http://www.feelingsoftware.com/content/view/16/30/">Feeling Software Collada
Plugins for 3dsMax and Maya, best exporters ever!</a></li><li><a href="https://collada.org/public_forum/">Public Forum of Collada.org</a></li><li><a href="http://en.wikipedia.org/wiki/COLLADA">Wikipedia on Collada</a></li><li><a href="https://collada.org/public_forum/viewtopic.php?p=2373&amp;highlight=&amp;sid=f5b56a89076e08d6c4175db5490db4da#2373">Collada
Forum post about remi's Collada for XNA project</a></li><li><a href="http://www.khronos.org/files/collada_spec_1_4">COLLADA 1.4.1 Specification
(PDF)</a></li></ul><p>
 
</p><p><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"></span> 
</p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=2b9f62ce-fc9c-4696-8f7f-701903f8285b" /></body>
      <title>Skeletal Bone Animation and Skinning with Collada Models in XNA</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,2b9f62ce-fc9c-4696-8f7f-701903f8285b.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2007/02/25/SkeletalBoneAnimationAndSkinningWithColladaModelsInXNA.aspx</link>
      <pubDate>Sun, 25 Feb 2007 21:39:45 GMT</pubDate>
      <description>Don't ask me how I managed to not post anything this week. My plan was certainly different, but I didn't want to post my problem with this little project too early. To make up with the lack of blog posts this year until now this is going to be a very long and hopefully very useful article :-) 
&lt;p&gt;
&lt;/p&gt;
&lt;h2&gt;Content
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#Downloads"&gt;Video, Screenshot and Downloads&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Introduction"&gt;Introduction and why Collada?&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#ClassOverview"&gt;Class Overview&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#LoadingCollada"&gt;Loading collada files&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#AnimationData"&gt;Problems with the animation data&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Optimizations1"&gt;Optimizing vertices&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Optimizations2"&gt;Optimizing the Optimization&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Shaders1"&gt;Adjusting the shaders for skinned meshes&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Shaders2"&gt;Post screen shaders for the final result&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#References"&gt;References and Links&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br&gt;
&lt;a name="Downloads"&gt; 
&lt;h2&gt;Video, Screenshot and Downloads
&lt;/h2&gt;
&lt;/a&gt;First of all, here is a video for the project I'm talking about here:&lt;br&gt;
&lt;a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/Oyd18KokT_o"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/Oyd18KokT_o"&gt;&lt;/a&gt;&lt;a style="left: 0px ! important; top: 0px ! important;" class="abp-objtab visible ontop" href="http://www.youtube.com/v/Oyd18KokT_o"&gt;&lt;/a&gt;
&lt;object height="350" width="425"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/Oyd18KokT_o"&gt;
&lt;embed src="http://www.youtube.com/v/Oyd18KokT_o" type="application/x-shockwave-flash" height="350" width="425"&gt;
&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;
Screenshot of the same scene (better quality since youtube videos just suck quality
wise):&lt;br&gt;
&lt;a href="images/TestGobilnColladaSceneScreenshot0009.jpg"&gt;&lt;img src="images/TestGobilnColladaSceneScreenshot0009small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Before you start reading this article I suggest you download the executable and source
code first in case you want to try it out directly while reading. The whole project
is based on the RocketCommanderXNA engine and just adds the ColladaModel.cs class,
which does all the amazing stuff you see in the video ;-) The video above shows shadowing
from the XNA Shooter engine, which is not yet released and their fore not included
in the downloads. The rest of the code is the same, just the shadow map rendering
was removed. More details about shadow mapping in XNA can also be found in my book
(plug plug plug ^^).&lt;br&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The source code is about 2.6 MB and contains projects for XNA Game Studio Windows
and the Xbox platform, as well as a project for Visual Studio 2005. It was tested
on Windows XP and Vista 32 and 64 bit as well as on the Xbox 360.&lt;br&gt;
&lt;a href="SkinningWithColladaModelsInXnaSourceCode.zip"&gt;SkinningWithColladaModelsInXnaSourceCode.zip
(2.6 MB)&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
The executable contains the output (32 bit Windows, but runs on 64 bit and Vista too)
from the project in case you just want to try it out or do not have &lt;b&gt;XNA Game Studio
Express&lt;/b&gt; installed yet. You still need the &lt;b&gt;XNA Framework&lt;/b&gt; for this program, &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=2E136A1F-F187-478C-9DA5-AAEB0904782B&amp;amp;displaylang=en"&gt;download
it here&lt;/a&gt;, if you do not have it installed yet! You also need a &lt;b&gt;Shader Model
2.0&lt;/b&gt; capable graphic card.&lt;br&gt;
&lt;a href="SkinningWithColladaModelsInXnaExecuteable.zip"&gt;SkinningWithColladaModelsInXnaExecuteable.zip
(2.5 MB)&lt;br&gt;
&lt;br&gt;
&lt;/a&gt;Update &lt;b&gt;2007-02-26&lt;/b&gt;: Fixed time steps, in release mode with more than 200-300
fps the animation was getting too slow. Now works flawless :)&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
Please note that the 3D Goblin Model was created by my friend Christoph Rienaecker
(WAII) and if you want to use it, please credit him (see Readme.txt). The source code
and collada loading class can be used freely too, but I want some credits too (at
least in the source code ^^). 
&lt;p&gt;
&lt;br&gt;
&lt;a name="Introduction"&gt; 
&lt;h2&gt;Introduction and why Collada?
&lt;/h2&gt;
&lt;/a&gt;OK, let's get started. I talked a lot about the XNA Content Pipeline and its problems
on my blog, and in several recent interviews and also in my upcoming XNA book. For
projects like Rocket Commander or even the Racing Game it was sometimes a little bit
annoying, but I could do everything I needed by loading X files and adding some features
to it to fix the tangents, load the correct shader techniques, etc.&lt;br&gt;
However XNA does not support loading animation data or gives you a way to display
them. You have to do all that work by yourself. This includes static mesh animations
(like it was used in Rocket Commander, I just left it out in Rocket Commander XNA),
but also skeletal animation with bones and skinned meshes. 
&lt;/p&gt;
&lt;p&gt;
There is a nice project on CodePlex called &lt;a href="http://www.codeplex.com/animationcomponents"&gt;XNA
Animation Component Library&lt;/a&gt;, but it only support FBX and ASCII X files (and recently
BVH, ASF and AMC formats) and I could not get any of my test models to work with this
library. The main thing missing here is good shader support and it also has a lot
of problems with complex animated models. Other than that exporting 3D Models as X
files is really a pain in the ass, no matter which exporter you use (&lt;a href="http://www.andytather.co.uk/Panda/directxmax.aspx"&gt;Panda
Exporter for 3dsMax&lt;/a&gt; was good a year ago, I still use it, now &lt;a href="http://www.mindcontrol.org/%7Ehplus/graphics/kwxport.html"&gt;kiloWatt
X file Exporter for 3dsMax&lt;/a&gt; is better, and the Microsoft X File Exporter for Max
always sucked). Simple models might work, but the more complex 3D models get and the
more meshes and animation data is stored in a scene, the more problems you will have.
Sometimes it is not possible to reconstruct everything correctly on your importer
side. 
&lt;/p&gt;
&lt;p&gt;
Anyway, at the very beginning of the Racing Game development there was no content
pipeline in XNA (it was Beta 1) and I implemented loading 3D Models with help of the
collada file format, which is basically just XML and very easy to read. For that reason
it was relatively simple to get some 3D data loaded and displayed in the early XNA
versions with help of vertex buffers. There were some problems with shader settings
and I had to try many different exporters and ended up with the one from &lt;a href="http://www.feelingsoftware.com/content/view/16/30/"&gt;Feeling
Software&lt;/a&gt;. Back then it had still some problems loading shaders and using the correct
techniques, but the recent version (3.0.2) is much better and works like a charm. 
&lt;/p&gt;
&lt;p&gt;
After Microsoft had implemented the content pipeline and made it possible to load
X and FBX files indirectly by going over the content pipeline I had to remove most
of my collada code and re implement the model loading with the new framework. Loading
and displaying 3D models was much simpler this way and especially some early unit
tests were really simple, but as soon I tried shaders and loading tangents there were
a bunch of problems. I reported many bugs back then and it has gotten a lot better,
but I still had to fix several issues in the Racing Game and Rocket Commander XNA
myself like finding out the correct shader technique and fixing tangent data with
help of a custom model processor. 
&lt;/p&gt;
&lt;p&gt;
Some things like the level loading in the Racing Game just do not work with X or FBX
files because they use splines, which are not exported at all in these formats. Collada
came as the rescue again because it is really no big problem for this format. Later
versions of the Racing Game removed the collada level loading and introduced a binary
format for the levels, but the importer still accepts collada files. 
&lt;/p&gt;
&lt;p&gt;
Recently I wanted to test a couple of animated models and use skinning since it can
often be more useful than static animations and it usually looks much better, especially
for organic 3D models. As I said above I could not get anything working with the &lt;a href="http://www.codeplex.com/animationcomponents"&gt;XNA
Animation Component Library&lt;/a&gt; and I especially do not like the way they still use
the content pipeline and the project is too complicated for me anyway (I just do not
need 6 different file formats, I just want one and it should work perfectly with all
the features I need). 
&lt;/p&gt;
&lt;p&gt;
After some searching I saw some guy called remi from the &lt;a href="https://collada.org/public_forum/"&gt;collada
forum&lt;/a&gt; was working on importing collada models too and I posted some thoughts there
too (maybe this was a mistake, I got many emails asking me about tips ^^). &lt;a href="https://collada.org/public_forum/viewtopic.php?p=2373&amp;amp;highlight=&amp;amp;sid=f5b56a89076e08d6c4175db5490db4da#2373"&gt;Here
is the thread about that in the collada forum&lt;/a&gt;. He has provided a test project
with some models and it works nice for static meshes without shader information, but
that was not really what I was searching for. 
&lt;/p&gt;
&lt;p&gt;
This was a month ago and I had not much time working on any of these issues, but after
restarting my blog earlier this week I thought this would be a nice topic to talk
about. I'm still pretty busy with &lt;a href="http://www.ArenaWars.net"&gt;Arena Wars Reloaded&lt;/a&gt;,
but I worked a couple of hours every day on this little test program for the past
few days. The rest of this article explains the project and into which problems I
ran. 
&lt;br&gt;
&lt;a name="ClassOverview"&gt; 
&lt;h2&gt;Class Overview
&lt;/h2&gt;
&lt;/a&gt;Before we go into the details here is a little class overview of the project.
As I said before the Rocket Commander XNA engine was used to get up and running with
the project without having to re implement the basics. Most of the classes were already
in place and had not to be changed. ColladaModel and SkinnedTangentVertex are the
2 new classes and to help us out with the XML loading of the collada files the XmlHelper
class was also brought into the project. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="images/SkinningInColladaClassOverview.png"&gt;&lt;img src="images/SkinningInColladaClassOverviewSmall.png" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I wrote the ColladaModel file from scratch, but I could reuse some of the static mesh
loading code I had done last year. All of the bone and animation loading code was
just try and error and I only used the &lt;a href="http://www.khronos.org/files/collada_spec_1_4"&gt;collada
specifications&lt;/a&gt; as a source of help, but most stuff had to be tested with the unit
tests at the end of the class many many times. 
&lt;/p&gt;
&lt;p&gt;
The main program just calls the unit tests TestGoblinColladaModelScene or TestShowBones,
there is no real game here, its just a test program. The unit test then calls several
Standard Engine classes for doing all the post screen processing, rendering the ground
plane, etc. More importantly the ColladaModel class itself basically just provides
a constructor and a Render method, everything else is private and will be handled
automatically for you. Most people might ignore this, but this is always the most
important thing about my classes, the use should be as simple as possible and when
I look at the projects mentioned above I really ask myself why people sometimes think
so complicated. 
&lt;/p&gt;
&lt;p&gt;
The internal Bone class inside ColladaModel is used to store all the bones in a flat
list, but each entry has a parent and a list old children bones. This way the list
can be used both in a simple for loop, but you can also go through it recursively
(which is obviously slower and often more complicated). We will talk about the loading
process in a minute. 
&lt;/p&gt;
&lt;p&gt;
All the mesh data is stored in vertices, which is just a list of SkinnedTangentVertex
structs. The SkinnedTangentVertex struct is very much like the standard TangentVertex
struct used in Rocket Commander XNA, but it has 2 new members: blendIndices and blendWeights.
Both are in the form of Vector3 and their fore can hold 3 values allowing us to interpolate
up to 3 bone influences for each vertex in the shader. More is often not required
and we have to re normalize all bone weights anyway, so skipping the least important
bone weights is not a big deal. My test models use mostly max. 2-3 influences. Please
also note that the vertex shader has now a lot more work to do with all that skinning
and you should really optimize it as much as possible. Both the number of vertices
we have to process is important (we will talk about optimizing that in the optimizing
part of this article) and also the number of instructions the vertex shader has, both
numbers should be as low as possible. The GPU is really fast processing this data,
but if you do not have animated geometry with bones, there is no reason to let it
process all that data (which can make the vertex shader 2-3 times longer and slower).
The ground of our test scene does not use a skinning shader as an example. 
&lt;/p&gt;
&lt;p&gt;
And finally there are some additions to the ShaderEffect class. First of all we got
a new shader called "SkinnedNormalMapping", which does the same thing as the normal
mapping (or parallax mapping) shader, but it has an array of 80 bone matrices we can
use for skinning. These matrices are set with help of the SetBoneMatrices method in
the Set Parameter region of ShaderEffect.cs. 
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;a name="LoadingCollada"&gt; 
&lt;h2&gt;Loading collada files
&lt;/h2&gt;
&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Before we go into the details of the loading process, lets make sure we read the summary
of the class first because it clearly states what we can do and can't do with this
class. This is just a test project and I wanted to make things as simple as possible
for both you as the reader and for my requirements. 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
Collada model. Supports bones and animation for collada (.dae) exported&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
3D Models from 3D Studio Max (8 or 9).&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
This class is just for testing and it will only display one single mesh&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
with bone and skinning support, the mesh also can only have one single&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
material. Bones can be either in matrix mode or stored with transform&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
and rotation values. SkinnedTangentVertex is used to store the vertices.&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;class&lt;/span&gt; ColladaModel
: IDisposable&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
OK, with that said let's go directly into the loading code, which is located in the
constructor of this class. All variables used in these class are just for internal
use, all you need to know are the vertices and bone lists, which I have already mentioned,
and the vertex and index buffers, which are used for rendering. All the rest of the
variables are just there to help us loading the collada file (don't worry, there are
not many variables anyway and most methods are short too). 
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; Constructor&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Create a model from a collada file&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;param name="setName"&amp;gt;Set name&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;public&lt;/span&gt; ColladaModel(&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; setName)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Set name to identify this model and build the filename&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; setName;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; filename &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; Path.Combine(ColladaDirectory,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringHelper.ExtractFilename(name, &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;true&lt;/span&gt;) &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt; &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"."&lt;/span&gt; &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ColladaExtension);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Load file&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stream file &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; File.OpenRead(filename);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;string&lt;/span&gt; colladaXml &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; StreamReader(file).ReadToEnd();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlNode colladaFile &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; XmlHelper.LoadXmlFromText(colladaXml);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Load material (we only support one)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadMaterial(colladaFile);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Load bones&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadBones(colladaFile);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Load mesh (vertices data, combine with bone weights)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadMesh(colladaFile);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And finally load bone animation data&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadAnimation(colladaFile);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Close file, we are done.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file.Close();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
ColladaModel(setFilename)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;&lt;/span&gt; 
&lt;p&gt;
&lt;font face="Verdana" size="2"&gt;As you can see first of all the filename is constructed
and we just load the file as a text file and throw it to the XmlHelper.LoadXmlFromText
helper method (which just uses the existing XmlDocument functionality to load xml
from a string). We now get the main collada node, which contains all the children
nodes we need for loading the materials, bones, meshes, etc.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana" size="2"&gt;Next all the materials are loaded, but we are only going
to use the first one we find because we only support one single mesh anyway. The LoadMaterial
method goes through all used textures and shader effects from the collada file and
constructs the material at the end of the method with help of a new constructor in
the Material class itself. While this is cool and a lot easier than loading material
data from x files, it is not very exciting code, so let's move along.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana" size="2"&gt;Even through the bones are located at the end of the
collada file, we have to load them first because all our other loading methods, specifically
LoadMesh and LoadAnimation need the bone tree structure and the overall bone list
to work. All bones are loaded in sequential order because we want to make sure that
we can use the animation matrices later in an easy way without having to check the
parent order all the time. Only this way we can be sure that going through our flat
bones list we still respect the internal tree structure and always initialize the
parents first because the children bones matrices are always multiplied with the parent
bones.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;foreach&lt;/span&gt; (XmlNode
boneNode &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;in&lt;/span&gt; boneNodes)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (boneNode.Name
== &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"node"&lt;/span&gt; &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(XmlHelper.GetXmlAttribute(boneNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"id"&lt;/span&gt;).Contains(&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"Bone"&lt;/span&gt;)
||&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlHelper.GetXmlAttribute(boneNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"type"&lt;/span&gt;).Contains(&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"JOINT"&lt;/span&gt;)))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
[...] get matrix&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;matrix &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; LoadColladaMatrix(...);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Create this node, use the current number of bones as number.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Bone newBone &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Bone(matrix,
parentBone, bones.Count,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlHelper.GetXmlAttribute(boneNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"sid"&lt;/span&gt;));&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Add to our global bones list&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bones.Add(newBone);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And to our parent, this way we have a tree and a flat list in&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
the bones list :)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (parentBone
!&lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parentBone.children.Add(newBone);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Create all children (will do nothing if there are no sub bones)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FillBoneNodes(newBone,
boneNode);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
foreach if (boneNode.Name)&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/span&gt;&lt;a name="AnimationData"&gt;As you can see the code uses the XmlHelper class extensively
because otherwise the code would look much uglier and complex. Next we have to load
the mesh itself, this is probably the longest method and not easy to figure out if
you work with collada for the first time. Good thing I had already done that in the
past and I only had to add the code for getting the blend weights and indices.&lt;/a&gt;&amp;nbsp;The
following code does load all the weights, which we will use later to fill the blendWeights
and blendIndices members of the SkinnedTangentVertex struct vertices list. The code
for that is actually a little bit more complicated because we have to find out which
weights are the top 3 weights for each vertex in case more than 3 are given.
&lt;/p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt; 
&lt;p&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; Load
weights&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;float&lt;/span&gt;[]
weights &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;foreach&lt;/span&gt; (XmlNode
sourceNode &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;in&lt;/span&gt; skinNode)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Get all inv bone skin matrices&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (sourceNode.Name
== &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"source"&lt;/span&gt; &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlHelper.GetXmlAttribute(sourceNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"id"&lt;/span&gt;).Contains(&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"bind_poses"&lt;/span&gt;))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Get inner float array&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;float&lt;/span&gt;[]
mat &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; StringHelper.ConvertStringToFloatArray(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlHelper.GetChildNode(sourceNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"float_array"&lt;/span&gt;).InnerText);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; boneNum &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
boneNum &amp;lt; bones.Count; boneNum++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (mat.Length &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;/&lt;/span&gt; 16
&amp;gt; boneNum)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bones[boneArrayOrder[boneNum]].invBoneSkinMatrix &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LoadColladaMatrix(mat,
boneNum &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 16);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for if&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
if&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Get all weights&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (sourceNode.Name
== &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"source"&lt;/span&gt; &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlHelper.GetXmlAttribute(sourceNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"id"&lt;/span&gt;).Contains(&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"skin-weights"&lt;/span&gt;))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Get inner float array&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;weights &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; StringHelper.ConvertStringToFloatArray(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlHelper.GetChildNode(sourceNode, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"float_array"&lt;/span&gt;).InnerText);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
if&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
foreach&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (weights
== &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;throw&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; InvalidOperationException(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"No
weights were found in our skin, unable to continue!"&lt;/span&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;&lt;font color="#000000"&gt;&lt;font face="Verdana" size="2"&gt;For
more information about the mesh loading please check out the last region in the LoadMesh
method, it should explain all the important steps in case you want to add something
there or just look how it works.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/span&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h2&gt;Problems with the animation data
&lt;/h2&gt;
&lt;p&gt;
Getting the animation data was not so easy. First of all I never had done this before
because my collada files for the Racing Game were all just static meshes and I really
did not need any animation there. Everything that is actually animated in the Racing
Game was done directly in XNA,&amp;nbsp;not in 3D Studio.
&lt;/p&gt;
&lt;p&gt;
The first problem is the many formats that animation data can be in. You can have
rotations around any axis or translations and even scalings, but most of your bones
will only use one or two of these if they are animated at all. Alternatively all the
animation data can be computed directly by the exporter plugin in 3D Studio Max and
this way you can make sure that all the animation data is in the correct format. It
makes testing certainly a lot harder and if you don't even know the format the matrices
are in or how to apply them to each other in which order, you are in a world of trouble.
&lt;/p&gt;
&lt;p&gt;
This is exactly what happened to me, I had most of my test models with rotation animation
data only, but the Goblin above from my friend Christoph was done with another technique
and the exporter could only export the matrices, so I had to support that too. After
some try and error I managed to get the basic animations for my test models working.
They are all in the project, feel free to load and test&amp;nbsp;them. To test the bone
animations I used the following unit test:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; Unit
Testing&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Note: Allow calling all this even in release mode (see Program.cs)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; TestShowBones&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
TestShowBones&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;public&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;static&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;void&lt;/span&gt; TestShowBones()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ColladaModel model &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PlaneRenderer groundPlane &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Bone colors for displaying bone lines.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Color[] BoneColors &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Color[]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ Color.Blue,
Color.Red, Color.Yellow, Color.White, Color.Teal,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Color.RosyBrown,
Color.Orange, Color.Olive, Color.Maroon, Color.Lime,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Color.LightBlue,
Color.LightGreen, Color.Lavender, Color.Green,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Color.Firebrick,
Color.DarkKhaki, Color.BlueViolet, Color.Beige };&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TestGame.Start(&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"TestLoadColladaModel"&lt;/span&gt;,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;delegate&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Load our goblin here, you can also load one of my test models!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;model &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; ColladaModel(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//"Goblin");&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//"test_bones_simple_baked");&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//"test_bones_advanced_baked");&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"test_man_baked"&lt;/span&gt;);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And load ground plane&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;groundPlane &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; PlaneRenderer(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Vector3(0,
0, -0.001f),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Plane(&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Vector3(0,
0, 1), 0),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Material(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"GroundStone"&lt;/span&gt;, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"GroundStoneNormal"&lt;/span&gt;, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"GroundStoneHeight"&lt;/span&gt;),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;50);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;delegate&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Show ground&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;groundPlane.Render(ShaderEffect.parallaxMapping, &lt;span style="font-size: 11px; color: rgb(102, 102, 102); font-family: Courier New; background-color: rgb(228, 228, 228);"&gt;"DiffuseSpecular20"&lt;/span&gt;);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Show bones without rendering the model itself&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (model.bones.Count
== 0)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt;;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Update bone animation.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;model.UpdateAnimation(Matrix.Identity);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Show bones (all endpoints)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;foreach&lt;/span&gt; (Bone
bone &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;in&lt;/span&gt; model.bones)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;foreach&lt;/span&gt; (Bone
childBone &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;in&lt;/span&gt; bone.children)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BaseGame.DrawLine(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bone.finalMatrix.Translation,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;childBone.finalMatrix.Translation,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BoneColors[bone.num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;%&lt;/span&gt; BoneColors.Length]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
foreach (bone)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
TestShowBones()&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
The most important call here is the call to UpdateAnimations, which goes through the
list of bones and updates the so called finalMatrix from the Bone class for each of
the bones. In earlier versions this code was horribly complicated and still had a
lot of problems, but as soon as I removed all the rotation, translation, scaling,
etc. animation support and just allow loading the correctly baked matrices from the
collada files, the code has become much simpler (the actual code does have some optimizations
in it, but it is basically the same as the posted code here):
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; Update
animation&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Update animation.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;private&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;void&lt;/span&gt; UpdateAnimation(Matrix
renderMatrix)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; aniMatrixNum &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;)(BaseGame.TotalTime &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; frameRate)) &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;%&lt;/span&gt; numOfAnimations;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;foreach&lt;/span&gt; (Bone
bone &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;in&lt;/span&gt; bones)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Just assign the final matrix from the animation matrices.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bone.finalMatrix &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; bone.animationMatrices[aniMatrixNum];&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Also use parent matrix if we got one&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
This will always work because all the bones are in order.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (bone.parent
!&lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;null&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bone.finalMatrix
*=&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bone.parent.finalMatrix;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
foreach&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
UpdateAnimation()&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
For the loading itself we just have to make sure that the animationMatrices are the
correct ones. Collada saves them in a absolute mode. Earlier code from me constructed
relative matrices (relative&amp;nbsp;to the initial bone matrix),&amp;nbsp;it was easier to
construct relative matrices from the rotation, translation, etc. animation data, but
much harder to use these matrices later for the animation. Having&amp;nbsp;these absolute
matrices makes the UpdateAnimation code so much easier, so make sure you always use
them this way.
&lt;/p&gt;
&lt;p&gt;
However, when rendering the vertices later we can't use the absolute matrices because
the vertices have to transformed first to get into a relative space to the bones,
rotations should not be around the origin, but around the bone positions. Luckily
for us (and you should have seen my face when I finally found out that these matrices
already exist in collada and I did not have to create them myself in my own over complicated
way ^^) collada stores the so called invBoneSkin matrices for each bone. By applying
these matrices we can easily get the bone matrices we need for rendering, these are
directly passed to our shader (as compressed 4x3 matrices BTW to save shader constants,
the code for that is a little bit more complex, please check out ShaderEffect.cs and
the SkinnedNormalMapping.fx shader itself for details).
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; GetBoneMatrices&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Get bone matrices for the shader. We have to apply the invBoneSkinMatrix&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
to each final matrix, which is the recursively created matrix from&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
all the animation data (see UpdateAnimation).&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;private&lt;/span&gt; Matrix[]
GetBoneMatrices(Matrix renderMatrix)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Update the animation data in case it is not up to date anymore.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UpdateAnimation(renderMatrix);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And get all bone matrices, we support max. 80 (see shader).&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Matrix[] matrices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; Matrix[Math.Min(80,
bones.Count)];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
num &amp;lt; matrices.Length; num++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
The matrices are constructed from the invBoneSkinMatrix and&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
the finalMatrix, which holds the recursively added animation matrices&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
and finally we add the render matrix too here.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;matrices[num] &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bones[num].invBoneSkinMatrix &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; bones[num].finalMatrix &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; renderMatrix;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; matrices;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
GetBoneMatrices()&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
And this is what you finally get after executing the TestShowBones unit test. I had
not implemented mesh loading or the shader itself at this point. I just was loading
and testing the bones itself.
&lt;/p&gt;
&lt;a href="images/TestShowBones_TestMan.jpg"&gt;&lt;img src="images/TestShowBones_TestManSmall.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;a name="Optimizations1"&gt; 
&lt;h2&gt;Optimizing the vertices
&lt;/h2&gt;
&lt;p&gt;
One major problem with the loaded mesh is the high vertices count, I had two test
models with 30k and 60k vertices and as you can imagine this will slow down the vertex
shader quite a lot and it is really not necessary to process all these vertices because
many of them are exactly the same. The reason we end up with an unoptimized vertices
list anyway is because collada stores seperate lists for each component we have to
put together at the end of the LoadMesh method. By doing so we have to duplicate the
data many times and we just can't know how often each part is reused and how often
the overall vertex changes. If just the texture coordinate or normal differs, we have
a completely different vertex, which will produce different results in the vertex
shader, so just merging everything together is not that simple.
&lt;/p&gt;
&lt;p&gt;
The rendering uses an index buffer anway, but for the data constructed in LoadMesh
it would just be sequential (0, 1, 2 form the first polygon, 3, 4, 5 the next, etc.).
Instead of having one index for each vertex, we can often reuse the same vertex 3
or 4 times and reducing the number of vertices drastically. This has also the advantage
that we can store much more vertices and complexer meshes even if we still use ushort
(16 bit) for our indices (which is half the size of ints and their fore faster). For
example if you have 150,000 vertices, but you can reduce them to 40-50,000 optimized
vertices, they all can be indexed with ushorts :-)
&lt;/p&gt;
&lt;p&gt;
The easy solution is just to optimize all the vertices after all of them have been
loaded, if you have a binary format and do not use collada directly, this solution
is absolutely great, but it still will take a lot of time processing the collada models
if they just have many vertices because we have to check each vertex against each
other one and that can be a lot of compares if you have 60 or 70 thousand vertices
in a mesh. It actually takes up to a whole minute just to compute that and I have
no slow computer ^^ Here is the method that does all that for us:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; OptimizeVertexBufferSlow&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Optimize vertex buffer. Note: The vertices list array will be changed&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
and shorted quite a lot here. We are also going to create the indices&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
for the index buffer here (we don't have them yet, they are just&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
sequential from the loading process above).&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;/// &lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Note: Slow version because we have to check each vertex against&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
each other vertex, which makes this method exponentially slower&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
the more vertices we have. Takes 10 seconds for 30k vertices,&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
and over 40 seconds for 60k vertices. It is much easier to understand,&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
but it produces the same output as the fast OptimizeVertexBuffer&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
method and you should always use that one (it only requires a couple&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
of miliseconds instead of the many seconds this method will spend).&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;returns&amp;gt;ushort array for the optimized indices&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;private&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;[]
OptimizeVertexBufferSlow()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;SkinnedTangentVertex&amp;gt; newVertices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;SkinnedTangentVertex&amp;gt;();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;&amp;gt;
newIndices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;&amp;gt;();&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Go over all vertices (indices are currently 1:1 with the vertices)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
num &amp;lt; vertices.Count; num++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Try to find already existing vertex in newVertices list that&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
matches the vertex of the current index.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SkinnedTangentVertex
currentVertex &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; vertices[FlipIndexOrder(num)];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;bool&lt;/span&gt; reusedExistingVertex &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;false&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; checkNum &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
checkNum &amp;lt; newVertices.Count; checkNum++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (SkinnedTangentVertex.NearlyEquals(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentVertex,
newVertices[checkNum]))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Reuse the existing vertex, don't add it again, just&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
add another index for it!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices.Add((&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;)checkNum);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reusedExistingVertex &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;true&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;break&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
if (TangentVertex.NearlyEquals)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for (checkNum)&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (reusedExistingVertex
== &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;false&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Add the currentVertex and set it as the current index&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices.Add((&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;)newVertices.Count);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newVertices.Add(currentVertex);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
if (reusedExistingVertex)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for (num)&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Reassign the vertices, we might have deleted some duplicates!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vertices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; newVertices;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And return index list for the caller&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; newIndices.ToArray();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
OptimizeVertexBufferSlow()&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;/a&gt; 
&lt;h2&gt;Optimizing the Optimization
&lt;/h2&gt;
&lt;p&gt;
While this is all nice and dandy and we just optimized the rendering code by 20-30%
(I tested with 9 goblins and using 3 passes for them, 2 for shadowing and 1 for the
rendering), but the loading now takes painfully long. The main idea here is to not
compare every single vertex against every other possible vertex because it does not
make much sense, most of the vertices (&amp;gt;99,9%) will always be different. We only
need to check the ones that share at least the same position.
&lt;/p&gt;
&lt;p&gt;
I started with comparing neighboring vertices, but since the vertices are stored in
index order, they are totally messed up, vertex 1 and 4383 can be equal, but if we
just check -10 to +10 we are going to miss it. Instead we have to know which vertices
come from the same position data, which we know since collada saves unique positions.
All we have to do is to keep a list of all vertices that share the same position and
then we can optimize the comparsions later on. Usually only up to 4 to 6&amp;nbsp;vertices
share the same position, this way the whole comparison process just needs 60,000 *
6 comparisons, not 60,000*60,000 anymore.
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Initialize reuseVertexPositions and reverseReuseVertexPositions&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
to make it easier to use them below&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reuseVertexPositions &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;[trianglecount &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 3];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reverseReuseVertexPositions &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;&amp;gt;[positions.Count &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;/&lt;/span&gt; 3];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; i &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
i &amp;lt; reverseReuseVertexPositions.Length; i++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reverseReuseVertexPositions[i] &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;&amp;gt;();&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
We have to use int indices here because we often have models&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
with more than 64k triangles (even if that gets optimized later).&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; i &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
i &amp;lt; trianglecount &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 3;
i++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
[...] vertex construction&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Remember pos for optimizing the vertices later more easily.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reuseVertexPositions[i] &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; pos &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;/&lt;/span&gt; 3;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reverseReuseVertexPositions[pos &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;/&lt;/span&gt; 3].Add(i);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for (ushort)&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
And then finally the fast vesion of OptimizeVertexBuffer, which uses that data:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#region&lt;/span&gt; OptimizeVertexBuffer&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Optimize vertex buffer. Note: The vertices list array will be changed&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
and shorted quite a lot here. We are also going to create the indices&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
for the index buffer here (we don't have them yet, they are just&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
sequential from the loading process above).&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;/// &lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
Note: This method is highly optimized for speed, it performs&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
hundred of times faster than OptimizeVertexBufferSlow, see below!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;///
&amp;lt;returns&amp;gt;ushort array for the optimized indices&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;private&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;[]
OptimizeVertexBuffer()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;SkinnedTangentVertex&amp;gt; newVertices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;SkinnedTangentVertex&amp;gt;();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;&amp;gt;
newIndices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;&amp;gt;();&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Helper to only search already added newVertices and for checking the&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
old position indices by transforming them into newVertices indices.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;&amp;gt;
newVerticesPositions &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt;&amp;gt;();&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Go over all vertices (indices are currently 1:1 with the vertices)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
num &amp;lt; vertices.Count; num++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Get current vertex&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SkinnedTangentVertex
currentVertex &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; vertices[num];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;bool&lt;/span&gt; reusedExistingVertex &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;false&lt;/span&gt;;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Find out which position index was used, then we can compare&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
all other vertices that share this position. They will not&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
all be equal, but some of them can be merged.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; sharedPos &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; reuseVertexPositions[num];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;foreach&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; otherVertexIndex &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;in&lt;/span&gt; reverseReuseVertexPositions[sharedPos])&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Only check the indices that have already been added!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (otherVertexIndex
!&lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; num
&amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Make sure we already are that far in our new index list&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;otherVertexIndex
&amp;lt; newIndices.Count &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And make sure this index has been added to newVertices yet!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices[otherVertexIndex]
&amp;lt; newVertices.Count &amp;amp;&amp;amp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Then finally compare vertices (this call is slow, but thanks to&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
all the other optimizations we don't have to call it that often)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SkinnedTangentVertex.NearlyEquals(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentVertex,
newVertices[newIndices[otherVertexIndex]]))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Reuse the existing vertex, don't add it again, just&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
add another index for it!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices.Add((&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;)newIndices[otherVertexIndex]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reusedExistingVertex &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;true&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;break&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
if (TangentVertex.NearlyEquals)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
foreach (otherVertexIndex)&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;if&lt;/span&gt; (reusedExistingVertex
== &lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;false&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Add the currentVertex and set it as the current index&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices.Add((&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt;)newVertices.Count);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newVertices.Add(currentVertex);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
if (reusedExistingVertex)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for (num)&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Finally flip order of all triangles to allow us rendering&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
with CullCounterClockwiseFace (default for XNA) because all the data&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
is in CullClockwiseFace format right now!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;for&lt;/span&gt; (&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;int&lt;/span&gt; num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; 0;
num &amp;lt; newIndices.Count &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;/&lt;/span&gt; 3;
num++)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;ushort&lt;/span&gt; swap &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; newIndices[num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 3 &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt; 1];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices[num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 3 &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt; 1] &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; newIndices[num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 3 &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt; 2];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newIndices[num &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; 3 &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt; 2] &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; swap;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Reassign the vertices, we might have deleted some duplicates!&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vertices &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; newVertices;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
And return index list for the caller&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; newIndices.ToArray();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
OptimizeVertexBuffer()&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;#endregion&lt;/span&gt;
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
With this optimization loading is now pretty fast and rendering performs also nicely
thanks to the quick shaders we will discuss below. When running ANTS Profiler over
the new project the slowest line of code becomes the actual text parsing, actually
the conversion of the long strings for all vertices data&amp;nbsp;into the actual vertices
float data, especially the positions array. But we can't do anything about that without
loading the data binary and not parsing them ourselfs. It takes maybe half a second
for a 50k vertices model to load, not great, but ok for our little test app.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a name="Shaders1"&gt; 
&lt;h2&gt;Adjusting the shaders for skinned meshes
&lt;/h2&gt;
&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Now we got a bunch of vertices we can render, but as you know we need a shader to
do anything in XNA, there is no fixed function pipeline. There are also no animation
helper classes like in DirectX, but they won't help you anyway if you want to render
with shaders. Transforming the vertices on the CPU may sometimes be a choice if you
do not have many vertices and not many skinned models overall or if they all have
to be updated the same way. But generally&amp;nbsp;it is a much better idea to transform
all the vertices on the GPU, which costs a little bit more instructions in the vertex
shader, but the rest of the rendering stays the same. Most graphic apps are pixel
shader bound anyway and I use fairly complex pixel shaders too. Additionally on Shader
Model 4.0 cards like the GeForce 8800 with up to 128 parallel unified&amp;nbsp;shader
units you can do very complex vertex shaders and use simpler pixel shaders and it
will just use more units for the vertex shaders automatically :) 
&lt;/p&gt;
&lt;p&gt;
We already have defined the bones matrix array for skinning above and we limited it
to 80 bones per mesh, which is quite a lot. Even if you would spend 3 bones per finger
and 20-30 bones for the body you would still have plenty of bones left for complex
animations. Sure modelers will now say "thats not enough sometimes" ... well, you
can always split up the mesh into several meshes with up to 80 bones each if you really
need more. My graphic artists&amp;nbsp;are happy with 80 bones ^^ 
&lt;/p&gt;
&lt;p&gt;
If we want full Shader Model 2.0 support we can only be sure that we got at least
256 shader constants. NVidia has usually more (1024), but you still want your game
to run on ATI cards too, especially older ones. Each constant can hold a float4 and
we need 4 constants for each 4x4 matrix. This means we can only have up to 64 matrices
with this limit and we still need some constants for the world, view, and&amp;nbsp;projection
matrices, the light and material values and anything else we want to do in our shader.
You should reserve 10-20 constants for that and now we are down to less than 60 matrices,
which might sometimes be too little.
&lt;/p&gt;
&lt;p&gt;
Instead of splitting the mesh or providing a different code path in case the GPU can
do more constants (I couldn't get that do work in XNA for some reason, not sure if
there is some limit or if I made a mistake, my GPU should be able to do at least 1024
constants, and even 2048 for the 8800), there is a trick to save only a 3x4 matrix.
The last colum is always 0, 0, 0, 1 if we have correctly applied the invBoneMatrix
and the animation matrix (see GetBoneMatrices in ColladaModel for details and the
order of the matrices). But saving 4 float3 values still needs 4 shader constants
per matrix so we have to save it as 4x3 matrices instead.
&lt;/p&gt;
&lt;p&gt;
My first idea was to grab the .w values and reconstruct the translation part of the
matrix this way. This worked, but the resulting shader had 80 instructions (from abount
20 without skinning), which is not good for the resulting performance when rendering
many skinned 3D models.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;float4x4
RebuildSkinMatrix(&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;float&lt;/span&gt; index)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; float4x4(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4(skinnedMatricesVS20[index*3+0].xyz,
0),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4(skinnedMatricesVS20[index*3+1].xyz,
0),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4(skinnedMatricesVS20[index*3+2].xyz,
0),&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;skinnedMatricesVS20[index*3+0].w,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;skinnedMatricesVS20[index*3+1].w,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;skinnedMatricesVS20[index*3+2].w,
1));&lt;br&gt;
} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
RebuildSkinMatrix(.)&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
A better idea is to use the&amp;nbsp;4x3 matrix as a 3x4 matrix by just reversing the
order we call mul. This involves some changes to the vertex shader code and looks
a little bit confusing sometimes, but if you make sure you transform the world matrix
the same way and use it in this reversed mul order too, everything works just fine.
Another thing that can be optimized is to pre-multiply the indices of blendIndices
for each vertex at the loading time. These indices never change and they don't really
care if they are 0, 1, 2 or 0, 3, 6, etc. We save&amp;nbsp;one instruction per matrix
we are going to reconstruct (the rest is optimized out by the compiler). This is the
much easier version of RebuildSkinMatrix, for more details take a look at the SkinnedNormalMapping.fx
file:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Note: This returns a transposed matrix, use it in reversed order.&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
First tests used a 3x3 matrix +3 w values for the transpose values, but&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
reconstructing this in the shader costs 20+ extra instructions and after&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
some testing I found out this is finally the best way to use 4x3 matrices&lt;/span&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
for skinning :)&lt;/span&gt;
&lt;br&gt;
float4x4 RebuildSkinMatrix(&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;float&lt;/span&gt; index)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: blue; font-family: Courier New; background-color: transparent;"&gt;return&lt;/span&gt; float4x4(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;skinnedMatricesVS20[index+0],&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;skinnedMatricesVS20[index+1],&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;skinnedMatricesVS20[index+2],&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4(0, 0, 0, 1));&lt;br&gt;
} &lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
RebuildSkinMatrix(.)&lt;/span&gt;
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#000000"&gt;This results in a vertex shader that has almost half as many
instructions as before and their fore is twice as fast :) Good work. Performance tests
showed that I could increase the framerate from 220 fps to 270 fps just by doing that
(test scene with 9 goblins). The following code is actually more or less the only
part you have to replace in an existing shader if you want to make it skinnable (plus
providing the helper method and the skinned matrices too of course).&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
First transform position with bones that affect this vertex&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Use the 3 indices and blend weights we have precalculated.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4x4 skinMatrix &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RebuildSkinMatrix(In.blendIndices.x) &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; In.blendWeights.x &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RebuildSkinMatrix(In.blendIndices.y) &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; In.blendWeights.y &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;+&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RebuildSkinMatrix(In.blendIndices.z) &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;*&lt;/span&gt; In.blendWeights.z;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Calculate local world matrix with help of the skinning matrix&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4x4 localWorld &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; mul(world,
skinMatrix);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 11px; color: green; font-family: Courier New; background-color: transparent;"&gt;//
Now calculate final screen position with world and viewProj matrices.&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float4 worldPos &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; mul(localWorld,
float4(In.pos, 1));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Out.pos &lt;span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;"&gt;=&lt;/span&gt; mul(worldPos,
viewProj);&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#000000"&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&lt;a name="Shaders2"&gt; 
&lt;h2&gt;Post screen shaders for the final result
&lt;/h2&gt;
&lt;/a&gt; 
&lt;p&gt;
All the skinning code and bone transformations are nice once you get them done, but
without a cool model and some post screen shaders to make the scene look more cool,
it is only half the fun. Good think I got the Goblin 3D Model, thanks to Christoph
(WAII) again. I also had a couple of other test models and another more complex 3D
Model (big evil monster ^^) which was good for some stress testing, but the material
just did not look that cool. 
&lt;/p&gt;
&lt;p&gt;
As you can see on the following image 6 render targets are used to accomplish the
final image. Most shader passes do several things at once and the list of operations
(see right side of the image)&amp;nbsp;is longer than the list of used passes. Most of
this was just trying to get the best looking values&amp;nbsp;together quickly. If you
are an experienced artist you can probably do much better than me, I'm just playing
around with the shader parameters until I get bored and then I leave it the way it
is. The sceneMap (render target nummero three) shows the unmodified scene without
applying the post screen shaders. It does not look half as cool as the final result.
&lt;/p&gt;
&lt;a href="images/TestGoblinScenePostScreenPasses.jpg"&gt;&lt;img src="images/TestGoblinScenePostScreenPassesSmall.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a name="References"&gt;I hope you enjoyed this article and that you are not as tired
as I am writing this all at once (uff). It was a fun project, I have already another
one in mind for next week ;-) Take care.&lt;/a&gt;&amp;nbsp;If you have problems, post a comment.
Please note that not all collada models will work, you have to follow the rules of
ColladaModel or improve the class a bit for other use
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h2&gt;References and Links
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="SkinningWithColladaModelsInXnaSourceCode.zip"&gt;SkinningWithColladaModelsInXnaSourceCode.zip
(2.6 MB) from this article&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="SkinningWithColladaModelsInXnaExecuteable.zip"&gt;SkinningWithColladaModelsInXnaExecuteable.zip
(2.5 MB) from this article&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.codeplex.com/animationcomponents"&gt;XNA Animation Component Library&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.andytather.co.uk/Panda/directxmax.aspx"&gt;Panda Exporter for 3dsMax&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.mindcontrol.org/%7Ehplus/graphics/kwxport.html"&gt;kiloWatt X file
Exporter for 3dsMax&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.khronos.org/collada/"&gt;Official Collada site from the Khronos Group&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.feelingsoftware.com/content/view/16/30/"&gt;Feeling Software Collada
Plugins for 3dsMax and Maya, best exporters ever!&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://collada.org/public_forum/"&gt;Public Forum of Collada.org&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/COLLADA"&gt;Wikipedia on Collada&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://collada.org/public_forum/viewtopic.php?p=2373&amp;amp;highlight=&amp;amp;sid=f5b56a89076e08d6c4175db5490db4da#2373"&gt;Collada
Forum post about remi's Collada for XNA project&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.khronos.org/files/collada_spec_1_4"&gt;COLLADA 1.4.1 Specification
(PDF)&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=2b9f62ce-fc9c-4696-8f7f-701903f8285b" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,2b9f62ce-fc9c-4696-8f7f-701903f8285b.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=ce42019a-ceeb-452f-86bb-f7beec1a2964</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,ce42019a-ceeb-452f-86bb-f7beec1a2964.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,ce42019a-ceeb-452f-86bb-f7beec1a2964.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ce42019a-ceeb-452f-86bb-f7beec1a2964</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I developed a little Shoot'n'up game in
the last couple of days. It is actually quite fun to play. It is just one level and
is kind of a prototype. The game will be released together with my XNA Professional
Game Development book in a few months (it will be freely available from my website
shortly after that). My book features many other games too, it is not just about one
game, there are many arcade, action and other games in the book (about 8 games or
so) and they will be described as I explain all the important aspects of Game Programming
and the XNA Framework. 
<p>
For now I can only give you a little video about XNA Shooter. I hope you like it.<br /><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/3dlBRX6BHdU" /><embed src="http://www.youtube.com/v/3dlBRX6BHdU" type="application/x-shockwave-flash" width="425" height="350"></embed></object></p><p>
A "little" 1920x1200 screenshot:<br /><a href="images/XnaShooterScreenshot0001.jpg"><img src="images/XnaShooterScreenshot0001small.jpg" border="0" /></a></p><p>
These days there are a lot of discussions about XNA, especially in the GameDev.net
boards and of course in the official XNA forum by Microsoft.<br />
http://www.gamedev.net/community/forums/topic.asp?topic_id=430119<br />
http://forums.microsoft.com/msdn/showforum.aspx?forumid=846<br /></p><p>
I also want to mention a great article by the .NET Compact Framework team about the
.NET performance on the Xbox 360 with the XNA Framework. The main issue here is the
Garbage Collector, which is not generational and theirfore can only collect all the
objects in the GC at once and not in 3 levels like in the normal .NET Framework, which
can handle a lot more dead objects and more complicated situations. 
</p><p>
Here are the links to the .NET Compact Framework on XNA article:<br /><a href="http://blogs.msdn.com/netcfteam/archive/2006/12/22/managed-code-performance-on-xbox-360-for-the-xna-framework-1-0.aspx">http://blogs.msdn.com/netcfteam/archive/2006/12/22/<br />
managed-code-performance-on-xbox-360-for-the-xna-framework-1-0.aspx</a><br /><a href="http://blogs.msdn.com/netcfteam/archive/2006/12/22/managed-code-performance-on-xbox-360-for-xna-part-2-gc-and-tools.aspx">http://blogs.msdn.com/netcfteam/archive/2006/12/22/<br />
managed-code-performance-on-xbox-360-for-xna-part-2-gc-and-tools.aspx</a></p><p>
From my experience there are a couple of things you have to remember when developing
XNA games on the Xbox 360. All of these issue are not a big deal on the PC, but they
can cost some extra time until you get them right. One of the main problems is that
if you develop your game on the PC only and then test it on the Xbox 360 only at the
end a lot of things may go wrong (bad performance on the .NET Compact Framework, UI
elements at the border of the screen, which are just not visible on some TVs, bad
Xbox 360 controller support, which is the main input device for Xbox 360s, etc.). 
<br /></p><ul><li>
Test test test. This is the most important tip. Write unit tests and constantly test
them on your PC AND your Xbox 360. I keep 2 projects open at the same time (both of
them use the same files, but I only develop the PC solution and use the Xbox 360 solution
for deploying and testing only). Almost all of my classes have unit tests and I constantly
test them until they are completed.</li><li>
Don't use foreach loops, especially not in tight render loops. This may sound a little
crazy since it does not matter on a PC game and todays CPUs are fast enough to handle
the creation and deletion of many thousand objects each frame, which most games don't
even need. But on the compact framework you will spam the memory even with things
like foreach loops because a new enumerator instance is created everytime you start
a foreach loop. After a while there will be a lot of dead objects, which have to be
collected. This can take some time and slow your game down immensely. The PC version
might run at over 200 frames, but your Xbox 360 version is stuck at something like
30-40 frames. Avoiding creation of new data each frame and avoiding foreach loops
(just replace them with normal for loops, it is mostly just 1 line of extra code)
can improve your performance by a factor of 100% or more.</li><li>
In Arena Wars I never created any data during the game. All objects were created at
the beginning of each mission and they were reused (which was no big deal since the
game principle did not allow an infinite number of units, it always stayed around
the same because you get your money back from dead units to build new units). In later
project I did not care so much about creating new objects and I coded just the easy
way because unit tests drive you into a direction to quickly develop solutions, which
work and are tested, but may not be the best in other situations like for the Xbox
360 .NET Compact Framework. That is ok because we can now use the unit tests to check
if other solutions work just they way we expect them to work. For XNA Shooter and
XNA Racer (and a couple of other new game projects) I now make sure that most of the
game data is created at the beginning of each level and not dynamically during the
game.</li><li>
Save-Regions on TVs can be a pain in the ass. Just google for Xbox 360 screenshots
and you will notice that the GUI (graphical user interface) looks a lot different
from most PC games. PC games have often UI at the screen border showing you tips,
little buttons and other not so important things. If you do that in your Xbox 360
game all of these UI elements may be cut of on a regular TV. For the XNA Shooter I
had to rework all the UI elements because they just did not fit on a TV screen and
it was not practical to put them in a bar (like the windows task bar) because it looks
so different on the PC and certain TV monitors. Instead I put all UI elements in floating
bars, which will be adjusted depending on the screen the user is looking at.<br />
These are some of the Save-Regions I have encountered:<br /><ul><li>
PC: 100% visible</li><li>
Xbox 360 connected through a VGA cable: 100% (or close to 100%) visible.</li><li>
Xbox 360 connected to an old style monitor with SCART: around 92% visible.</li><li>
Xbox 360 connected through Component cables to my new Dell 24" Monitor (yeah HDTV):
around 93-95% visible (depends on the resolution).</li><li>
Some old TV sets (according to the XNA docs and tips on the web) have a save region
of 80-90%, but I never saw the 80% case, that is probably the worst case scenario.</li></ul>
The important thing is to keep the important UI element in this inner 90% (or 93%
if you want to be close to the edges) rectangle. This means instead of using a full
1920x1080 pixel resolution you only use 90% of it (1728x945). Or just start rendering
UI elements at about 5% of the screen (x coordinate: 96, y coordinate: 54). This pixel
locations obviously depend on the screen resolution, just calculate them in your main
class and use them whenever you render UI. 
</li><li>
There are probably a lot more tips I can give, but I'm to lazy right now. Maybe more
in a little while :)</li></ul><p>
Btw: I currently also do a lot of OpenGL development again and I have to say I have
totally forgotten about the way you can program OpenGL. It is often a lot easier,
it only gets hard if something does not work the way you expect it to be (but thats
hard in DirectX too). Well, the most annoying part is of course that you have to wrap
all OpenGL methods through PInvoke and that just costs time. On the other hand if
you already have a robust framework (like I have with Arena Wars, hehe), it is relatively
easy to plug in new features. It also took not long to learn the differences between
glsl and hlsl. I do currently also test out the <a href="http://www.nvidia.com">FX
Composer</a> 2.0 (alpha), which has a great idea behind it, but it is too much like
Render Monkey and that is never a good thing. <a href="http://www.ati.com">Render
Monkey</a> by ATI is just overcomplicated and hard to use (and was not updated for
2 years, which shows that no one even uses it anymore). The great thing about FX Composer
1 was the fact it was so easy to use and it did only support a very limited feature
set. It is not the best tool ever, but it was certainly a lot easier to use than FX
Composer 2.0, which will hopefully be improved before NVidia release it.<br />
I have confidence that NVidia will deliver a great tool as always, but they have lost
a lot of fans in the last months because of the lack of drivers for Vista, especially
for the Geforce 8800, which does not work at all in Vista, but it is the only card
on the market that even supports Direct3D 10 (and the new cool unified shader technology
in DirectX). The only way you can currently use the new graphic card features is to
program them yourself natively with OpenGL ... but my 8800 is in repair anyway, else
I would have tried out some of the new features by now. 
</p><p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=ce42019a-ceeb-452f-86bb-f7beec1a2964" /></p></body>
      <title>XNA Shooter Game</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,ce42019a-ceeb-452f-86bb-f7beec1a2964.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/12/29/XNAShooterGame.aspx</link>
      <pubDate>Fri, 29 Dec 2006 18:30:45 GMT</pubDate>
      <description>I developed a little Shoot'n'up game in the last couple of days. It is actually quite fun to play. It is just one level and is kind of a prototype. The game will be released together with my XNA Professional Game Development book in a few months (it will be freely available from my website shortly after that). My book features many other games too, it is not just about one game, there are many arcade, action and other games in the book (about 8 games or so) and they will be described as I explain all the important aspects of Game Programming and the XNA Framework.
&lt;p&gt;
For now I can only give you a little video about XNA Shooter. I hope you like it.&lt;br&gt;
&lt;object width="425" height="350"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/3dlBRX6BHdU"&gt;&gt;&lt;embed src="http://www.youtube.com/v/3dlBRX6BHdU" type="application/x-shockwave-flash" width="425" height="350"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;p&gt;
A "little" 1920x1200 screenshot:&lt;br&gt;
&lt;a href="images/XnaShooterScreenshot0001.jpg"&gt;&lt;img src="images/XnaShooterScreenshot0001small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
These days there are a lot of discussions about XNA, especially in the GameDev.net
boards and of course in the official XNA forum by Microsoft.&lt;br&gt;
http://www.gamedev.net/community/forums/topic.asp?topic_id=430119&lt;br&gt;
http://forums.microsoft.com/msdn/showforum.aspx?forumid=846&lt;br&gt;
&lt;p&gt;
I also want to mention a great article by the .NET Compact Framework team about the
.NET performance on the Xbox 360 with the XNA Framework. The main issue here is the
Garbage Collector, which is not generational and theirfore can only collect all the
objects in the GC at once and not in 3 levels like in the normal .NET Framework, which
can handle a lot more dead objects and more complicated situations. 
&lt;p&gt;
Here are the links to the .NET Compact Framework on XNA article:&lt;br&gt;
&lt;a href="http://blogs.msdn.com/netcfteam/archive/2006/12/22/managed-code-performance-on-xbox-360-for-the-xna-framework-1-0.aspx"&gt;http://blogs.msdn.com/netcfteam/archive/2006/12/22/&lt;br&gt;
managed-code-performance-on-xbox-360-for-the-xna-framework-1-0.aspx&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://blogs.msdn.com/netcfteam/archive/2006/12/22/managed-code-performance-on-xbox-360-for-xna-part-2-gc-and-tools.aspx"&gt;http://blogs.msdn.com/netcfteam/archive/2006/12/22/&lt;br&gt;
managed-code-performance-on-xbox-360-for-xna-part-2-gc-and-tools.aspx&lt;/a&gt; 
&lt;p&gt;
From my experience there are a couple of things you have to remember when developing
XNA games on the Xbox 360. All of these issue are not a big deal on the PC, but they
can cost some extra time until you get them right. One of the main problems is that
if you develop your game on the PC only and then test it on the Xbox 360 only at the
end a lot of things may go wrong (bad performance on the .NET Compact Framework, UI
elements at the border of the screen, which are just not visible on some TVs, bad
Xbox 360 controller support, which is the main input device for Xbox 360s, etc.). 
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Test test test. This is the most important tip. Write unit tests and constantly test
them on your PC AND your Xbox 360. I keep 2 projects open at the same time (both of
them use the same files, but I only develop the PC solution and use the Xbox 360 solution
for deploying and testing only). Almost all of my classes have unit tests and I constantly
test them until they are completed.&lt;/li&gt;
&lt;li&gt;
Don't use foreach loops, especially not in tight render loops. This may sound a little
crazy since it does not matter on a PC game and todays CPUs are fast enough to handle
the creation and deletion of many thousand objects each frame, which most games don't
even need. But on the compact framework you will spam the memory even with things
like foreach loops because a new enumerator instance is created everytime you start
a foreach loop. After a while there will be a lot of dead objects, which have to be
collected. This can take some time and slow your game down immensely. The PC version
might run at over 200 frames, but your Xbox 360 version is stuck at something like
30-40 frames. Avoiding creation of new data each frame and avoiding foreach loops
(just replace them with normal for loops, it is mostly just 1 line of extra code)
can improve your performance by a factor of 100% or more.&lt;/li&gt;
&lt;li&gt;
In Arena Wars I never created any data during the game. All objects were created at
the beginning of each mission and they were reused (which was no big deal since the
game principle did not allow an infinite number of units, it always stayed around
the same because you get your money back from dead units to build new units). In later
project I did not care so much about creating new objects and I coded just the easy
way because unit tests drive you into a direction to quickly develop solutions, which
work and are tested, but may not be the best in other situations like for the Xbox
360 .NET Compact Framework. That is ok because we can now use the unit tests to check
if other solutions work just they way we expect them to work. For XNA Shooter and
XNA Racer (and a couple of other new game projects) I now make sure that most of the
game data is created at the beginning of each level and not dynamically during the
game.&lt;/li&gt;
&lt;li&gt;
Save-Regions on TVs can be a pain in the ass. Just google for Xbox 360 screenshots
and you will notice that the GUI (graphical user interface) looks a lot different
from most PC games. PC games have often UI at the screen border showing you tips,
little buttons and other not so important things. If you do that in your Xbox 360
game all of these UI elements may be cut of on a regular TV. For the XNA Shooter I
had to rework all the UI elements because they just did not fit on a TV screen and
it was not practical to put them in a bar (like the windows task bar) because it looks
so different on the PC and certain TV monitors. Instead I put all UI elements in floating
bars, which will be adjusted depending on the screen the user is looking at.&lt;br&gt;
These are some of the Save-Regions I have encountered:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
PC: 100% visible&lt;/li&gt;
&lt;li&gt;
Xbox 360 connected through a VGA cable: 100% (or close to 100%) visible.&lt;/li&gt;
&lt;li&gt;
Xbox 360 connected to an old style monitor with SCART: around 92% visible.&lt;/li&gt;
&lt;li&gt;
Xbox 360 connected through Component cables to my new Dell 24" Monitor (yeah HDTV):
around 93-95% visible (depends on the resolution).&lt;/li&gt;
&lt;li&gt;
Some old TV sets (according to the XNA docs and tips on the web) have a save region
of 80-90%, but I never saw the 80% case, that is probably the worst case scenario.&lt;/li&gt;
&lt;/ul&gt;
The important thing is to keep the important UI element in this inner 90% (or 93%
if you want to be close to the edges) rectangle. This means instead of using a full
1920x1080 pixel resolution you only use 90% of it (1728x945). Or just start rendering
UI elements at about 5% of the screen (x coordinate: 96, y coordinate: 54). This pixel
locations obviously depend on the screen resolution, just calculate them in your main
class and use them whenever you render UI. 
&lt;/li&gt;
&lt;li&gt;
There are probably a lot more tips I can give, but I'm to lazy right now. Maybe more
in a little while :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Btw: I currently also do a lot of OpenGL development again and I have to say I have
totally forgotten about the way you can program OpenGL. It is often a lot easier,
it only gets hard if something does not work the way you expect it to be (but thats
hard in DirectX too). Well, the most annoying part is of course that you have to wrap
all OpenGL methods through PInvoke and that just costs time. On the other hand if
you already have a robust framework (like I have with Arena Wars, hehe), it is relatively
easy to plug in new features. It also took not long to learn the differences between
glsl and hlsl. I do currently also test out the &lt;a href="http://www.nvidia.com"&gt;FX
Composer&lt;/a&gt; 2.0 (alpha), which has a great idea behind it, but it is too much like
Render Monkey and that is never a good thing. &lt;a href="http://www.ati.com"&gt;Render
Monkey&lt;/a&gt; by ATI is just overcomplicated and hard to use (and was not updated for
2 years, which shows that no one even uses it anymore). The great thing about FX Composer
1 was the fact it was so easy to use and it did only support a very limited feature
set. It is not the best tool ever, but it was certainly a lot easier to use than FX
Composer 2.0, which will hopefully be improved before NVidia release it.&lt;br&gt;
I have confidence that NVidia will deliver a great tool as always, but they have lost
a lot of fans in the last months because of the lack of drivers for Vista, especially
for the Geforce 8800, which does not work at all in Vista, but it is the only card
on the market that even supports Direct3D 10 (and the new cool unified shader technology
in DirectX). The only way you can currently use the new graphic card features is to
program them yourself natively with OpenGL ... but my 8800 is in repair anyway, else
I would have tried out some of the new features by now. 
&lt;p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=ce42019a-ceeb-452f-86bb-f7beec1a2964" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,ce42019a-ceeb-452f-86bb-f7beec1a2964.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=442152d0-a014-47de-b9b1-4e8aed1d9bd3</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,442152d0-a014-47de-b9b1-4e8aed1d9bd3.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,442152d0-a014-47de-b9b1-4e8aed1d9bd3.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=442152d0-a014-47de-b9b1-4e8aed1d9bd3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table align="right" border="0" cellspacing="10" width="310">
          <tbody>
            <tr>
              <td width="310">
                <a href="http://www.exdream.com">
                  <img src="images/ArenaWarsReloadedComingSoon.jpg" border="0" width="300" />
                </a>
                <br />
                <center>
                  <font size="-2">
                    <b>ArenaWars Reloaded - Coming Soon</b>
                  </font>
                </center>
              </td>
            </tr>
          </tbody>
        </table>
Hey now!<br /><br />
Before you read on (I guess this is going to be a long post) please also check out <a href="http://www.exdream.com">www.exDream.com</a>.
We made some pictures from our new office and we recently announced ArenaWars Reloaded
(see image on the right), a new game with a new graphic engine and many new cool features
based on the original Arena Wars idea (the game play and levels will be similar, but
look much better). 
<p>
My little Christmas present for you is the new port of Rocket Commander to the XNA
Framework. It allows you to play the popular Rocket Commander (113 000 played games
already can't be wrong) on your Xbox 360 for the first time. You just need an Xbox
360 and have XNA on there. Here are the downloads, the file sizes are are little bit
bigger than the original game (my comments are below):<br /></p><ul><li><a href="RocketCommanderXnaSetup.exe">Rocket Commander XNA on Windows (16 MB)</a>:
Includes Setup, that will automatically install DirectX Dec 2006 and the XNA Framework
if you don't have it yet!</li><li>
Rocket Commander XNA on the Xbox 360 cannot be redistributed. You currently have to
download the source code and run it in XNA Game Studio Express to even get it on your
Xbox. Once you have Rocket Commander XNA deployed with help of the XNA Launcher you
can start it anytime you want to without having your PC on or having to redeploy it.</li><li><a href="RocketCommanderXnaSourceCodeAndContent.zip">Full Rocket Commander XNA source
code (53 MB)</a>: All Content, Sound and Music files are included in this download,
this is all you need to compile and run the game on Windows and Xbox 360. The music
files are almost 50MB (5MB as mp3, which is not supported in XNA).</li><li><a href="RocketCommanderXnaSourceCodeOnly.zip">Rocket Commander XNA source code only
(213 KB)</a>. No content files (models, textures, sounds, etc.) in here, just the
.cs, .csproj, .sln and .fx files.</li></ul>
Update: 2007-01-03: Fixed some Bugs with the Input, PostScreenGlow and when device
loses focus. Works now more stable. Also cleaned up some of the source code. 
<p>
Note: Use RocketCommanderXna.sln to compile and run the game on Windows and RocketCommanderXnaXbox360.sln
to compile and deploy it to your Xbox 360. For additional details please read the
XNA documentation.<br /><br />
The game runs at a very good performance on the Xbox 360, you still got over 60 fps
in HDTV 1920x1050 (1080p) with full AA enabled. 
</p><p>
Check out some of the new screenshots. Warning, all of them are big, HDTV 1080p resolution.
Actually I could not capture any images from the Xbox 360 directly, which runs at
60fps on 1920x1050 and uses fullscreen Antialiasing and using the highest settings.
These screenshots are from my PC hooked up to my new 1920x1200 monitor, also nice
:)<br /></p><p>
The main menu. Not much happend here.<br /><a href="images/RocketCommanderXnaScreenshot0001.jpg"><img src="images/RocketCommanderXnaScreenshot0001small.jpg" border="0" /></a></p><p>
The ingame HUD and general user experience has changed a bit. There is also a new
object for the goal since creating a sphere dynamically is not that easy in XNA.<br /><a href="images/RocketCommanderXnaScreenshot0002.jpg"><img src="images/RocketCommanderXnaScreenshot0002small.jpg" border="0" /></a></p><p>
Rocket Commander is still fast and it pumps up your adrenaline even more in combination
with a big monitor :)<br /><a href="images/RocketCommanderXnaScreenshot0003.jpg"><img src="images/RocketCommanderXnaScreenshot0003small.jpg" border="0" /></a></p><p>
Another screenshot from the last level. Please note that you can see more asteroids
at the same time than in the original game. You can also look a lot farther and see
more items from great distances.<br /><a href="images/RocketCommanderXnaScreenshot0004.jpg"><img src="images/RocketCommanderXnaScreenshot0004small.jpg" border="0" /></a></p><p>
The explosion is unchanged. It still looks the same crappy way, but the AnimationTexture
class had to be reimplemented to work with XNA textures now.<br /><a href="images/RocketCommanderXnaScreenshot0005.jpg"><img src="images/RocketCommanderXnaScreenshot0005small.jpg" border="0" /></a></p><p><br />
Initially I thought "Hey, this is easy, let's port Rocket Commander to XNA.". The
initial port attempt was pretty good, it took only 3-4 days to port the 25 000+ lines
of code used in Rocket Commander. I could remove some classes and I also simplified
some classes, the total number of lines got smaller (~20 000 lines), but after adding
some new features and some new unit tests and some testing code for multithreading
it is about 22 000 lines of code, still less than the original. XNA is definately
the future, MDX was great, but it was not updated for a long time and if you start
something new, go with the fresh XNA Framework! 
</p><p>
Here are some of my experiences from the process of writing Rocket Commander XNA.
Please note that some of these comments were written while I was developing and kinda
sleep deprived. Beware of the harsh tone, in the end all worked out great :)<br /><font size="4" color="#00FF00">++</font> means this topic was great and better than
MDX.<br /><font size="4" color="#00FF00">+</font> means it was good and nice to work with.<br /><font size="4" color="#FF0000">-</font> means I did not like that feature or it was
easier in MDX.<br /><font size="4" color="#FF0000">--</font> means this was really annoying and should
be improved in the future. 
</p><p>
By the way: I did Rocket Commander XNA just for fun, but it also proves how great
XNA performs on the Xbox 360. Try to find any other game with this many polygons and
effects running in 1080p (1920x1080) with AA enabled on the Xbox 360 ^^ It does not
look as good as Gears of War or Halo 3, but it took only 1 man and a short time to
develop and it still pushes up to 80-100mio polys each second to the GPU (in some
early unit tests, the game runs fine with 20-30 mio polys per second most of the time,
check out the model class and its unit tests for more details).
</p><p>
I also use the Rocket Commander XNA engine for 2 other smaller projects because I
like the fact that I can test and play these games on the Xbox 360 too and having
a complete engine up and running is always a great plus, even if you know how to do
a game. It is just easier if you got all the basics covered. 
</p><p><table border="2"><tr><td><b>Topic</b></td><td><b>Rating</b></td><td><b>Comments</b></td></tr><tr><td>
Sound</td><td><font size="4" color="#00FF00">++</font></td><td>
Very easy to use, 1 short class instead of 2 complex ones I had in MDX. Once you get
used to XAct you learn that it is a good tool for sound effects, at least if they
don't have to be loaded dynamically. The porting process was very simple for sound
effect files, they just had to be dragged to XACT and then the project had to be saved,
that's it.</td></tr><tr><td>
Music</td><td><font size="4" color="#FF0000">--</font></td><td>
A lot of converting, different formats, hard to handle, a lot to test, bad documentation.
The music from RC was below 5 MB, now it is over 50 MB, which just blows up the source
code. Even the compressed take up 13 MB on the PC (ADPCM) and 9 MB on the Xbox 360
(XMA), both in a quality below the original. The rest of the game content (5MB compressed
textures, models, effects, sound, etc.) stayed almost the same and could be reused
for the most parts.</td></tr><tr><td>
Unit Testing</td><td><font size="4" color="#FF0000">-</font></td><td>
Harder to use on the Xbox 360, no edit and continue support in the compact .NET framework.
There are also no unit testing tools available and all you can do is to call static
unit tests from the program class, which is still useful, but harder to do. I still
prefer to test on windows. One great thing about the Xbox 360 is the fact that you
get multimonitor debugging for free if you have a TV screen and your PC screen. Debug
and step through code on your PC and see the result on the TV screen :)</td></tr><tr><td>
Window handling</td><td><font size="4" color="#00FF00">++</font></td><td>
No extra code required, I could remove several classes and even the helper classes
that are still in Rocket Commander Xna are not required for the most parts. Except
for some of the game component classes and the design that is not really useful (more
about that below) the Game class is really easy to use and simplifies the process
to create a new game in a few minutes.</td></tr><tr><td>
Shaders</td><td><font size="4" color="#00FF00">++</font></td><td>
Everything in XNA is shader based. The original Rocket Commander runs on fixed pipeline
only hardware too, but it was a lot of work to handle 2 ways to render everything.
With XNA you just have to write the shaders once and just use them. They work perfectly
on the PC (Shader Model 1.1 up to 3.0) and on the Xbox 360, all fx files compiled
without any problems.<p>
Some shaders had to be adjusted to be right-handed now instead of left-handed like
in MDX, but that did just take a few minutes to change and all the rest of the shader
code could be reused. In the last few months of XNA development I never had once a
problem with shaders in XNA, thats really great :)
</p></td></tr><tr><td>
IDE Features</td><td><font size="4" color="#FF0000">-</font></td><td>
MDX is much older and was never made popular by Microsoft. XNA is new, fresh and great,
but it is missing some serious features like Animations for Models. You can implement
it yourself, but why even bother with the content pipeline, do it all yourself. It
will be much easier and you can extend it in any way you need in the future.<p>
XNA development is currently also only avialable with XNA Game Studio Express, which
is painful if you are a pure Visual Studio 2005 Professional developer and have lots
of plugins you rely on every day (source code management, code rush, testdriven, slickedit,
explorer, and many more). This will change in the future and XNA will grow up and
dominate the whole world one day :)
</p></td></tr><tr><td>
Content</td><td><font size="4" color="#FF0000">--</font></td><td>
Sorry, I just don't like the content pipeline (and I have been using it for several
months now)! It is bad for dynamically loading textures or shaders or reloadindg them
after changes (just not possible with compile-time generated content). On the windows
platform you can still load textures and shaders the normal way, which is good, but
loading .x file models is just not possible, you have to use the content pipeline.
And the content pipeline sucks feature-wise, you have to implement all of stuff yourself.<p>
This is my main problem, why should I re-implement generating tangents, shader technique
indices, fixing other x file problems, etc. all by myself in a custom content processor,
which is not easy to write IMO (bad docu again). By the time I did all that I would
have implemented a much more flexible and vesatile custom importer like from .collada
files, which are very popular these days ...
</p></td></tr><tr><td>
Performance</td><td><font size="4" color="#00FF00">+</font></td><td>
The overall performance especially when just doing some benchmarks and performance
tests is absolutely perfect on both Windows and the Xbox 360. The GPU is pushed to
its limits and there is no reason why you should be afraid of managed code. Windows
performance is especially great, all my programs and games are completely GPU bound
even in low resolutions and even when they only have one thread. 
<p>
On the Xbox 360 the performance is much worse and you have to take many things into
consideration, which is hard because there is again not much documentation around.
For example the worst thing you can do on the Xbox 360 is to generate new data each
frame, even if you just create an enumerator by executing a foreach loop, it will
affect your performance. The good thing is that you have 3 cores (and 6 hardware threads)
at your fingertips, which allow you to optimize performance. It was possible for the
Rocket Commander game to optimize the game loop a lot because the physics and update
threads eat up almost 50% of the CPU time. On the PC it does not matter much because
my GPU is slowing everything down (see image below), but on the Xbox 360 I was able
to almost double the framerate using multiple threads, nice :) 
</p><p><a href="images/RCXnaMultithreaded.jpg"><img src="images/RCXnaMultithreadedsmall.jpg" border="0" /><br />
Click Image for to maximize it.</a></p></td></tr><tr><td>
Usability</td><td><font size="4" color="#FF0000">-</font></td><td>
It gets a little easier though all the game helper classes, but the game component
class is pretty useless, you can implement something like that in 5 minutes yourself.
There is also a DrawableGameComponent class, but you have to call Draw yourself, whats
the point here? My classes have some Draw or Render method anyway, I don't need to
derive them from GameComponent, I can implement my own interfaces and implement exactly
the features I need. Often it is easier to give the Render method a few parameters
or even call it several times with different parameters, all that is not possible
with DrawableGameComponent.<p>
Next there is the content pipeline, which is just a pain in the ass for 3d models.
This makes the usability very bad, especially if you develop on Visual Studio 2005
(not Express), which does not support the content pipeline. Also if you are a Vista-Developer
XNA Game Studio Express will also not run as expected and my intern hates now both
Vista and XNA. It should not happen that someone can get so angry about such great
pieces of software, just because they don't work together ^^
</p></td></tr><tr><td>
Porting</td><td><font size="4" color="#00FF00">+</font></td><td>
If you have written a XNA game or have some XNA code flying around (like the Rocket
Commander XNA source code) it is very easy to port existing MDX code to XNA. If you
do it from the scratch it is a lot more work and testing until everything works out
the way you expect it, but overall it is easy to port from MDX to XNA. Thats very
cool, thank <a href="http://blogs.msdn.com/tmiller/">the main MDX man Tom Miller</a> for
that, who architected parts of XNA too. Porting is easy, but getting the game to work
the way you want on the Xbox 360 is not that easy. First of all you got that annoying
content pipeline again (I keep repeating myself, maybe I'm too angry ^^), then you
have to make sure that you don't render important User Interface on the none-visible
area of a monitor that is plugged into a Xbox 360. For example Rocket Commander was
only designed for 1 resolution to look good, it had a very small font for some texts
on the screen, which is unreadable on TV monitors. Rocket Commander did also not scale
well on Widescreen monitors and it rendered a lot of UI elements at the screen borders,
which were cut off on TV monitors.<p>
The porting took maybe 3-4 days, but I spend at least 4 more days for fixing UI elments
and improving the code on the Xbox 360, optimizing asteroid rendering, physics and
multithreading. I did not expect that it would take that long and I had only some
time in the evenings to even get some XNA work done.
</p></td></tr><tr><td>
Most annoying</td><td></td><td>
Porting left-handed models, matrices and other complicated math functions over to
the right handed system that XNA uses. Maybe it would be easier to use left handed
matrices like in the original Rocket Commander for XNA too, but XNA does not provide
them and I did think getting it to work with a right handed system would be easier.
Then there is of course the problem getting the models into the content pipeline.
I used a special content processor, which is also included in the Rocket Commander
source code and it can be used for other projects too (I use it for everything I do
with XNA).<p>
Another annoying thing is the re-deploying of existing game content to the Xbox 360.
If you just have 5 files it will not matter to you, but if you got over 50 (Rocket
Commander) or even several hundert content files and sometimes due some crazy bug
all these files get re-compiled or re-deployed over and over again, it gets really
annoying. It takes 30-60 seconds and is not fun ... good think it does not happen
that often, but it is still annoying me. Maybe the main reason for regenerating the
content on my PC is the fact that I often switch between the Xbox 360 and Windows
platforms to test if everything is working the same way on both systems.
</p></td></tr><tr><td>
Missing features</td><td></td><td>
The XNA version does have all the features from the original Rocket Commander game,
including all levels, sub menus and the whole game play. It does not have animated
models however because it is not supported out of the box in XNA and I did not have
time to reimplement this feature. It does also not support polygon based collision
checking for asteroids, which can sometimes be annoying if you fly near asteroids
or if you want to fly through the donut asteroid. The problem here is that the mesh
intersection methods are missing, all you can do is render models, not much else.
Last but not least XNA does not support any network code. On the windows platform
it would be possible to still use the Webservice to upload and get highscores, but
for compatibility with the Xbox 360 the code is currently commented out. If you want
to play with online highscores, just play the original Rocket Commander game. 
<p>
There are also some smaller issues like getting the bitmap data of a texture on the
Xbox 360. There is method called GetData in the texture class, but it is not supported
on the Xbox 360. There is also no bitmap class in XNA because you would need the System.Windows.Forms
namespace, which is not included in the .NET compact framework. I ended up saving
the level data into a custom file (.level) and then loading it again with help of
standard IO methods (byte by byte, but the loading process is still fast, less than
1 second for all textures, levels, models and sounds). 
</p><p>
The Rocket Commander Mods are also not supported yet, but porting them should be easy
with the existing Rocket Commander XNA source code. 
</p></td></tr><tr><td>
Improvements</td><td></td><td>
The controls, especially for the Xbox 360 Controller have been improved. It is now
much easier to fly the rocket, the speed was increased and you can look at up to 4
times as much asteroids thanks to several optimizations and the great performance
gain of using multiple threads on the Xbox 360. There are also many smaller improvements
to the UI, the structure and some classes in the game, but the game looks still very
similar (see screenshots above).</td></tr></table><br />
Maybe I will write a little more next week. I should get some sleep now, in a few
hours it is christmas time and I have not packed any presents yet. 
</p><p>
Now have fun with Rocket Commander XNA and have a nice christmas of course ;-) 
</p><p>
PS: I know my blog has currently some problems (posting and comments do not work as
they should), I will fix that in a week or two, have currently not much time to investigate
this issue.<img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=442152d0-a014-47de-b9b1-4e8aed1d9bd3" /></p></body>
      <title>Your Christmas Present: Rocket Commander XNA</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,442152d0-a014-47de-b9b1-4e8aed1d9bd3.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/12/24/YourChristmasPresentRocketCommanderXNA.aspx</link>
      <pubDate>Sun, 24 Dec 2006 07:08:16 GMT</pubDate>
      <description>&lt;table align="right" border="0" cellspacing="10" width="310"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="310"&gt;
&lt;a href="http://www.exdream.com"&gt;&lt;img src="images/ArenaWarsReloadedComingSoon.jpg" border="0" width="300"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;center&gt;&lt;font size="-2"&gt;&lt;b&gt;ArenaWars Reloaded - Coming Soon&lt;/b&gt;&lt;/font&gt;
&lt;/center&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
Hey now!&lt;br&gt;
&lt;br&gt;
Before you read on (I guess this is going to be a long post) please also check out &lt;a href="http://www.exdream.com"&gt;www.exDream.com&lt;/a&gt;.
We made some pictures from our new office and we recently announced ArenaWars Reloaded
(see image on the right), a new game with a new graphic engine and many new cool features
based on the original Arena Wars idea (the game play and levels will be similar, but
look much better). 
&lt;p&gt;
My little Christmas present for you is the new port of Rocket Commander to the XNA
Framework. It allows you to play the popular Rocket Commander (113 000 played games
already can't be wrong) on your Xbox 360 for the first time. You just need an Xbox
360 and have XNA on there. Here are the downloads, the file sizes are are little bit
bigger than the original game (my comments are below):&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="RocketCommanderXnaSetup.exe"&gt;Rocket Commander XNA on Windows (16 MB)&lt;/a&gt;:
Includes Setup, that will automatically install DirectX Dec 2006 and the XNA Framework
if you don't have it yet!&lt;/li&gt;
&lt;li&gt;
Rocket Commander XNA on the Xbox 360 cannot be redistributed. You currently have to
download the source code and run it in XNA Game Studio Express to even get it on your
Xbox. Once you have Rocket Commander XNA deployed with help of the XNA Launcher you
can start it anytime you want to without having your PC on or having to redeploy it.&lt;/li&gt;
&lt;li&gt;
&lt;a href="RocketCommanderXnaSourceCodeAndContent.zip"&gt;Full Rocket Commander XNA source
code (53 MB)&lt;/a&gt;: All Content, Sound and Music files are included in this download,
this is all you need to compile and run the game on Windows and Xbox 360. The music
files are almost 50MB (5MB as mp3, which is not supported in XNA).&lt;/li&gt;
&lt;li&gt;
&lt;a href="RocketCommanderXnaSourceCodeOnly.zip"&gt;Rocket Commander XNA source code only
(213 KB)&lt;/a&gt;. No content files (models, textures, sounds, etc.) in here, just the
.cs, .csproj, .sln and .fx files.&lt;/li&gt;
&lt;/ul&gt;
Update: 2007-01-03: Fixed some Bugs with the Input, PostScreenGlow and when device
loses focus. Works now more stable. Also cleaned up some of the source code. 
&lt;p&gt;
Note: Use RocketCommanderXna.sln to compile and run the game on Windows and RocketCommanderXnaXbox360.sln
to compile and deploy it to your Xbox 360. For additional details please read the
XNA documentation.&lt;br&gt;
&lt;br&gt;
The game runs at a very good performance on the Xbox 360, you still got over 60 fps
in HDTV 1920x1050 (1080p) with full AA enabled. 
&lt;p&gt;
Check out some of the new screenshots. Warning, all of them are big, HDTV 1080p resolution.
Actually I could not capture any images from the Xbox 360 directly, which runs at
60fps on 1920x1050 and uses fullscreen Antialiasing and using the highest settings.
These screenshots are from my PC hooked up to my new 1920x1200 monitor, also nice
:)&lt;br&gt;
&lt;p&gt;
The main menu. Not much happend here.&lt;br&gt;
&lt;a href="images/RocketCommanderXnaScreenshot0001.jpg"&gt;&lt;img src="images/RocketCommanderXnaScreenshot0001small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
The ingame HUD and general user experience has changed a bit. There is also a new
object for the goal since creating a sphere dynamically is not that easy in XNA.&lt;br&gt;
&lt;a href="images/RocketCommanderXnaScreenshot0002.jpg"&gt;&lt;img src="images/RocketCommanderXnaScreenshot0002small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
Rocket Commander is still fast and it pumps up your adrenaline even more in combination
with a big monitor :)&lt;br&gt;
&lt;a href="images/RocketCommanderXnaScreenshot0003.jpg"&gt;&lt;img src="images/RocketCommanderXnaScreenshot0003small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
Another screenshot from the last level. Please note that you can see more asteroids
at the same time than in the original game. You can also look a lot farther and see
more items from great distances.&lt;br&gt;
&lt;a href="images/RocketCommanderXnaScreenshot0004.jpg"&gt;&lt;img src="images/RocketCommanderXnaScreenshot0004small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
The explosion is unchanged. It still looks the same crappy way, but the AnimationTexture
class had to be reimplemented to work with XNA textures now.&lt;br&gt;
&lt;a href="images/RocketCommanderXnaScreenshot0005.jpg"&gt;&lt;img src="images/RocketCommanderXnaScreenshot0005small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
&lt;br&gt;
Initially I thought "Hey, this is easy, let's port Rocket Commander to XNA.". The
initial port attempt was pretty good, it took only 3-4 days to port the 25 000+ lines
of code used in Rocket Commander. I could remove some classes and I also simplified
some classes, the total number of lines got smaller (~20 000 lines), but after adding
some new features and some new unit tests and some testing code for multithreading
it is about 22 000 lines of code, still less than the original. XNA is definately
the future, MDX was great, but it was not updated for a long time and if you start
something new, go with the fresh XNA Framework! 
&lt;p&gt;
Here are some of my experiences from the process of writing Rocket Commander XNA.
Please note that some of these comments were written while I was developing and kinda
sleep deprived. Beware of the harsh tone, in the end all worked out great :)&lt;br&gt;
&lt;font size=4 color=#00FF00&gt;++&lt;/font&gt; means this topic was great and better than MDX.&lt;br&gt;
&lt;font size=4 color=#00FF00&gt;+&lt;/font&gt; means it was good and nice to work with.&lt;br&gt;
&lt;font size=4 color=#FF0000&gt;-&lt;/font&gt; means I did not like that feature or it was easier
in MDX.&lt;br&gt;
&lt;font size=4 color=#FF0000&gt;--&lt;/font&gt; means this was really annoying and should be
improved in the future. 
&lt;p&gt;
By the way: I did Rocket Commander XNA just for fun, but it also proves how great
XNA performs on the Xbox 360. Try to find any other game with this many polygons and
effects running in 1080p (1920x1080) with AA enabled on the Xbox 360 ^^ It does not
look as good as Gears of War or Halo 3, but it took only 1 man and a short time to
develop and it still pushes up to 80-100mio polys each second to the GPU (in some
early unit tests, the game runs fine with 20-30 mio polys per second most of the time,
check out the model class and its unit tests for more details).&lt;p&gt;
I also use the Rocket Commander XNA engine for 2 other smaller projects because I
like the fact that I can test and play these games on the Xbox 360 too and having
a complete engine up and running is always a great plus, even if you know how to do
a game. It is just easier if you got all the basics covered. 
&lt;p&gt;
&lt;table border=2&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;b&gt;Topic&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;
&lt;b&gt;Rating&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;
&lt;b&gt;Comments&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Sound&lt;/td&gt;
&lt;td&gt;
&lt;font size=4 color=#00FF00&gt;++&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
Very easy to use, 1 short class instead of 2 complex ones I had in MDX. Once you get
used to XAct you learn that it is a good tool for sound effects, at least if they
don't have to be loaded dynamically. The porting process was very simple for sound
effect files, they just had to be dragged to XACT and then the project had to be saved,
that's it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Music&lt;/td&gt;
&lt;td&gt;
&lt;font size=4 color=#FF0000&gt;--&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
A lot of converting, different formats, hard to handle, a lot to test, bad documentation.
The music from RC was below 5 MB, now it is over 50 MB, which just blows up the source
code. Even the compressed take up 13 MB on the PC (ADPCM) and 9 MB on the Xbox 360
(XMA), both in a quality below the original. The rest of the game content (5MB compressed
textures, models, effects, sound, etc.) stayed almost the same and could be reused
for the most parts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Unit Testing&lt;/td&gt;
&lt;td&gt;
&lt;font size=4 color=#FF0000&gt;-&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
Harder to use on the Xbox 360, no edit and continue support in the compact .NET framework.
There are also no unit testing tools available and all you can do is to call static
unit tests from the program class, which is still useful, but harder to do. I still
prefer to test on windows. One great thing about the Xbox 360 is the fact that you
get multimonitor debugging for free if you have a TV screen and your PC screen. Debug
and step through code on your PC and see the result on the TV screen :)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Window handling&lt;/td&gt;
&lt;td&gt;
&lt;font size=4 color=#00FF00&gt;++&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
No extra code required, I could remove several classes and even the helper classes
that are still in Rocket Commander Xna are not required for the most parts. Except
for some of the game component classes and the design that is not really useful (more
about that below) the Game class is really easy to use and simplifies the process
to create a new game in a few minutes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Shaders&lt;/td&gt;
&lt;td&gt;
&lt;font size=4 color=#00FF00&gt;++&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
Everything in XNA is shader based. The original Rocket Commander runs on fixed pipeline
only hardware too, but it was a lot of work to handle 2 ways to render everything.
With XNA you just have to write the shaders once and just use them. They work perfectly
on the PC (Shader Model 1.1 up to 3.0) and on the Xbox 360, all fx files compiled
without any problems.&lt;p&gt;
Some shaders had to be adjusted to be right-handed now instead of left-handed like
in MDX, but that did just take a few minutes to change and all the rest of the shader
code could be reused. In the last few months of XNA development I never had once a
problem with shaders in XNA, thats really great :)
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
IDE Features&lt;/td&gt;
&lt;td&gt;
&lt;font size=4 color=#FF0000&gt;-&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
MDX is much older and was never made popular by Microsoft. XNA is new, fresh and great,
but it is missing some serious features like Animations for Models. You can implement
it yourself, but why even bother with the content pipeline, do it all yourself. It
will be much easier and you can extend it in any way you need in the future.&lt;p&gt;
XNA development is currently also only avialable with XNA Game Studio Express, which
is painful if you are a pure Visual Studio 2005 Professional developer and have lots
of plugins you rely on every day (source code management, code rush, testdriven, slickedit,
explorer, and many more). This will change in the future and XNA will grow up and
dominate the whole world one day :)
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Content&lt;/td&gt;
&lt;td&gt;
&lt;font size=4 color=#FF0000&gt;--&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
Sorry, I just don't like the content pipeline (and I have been using it for several
months now)! It is bad for dynamically loading textures or shaders or reloadindg them
after changes (just not possible with compile-time generated content). On the windows
platform you can still load textures and shaders the normal way, which is good, but
loading .x file models is just not possible, you have to use the content pipeline.
And the content pipeline sucks feature-wise, you have to implement all of stuff yourself.&lt;p&gt;
This is my main problem, why should I re-implement generating tangents, shader technique
indices, fixing other x file problems, etc. all by myself in a custom content processor,
which is not easy to write IMO (bad docu again). By the time I did all that I would
have implemented a much more flexible and vesatile custom importer like from .collada
files, which are very popular these days ...
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Performance&lt;/td&gt;
&lt;td&gt;
&lt;font size=4 color=#00FF00&gt;+&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
The overall performance especially when just doing some benchmarks and performance
tests is absolutely perfect on both Windows and the Xbox 360. The GPU is pushed to
its limits and there is no reason why you should be afraid of managed code. Windows
performance is especially great, all my programs and games are completely GPU bound
even in low resolutions and even when they only have one thread. 
&lt;p&gt;
On the Xbox 360 the performance is much worse and you have to take many things into
consideration, which is hard because there is again not much documentation around.
For example the worst thing you can do on the Xbox 360 is to generate new data each
frame, even if you just create an enumerator by executing a foreach loop, it will
affect your performance. The good thing is that you have 3 cores (and 6 hardware threads)
at your fingertips, which allow you to optimize performance. It was possible for the
Rocket Commander game to optimize the game loop a lot because the physics and update
threads eat up almost 50% of the CPU time. On the PC it does not matter much because
my GPU is slowing everything down (see image below), but on the Xbox 360 I was able
to almost double the framerate using multiple threads, nice :) 
&lt;p&gt;
&lt;a href="images/RCXnaMultithreaded.jpg"&gt;&lt;img src="images/RCXnaMultithreadedsmall.jpg" border="0"&gt;
&lt;br&gt;
Click Image for to maximize it.&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Usability&lt;/td&gt;
&lt;td&gt;
&lt;font size=4 color=#FF0000&gt;-&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
It gets a little easier though all the game helper classes, but the game component
class is pretty useless, you can implement something like that in 5 minutes yourself.
There is also a DrawableGameComponent class, but you have to call Draw yourself, whats
the point here? My classes have some Draw or Render method anyway, I don't need to
derive them from GameComponent, I can implement my own interfaces and implement exactly
the features I need. Often it is easier to give the Render method a few parameters
or even call it several times with different parameters, all that is not possible
with DrawableGameComponent.&lt;p&gt;
Next there is the content pipeline, which is just a pain in the ass for 3d models.
This makes the usability very bad, especially if you develop on Visual Studio 2005
(not Express), which does not support the content pipeline. Also if you are a Vista-Developer
XNA Game Studio Express will also not run as expected and my intern hates now both
Vista and XNA. It should not happen that someone can get so angry about such great
pieces of software, just because they don't work together ^^
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Porting&lt;/td&gt;
&lt;td&gt;
&lt;font size=4 color=#00FF00&gt;+&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
If you have written a XNA game or have some XNA code flying around (like the Rocket
Commander XNA source code) it is very easy to port existing MDX code to XNA. If you
do it from the scratch it is a lot more work and testing until everything works out
the way you expect it, but overall it is easy to port from MDX to XNA. Thats very
cool, thank &lt;a href="http://blogs.msdn.com/tmiller/"&gt;the main MDX man Tom Miller&lt;/a&gt; for
that, who architected parts of XNA too. Porting is easy, but getting the game to work
the way you want on the Xbox 360 is not that easy. First of all you got that annoying
content pipeline again (I keep repeating myself, maybe I'm too angry ^^), then you
have to make sure that you don't render important User Interface on the none-visible
area of a monitor that is plugged into a Xbox 360. For example Rocket Commander was
only designed for 1 resolution to look good, it had a very small font for some texts
on the screen, which is unreadable on TV monitors. Rocket Commander did also not scale
well on Widescreen monitors and it rendered a lot of UI elements at the screen borders,
which were cut off on TV monitors.&lt;p&gt;
The porting took maybe 3-4 days, but I spend at least 4 more days for fixing UI elments
and improving the code on the Xbox 360, optimizing asteroid rendering, physics and
multithreading. I did not expect that it would take that long and I had only some
time in the evenings to even get some XNA work done.
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Most annoying&lt;/td&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;td&gt;
Porting left-handed models, matrices and other complicated math functions over to
the right handed system that XNA uses. Maybe it would be easier to use left handed
matrices like in the original Rocket Commander for XNA too, but XNA does not provide
them and I did think getting it to work with a right handed system would be easier.
Then there is of course the problem getting the models into the content pipeline.
I used a special content processor, which is also included in the Rocket Commander
source code and it can be used for other projects too (I use it for everything I do
with XNA).&lt;p&gt;
Another annoying thing is the re-deploying of existing game content to the Xbox 360.
If you just have 5 files it will not matter to you, but if you got over 50 (Rocket
Commander) or even several hundert content files and sometimes due some crazy bug
all these files get re-compiled or re-deployed over and over again, it gets really
annoying. It takes 30-60 seconds and is not fun ... good think it does not happen
that often, but it is still annoying me. Maybe the main reason for regenerating the
content on my PC is the fact that I often switch between the Xbox 360 and Windows
platforms to test if everything is working the same way on both systems.
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Missing features&lt;/td&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;td&gt;
The XNA version does have all the features from the original Rocket Commander game,
including all levels, sub menus and the whole game play. It does not have animated
models however because it is not supported out of the box in XNA and I did not have
time to reimplement this feature. It does also not support polygon based collision
checking for asteroids, which can sometimes be annoying if you fly near asteroids
or if you want to fly through the donut asteroid. The problem here is that the mesh
intersection methods are missing, all you can do is render models, not much else.
Last but not least XNA does not support any network code. On the windows platform
it would be possible to still use the Webservice to upload and get highscores, but
for compatibility with the Xbox 360 the code is currently commented out. If you want
to play with online highscores, just play the original Rocket Commander game. 
&lt;p&gt;
There are also some smaller issues like getting the bitmap data of a texture on the
Xbox 360. There is method called GetData in the texture class, but it is not supported
on the Xbox 360. There is also no bitmap class in XNA because you would need the System.Windows.Forms
namespace, which is not included in the .NET compact framework. I ended up saving
the level data into a custom file (.level) and then loading it again with help of
standard IO methods (byte by byte, but the loading process is still fast, less than
1 second for all textures, levels, models and sounds). 
&lt;p&gt;
The Rocket Commander Mods are also not supported yet, but porting them should be easy
with the existing Rocket Commander XNA source code. 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Improvements&lt;/td&gt;
&lt;td&gt;
&lt;/td&gt;
&lt;td&gt;
The controls, especially for the Xbox 360 Controller have been improved. It is now
much easier to fly the rocket, the speed was increased and you can look at up to 4
times as much asteroids thanks to several optimizations and the great performance
gain of using multiple threads on the Xbox 360. There are also many smaller improvements
to the UI, the structure and some classes in the game, but the game looks still very
similar (see screenshots above).&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;br&gt;
Maybe I will write a little more next week. I should get some sleep now, in a few
hours it is christmas time and I have not packed any presents yet. 
&lt;p&gt;
Now have fun with Rocket Commander XNA and have a nice christmas of course ;-) 
&lt;p&gt;
PS: I know my blog has currently some problems (posting and comments do not work as
they should), I will fix that in a week or two, have currently not much time to investigate
this issue.&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=442152d0-a014-47de-b9b1-4e8aed1d9bd3" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,442152d0-a014-47de-b9b1-4e8aed1d9bd3.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=e8ab7145-6a43-474b-849a-6d44abb22cca</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,e8ab7145-6a43-474b-849a-6d44abb22cca.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,e8ab7145-6a43-474b-849a-6d44abb22cca.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e8ab7145-6a43-474b-849a-6d44abb22cca</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
Yesterday was the german developer price 2006 event (<a href="http://www.deutscher-entwicklerpreis.de">Deutscher
Entwicklerpreis 2006</a>) in Essen (Germany).<br /><p>
The Lichtburg (light castle) in Essen.<br /><a href="images/essen06_1.jpg"><img src="images/essen06_1small.jpg" border="0" /></a></p><p>
Miriam Pielhau (known from german TV, well at least if you watch german TV, I don't)
moderated the event together with the usual hosts (Aruba, politicians, other guys
from the german game developer scene).<br /><a href="images/essen06_2.jpg"><img src="images/essen06_2small.jpg" border="0" /></a></p><p>
Martin Kesici (Sat1, Superstars star or something, never saw him before either) did
make some music in a short break. Was neither great nor bad.<br /><a href="images/essen06_3.jpg"><img src="images/essen06_3small.jpg" border="0" /></a></p><p>
After about 10 prices were given to the developers almost 2 hours have passed and
the rest of the 30 prices had to be given out. In a IMO unprofessional manner everyone
just had to come on the stage and get his price. In a matter of minutes the rest of
the prices were given out. 
</p><p>
Then everyone left to the after-show party with more food, drinks and some games.<br /><a href="images/essen06_4.jpg"><img src="images/essen06_4small.jpg" border="0" /></a></p><p>
And Pong (actually it is called Plong) on the Xbox 360. It really shows how to use
the GPU correctly and have all 3 cores at full CPU load. The game looks actually a
lot worse, my bad camera just made it more beautiful because I always have a blur,
glow and motion blur effect on all my pics :)<br /><a href="images/essen06_5.jpg"><img src="images/essen06_5small.jpg" border="0" /></a></p><p>
Some angle girls dancing around. Reminded me of the song: Rammstein - Engel<br /><a href="images/essen06_6.jpg"><img src="images/essen06_6small.jpg" border="0" /></a></p><p>
And finally a little in-house fireworks show at the end. Always fun to watch.<br /><a href="images/essen06_7.jpg"><img src="images/essen06_7small.jpg" border="0" /></a></p><p>
All in all it was a nice and enjoyful event and it was nice to meet all the usual
faces again. If you want more photos check out: <a href="http://www.deutscher-entwicklerpreis.de">www.deutscher-entwicklerpreis.de</a><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=e8ab7145-6a43-474b-849a-6d44abb22cca" /></p></body>
      <title>German developer price: Deutscher Entwicklerpreis 2006 - Pics</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,e8ab7145-6a43-474b-849a-6d44abb22cca.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/12/14/GermanDeveloperPriceDeutscherEntwicklerpreis2006Pics.aspx</link>
      <pubDate>Thu, 14 Dec 2006 19:10:42 GMT</pubDate>
      <description>
Yesterday was the german developer price 2006 event (&lt;a href="http://www.deutscher-entwicklerpreis.de"&gt;Deutscher
Entwicklerpreis 2006&lt;/a&gt;) in Essen (Germany).&lt;br&gt;
&lt;p&gt;
The Lichtburg (light castle) in Essen.&lt;br&gt;
&lt;a href="images/essen06_1.jpg"&gt;&lt;img src="images/essen06_1small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
Miriam Pielhau (known from german TV, well at least if you watch german TV, I don't)
moderated the event together with the usual hosts (Aruba, politicians, other guys
from the german game developer scene).&lt;br&gt;
&lt;a href="images/essen06_2.jpg"&gt;&lt;img src="images/essen06_2small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
Martin Kesici (Sat1, Superstars star or something, never saw him before either) did
make some music in a short break. Was neither great nor bad.&lt;br&gt;
&lt;a href="images/essen06_3.jpg"&gt;&lt;img src="images/essen06_3small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
After about 10 prices were given to the developers almost 2 hours have passed and
the rest of the 30 prices had to be given out. In a IMO unprofessional manner everyone
just had to come on the stage and get his price. In a matter of minutes the rest of
the prices were given out. 
&lt;p&gt;
Then everyone left to the after-show party with more food, drinks and some games.&lt;br&gt;
&lt;a href="images/essen06_4.jpg"&gt;&lt;img src="images/essen06_4small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
And Pong (actually it is called Plong) on the Xbox 360. It really shows how to use
the GPU correctly and have all 3 cores at full CPU load. The game looks actually a
lot worse, my bad camera just made it more beautiful because I always have a blur,
glow and motion blur effect on all my pics :)&lt;br&gt;
&lt;a href="images/essen06_5.jpg"&gt;&lt;img src="images/essen06_5small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
Some angle girls dancing around. Reminded me of the song: Rammstein - Engel&lt;br&gt;
&lt;a href="images/essen06_6.jpg"&gt;&lt;img src="images/essen06_6small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
And finally a little in-house fireworks show at the end. Always fun to watch.&lt;br&gt;
&lt;a href="images/essen06_7.jpg"&gt;&lt;img src="images/essen06_7small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
All in all it was a nice and enjoyful event and it was nice to meet all the usual
faces again. If you want more photos check out: &lt;a href="http://www.deutscher-entwicklerpreis.de"&gt;www.deutscher-entwicklerpreis.de&lt;/a&gt; &lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=e8ab7145-6a43-474b-849a-6d44abb22cca" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,e8ab7145-6a43-474b-849a-6d44abb22cca.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=13224d73-3fa9-40df-b78f-9faacb3b15b1</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,13224d73-3fa9-40df-b78f-9faacb3b15b1.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,13224d73-3fa9-40df-b78f-9faacb3b15b1.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=13224d73-3fa9-40df-b78f-9faacb3b15b1</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://msdn.microsoft.com/directx/XNA/default.aspx">
          <img src="http://msdn.microsoft.com/directx/art/Hero/XNA_Hero_Banner2.jpg" border="0" />
        </a>
        <br />
        <br />
Microsoft released their <a href="http://msdn.microsoft.com/directx/XNA/default.aspx">XNA
Framework <span id="nointelliTXT">1.0 and XNA Game Studio Express
</span></a> today, which allow you to build games for Windows and the Xbox 360. To
compile and play your XNA games on the Xbox 360 you will need to join the "XNA Creators
Club" (for $49 per 4 months or $99 anually). There you will have access to additional
starter kits, features, etc.<br /><br />
I ported the Rocket Commander game to XNA, just for fun .. and it runs great. It is
optimized to run on all 3 cores of the Xbox 360 and I will finetune it a bit in the
next few days to run perfectly on the XNA 1.0 release. The performance is really good,
the current build has over 800 fps in PAL on the Xbox 360, in very high resolutions
(have only 1600x1200 monitor, but I will test it on 1920x1080 too later this week)
it still runs good with more than enough frames.<br /><br />
Here is a little preview picture, it shows about 8 times more asteroids and runs at
over 200 fps here. I will try to post some of the porting problems in the next few
days, for example all the network and internet code had to be ripped out from the
Xbox 360 build and the sound features are a little stripped down in XNA (no 3d listener
support, not easy or not even possible to do any stereo or surround sound, looks like
playback is all mono :-( ).<br /><br />
Early alpha screenshot of Rocket Commander XNA:<br /><img src="http://exdream.no-ip.info/blog/images/RocketCommanderXnaScreenshot0007.jpg" /><br /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=13224d73-3fa9-40df-b78f-9faacb3b15b1" /></body>
      <title>XNA Game Studio 1.0 released</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,13224d73-3fa9-40df-b78f-9faacb3b15b1.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/12/11/XNAGameStudio10Released.aspx</link>
      <pubDate>Mon, 11 Dec 2006 17:58:09 GMT</pubDate>
      <description>
&lt;a href="http://msdn.microsoft.com/directx/XNA/default.aspx"&gt;&lt;img src="http://msdn.microsoft.com/directx/art/Hero/XNA_Hero_Banner2.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Microsoft released their &lt;a href="http://msdn.microsoft.com/directx/XNA/default.aspx"&gt;XNA
Framework &lt;span id="nointelliTXT"&gt;1.0 and XNA Game Studio Express
&lt;/a&gt; today, which allow you to build games for Windows and the Xbox 360. To compile
and play your XNA games on the Xbox 360 you will need to join the "XNA Creators Club"
(for $49 per 4 months or $99 anually). There you will have access to additional starter
kits, features, etc.&lt;br&gt;
&lt;br&gt;
I ported the Rocket Commander game to XNA, just for fun .. and it runs great. It is
optimized to run on all 3 cores of the Xbox 360 and I will finetune it a bit in the
next few days to run perfectly on the XNA 1.0 release. The performance is really good,
the current build has over 800 fps in PAL on the Xbox 360, in very high resolutions
(have only 1600x1200 monitor, but I will test it on 1920x1080 too later this week)
it still runs good with more than enough frames.&lt;br&gt;
&lt;br&gt;
Here is a little preview picture, it shows about 8 times more asteroids and runs at
over 200 fps here. I will try to post some of the porting problems in the next few
days, for example all the network and internet code had to be ripped out from the
Xbox 360 build and the sound features are a little stripped down in XNA (no 3d listener
support, not easy or not even possible to do any stereo or surround sound, looks like
playback is all mono :-( ).&lt;br&gt;
&lt;br&gt;
Early alpha screenshot of Rocket Commander XNA:&lt;br&gt;
&lt;img src="http://exdream.no-ip.info/blog/images/RocketCommanderXnaScreenshot0007.jpg"&gt;
&lt;br&gt;
&gt; &lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=13224d73-3fa9-40df-b78f-9faacb3b15b1" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,13224d73-3fa9-40df-b78f-9faacb3b15b1.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=626c072e-5533-4803-81e7-4c358b322713</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,626c072e-5533-4803-81e7-4c358b322713.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,626c072e-5533-4803-81e7-4c358b322713.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=626c072e-5533-4803-81e7-4c358b322713</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">As I reported few days ago a nice guy named <b>Marc
Guevremont</b> made a pretty amazing Mod for the Rocket Commander Game called <b>Canyon
Commander</b>.<br /><br />
You can download the game (just 2.8 MB) and source code on<br /><a href="http://www.RocketCommander.com/mods.html">www.RocketCommander.com</a><p>
I also made a little video of the game play, which is similar to Rocket Commander
very fast and action packed :) 
<br /><object height="350" width="425"><param name="movie" value="http://www.youtube.com/v/iHL5OsMjj-g" /><embed src="http://www.youtube.com/v/iHL5OsMjj-g" type="application/x-shockwave-flash" height="350" width="600"></embed></object><font color="#a9a9a9" size="2"><br /><font color="#808080"> Text from <a href="http://www.RocketCommander.com">www.RocketCommander.com</a>:</font></font></p><p></p><h1><b>Canyon Commander</b></h1><a href="CanyonCommanderUpdate.exe"><img src="canyonpackung.png" border="0" /></a><p>
This Mod was created by Marc Guevremont and it really shows how extensible the Rocket
Commander engine is.<br />
New features include a completely new Landscape rendering algorithm and a very clever
way to build canyon levels.<br />
The mod also contains language files for german, english and french text support for
the first time.<br /></p><p>
The gameplay is basically the same as Rocket Commander, just collect all the items
and fly to the end of the levels.<br />
Because the game looks so much different, you will play it very different from Rocket
Commander.<br />
Instead of avoiding asteroids you have to fly through canyons and avoid flying into
a canyon wall.<br />
This may sound easy, but it is a lot harder than just avoiding some asteroids because
you can't see very far.<br /></p><p>
About the source code for this game: You can probably see quite easily that all the
namespaces are still intact<br />
and that most of the engine is unchanged, but if you take a look into the game namespace
you will see a lot of new<br />
classes. For the terrain rendering Marc implemented his own classes and he used the
basic dependencies from 
<br />
Rocket Commander to solve all the base rendering, physics and collision testing and
finally the game management.<br /></p><p>
Good job Marc, thanks for the effort. Everyone else: Have fun!
</p><p><br /><table border="0"><tbody><tr><td><b>Version 1.0 (16 November 2006) - 2.8 MB (requires Rocket Commander to be installed
first)</b><br /><ul><li>
www.RocketCommander.com Server:<br /><a href="http://exdream.no-ip.info/blog/CanyonCommanderUpdate.exe">Canyon Commander
V1.0 Installer (2.8 MB)</a><br /><a href="http://exdream.no-ip.info/blog/CanyonCommanderSourceCode.zip">Source code
to Canyon Commander V1.0 (259 kB).</a><br /></li></ul></td></tr></tbody></table><b>Screenshots:</b><br /><br /><a href="http://exdream.no-ip.info/blog/images/CanyonCommander1.jpg" target="screenshots"><img src="http://exdream.no-ip.info/blog/images/CanyonCommander1Small.jpg" /></a><br />
Canyon Commander main menu<br /><br /><a href="http://exdream.no-ip.info/blog/images/CanyonCommander2.jpg" target="screenshots"><img src="http://exdream.no-ip.info/blog/images/CanyonCommander2Small.jpg" /></a><br />
Canyon Commander first level<br /><br /><a href="http://exdream.no-ip.info/blog/images/CanyonCommander3.jpg" target="screenshots"><img src="http://exdream.no-ip.info/blog/images/CanyonCommander3Small.jpg" /></a><br />
Canyon Commander spiky canyon<br /><br /><a href="http://exdream.no-ip.info/blog/images/CanyonCommander4.jpg" target="screenshots"><img src="http://exdream.no-ip.info/blog/images/CanyonCommander4Small.jpg" /></a><br />
Canyon Commander avoid the mines<br /><br /></p><p><br /></p><p><br /></p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=626c072e-5533-4803-81e7-4c358b322713" /></body>
      <title>Canyon Commander Mod for Rocket Commander released!</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,626c072e-5533-4803-81e7-4c358b322713.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/11/17/CanyonCommanderModForRocketCommanderReleased.aspx</link>
      <pubDate>Fri, 17 Nov 2006 07:02:25 GMT</pubDate>
      <description>As I reported few days ago a nice guy named &lt;b&gt;Marc Guevremont&lt;/b&gt; made a pretty amazing
Mod for the Rocket Commander Game called &lt;b&gt;Canyon Commander&lt;/b&gt;.&lt;br&gt;
&lt;br&gt;
You can download the game (just 2.8 MB) and source code on&lt;br&gt;
&lt;a href="http://www.RocketCommander.com/mods.html"&gt;www.RocketCommander.com&lt;/a&gt; 
&lt;p&gt;
I also made a little video of the game play, which is similar to Rocket Commander
very fast and action packed :) 
&lt;br&gt;
&lt;object height="350" width="425"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/iHL5OsMjj-g"&gt;&lt;embed src="http://www.youtube.com/v/iHL5OsMjj-g" type="application/x-shockwave-flash" height="350" width="600"&gt;
&lt;/object&gt;
&lt;font color="#a9a9a9" size="2"&gt;
&lt;br&gt;
&lt;font color="#808080"&gt; Text from &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt;:&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Canyon Commander&lt;/b&gt;
&lt;/h1&gt;
&lt;a href="CanyonCommanderUpdate.exe"&gt;&lt;img src="canyonpackung.png" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
This Mod was created by Marc Guevremont and it really shows how extensible the Rocket
Commander engine is.&lt;br&gt;
New features include a completely new Landscape rendering algorithm and a very clever
way to build canyon levels.&lt;br&gt;
The mod also contains language files for german, english and french text support for
the first time.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
The gameplay is basically the same as Rocket Commander, just collect all the items
and fly to the end of the levels.&lt;br&gt;
Because the game looks so much different, you will play it very different from Rocket
Commander.&lt;br&gt;
Instead of avoiding asteroids you have to fly through canyons and avoid flying into
a canyon wall.&lt;br&gt;
This may sound easy, but it is a lot harder than just avoiding some asteroids because
you can't see very far.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
About the source code for this game: You can probably see quite easily that all the
namespaces are still intact&lt;br&gt;
and that most of the engine is unchanged, but if you take a look into the game namespace
you will see a lot of new&lt;br&gt;
classes. For the terrain rendering Marc implemented his own classes and he used the
basic dependencies from 
&lt;br&gt;
Rocket Commander to solve all the base rendering, physics and collision testing and
finally the game management.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Good job Marc, thanks for the effort. Everyone else: Have fun!
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;b&gt;Version 1.0 (16 November 2006) - 2.8 MB (requires Rocket Commander to be installed
first)&lt;/b&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
www.RocketCommander.com Server:&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/CanyonCommanderUpdate.exe"&gt;Canyon Commander
V1.0 Installer (2.8 MB)&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/CanyonCommanderSourceCode.zip"&gt;Source code
to Canyon Commander V1.0 (259 kB).&lt;/a&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;b&gt;Screenshots:&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/images/CanyonCommander1.jpg" target="screenshots"&gt;&lt;img src="http://exdream.no-ip.info/blog/images/CanyonCommander1Small.jpg"&gt;&lt;/a&gt;
&lt;br&gt;
Canyon Commander main menu&lt;br&gt;
&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/images/CanyonCommander2.jpg" target="screenshots"&gt;&lt;img src="http://exdream.no-ip.info/blog/images/CanyonCommander2Small.jpg"&gt;&lt;/a&gt;
&lt;br&gt;
Canyon Commander first level&lt;br&gt;
&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/images/CanyonCommander3.jpg" target="screenshots"&gt;&lt;img src="http://exdream.no-ip.info/blog/images/CanyonCommander3Small.jpg"&gt;&lt;/a&gt;
&lt;br&gt;
Canyon Commander spiky canyon&lt;br&gt;
&lt;br&gt;
&lt;a href="http://exdream.no-ip.info/blog/images/CanyonCommander4.jpg" target="screenshots"&gt;&lt;img src="http://exdream.no-ip.info/blog/images/CanyonCommander4Small.jpg"&gt;&lt;/a&gt;
&lt;br&gt;
Canyon Commander avoid the mines&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=626c072e-5533-4803-81e7-4c358b322713" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,626c072e-5533-4803-81e7-4c358b322713.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=e906a1f5-23d3-4142-8968-fec2307b2934</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,e906a1f5-23d3-4142-8968-fec2307b2934.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,e906a1f5-23d3-4142-8968-fec2307b2934.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e906a1f5-23d3-4142-8968-fec2307b2934</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Someone recorded XNA Racer, which was shown
at some Tokio Gameshow named "kotaku".<br /><br /><a href="http://www.kotaku.com/gaming/xna/clips-xna-racer-preview-213594.php">Here
is the original link.</a> Some harsh tone in those comments, no you don't have to
pay 99 dollars to play this game, it will be completly free. And about the "boring"
gameplay, hey it was not done, this was just an alpha preview and the game looks much
better now and is getting better physics and levels as we speak. Well, at least some
are comparing it to AAA titles, thats always nice (and totally crazy, you wouldn't
compare a house build by 1 guy to a scyscrapper).<br /><object height="350" width="425"><param name="movie" value="http://www.youtube.com/v/-OHJpeCwOmk" /><param name="wmode" value="transparent" /><embed src="http://www.youtube.com/v/-OHJpeCwOmk" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"></embed></object><br />
Thanks for posting about it to <a href="http://thezbuffer.com/">ZMan </a>and <a href="http://amapplease.blogspot.com/">Ultrahead</a>.<br /><br />
I guess I have to release a video of the game myself, these leaked videos look not
very pretty and showing off an early alpha version has its disadvantages (almost 90%
of the ingame objects are missing, the video shows the second track, which is not
done yet, completely dummy and it was an early alpha version, the game runs now about
3 times faster).<br /><br />
As some of you (like <a href="http://thezbuffer.com">ZMan</a>) already found out,
there is also an XNA book coming out written by me. I just started a few weeks back
writing it (but it will be complete by the end of the year). Funny you can already <a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779">order
it on amazon</a>. I will write more about it when its done. You will not only learn
about game programming and XNA, but there will be plenty of practical examples in
the book. In every of the 14 chapters a new game is introduced and you go though the
process of writing a game from start to finish.<br /><br /><a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"><img src="http://ec1.images-amazon.com/images/P/0470126779.01._AA240_SCLZZZZZZZ_V35843563_.jpg" border="0" /></a><br /><p></p><br />
One final note: Canyon Commander is a lot of fun, it is a new mod, which will come
out in the next days.<br /><img src="http://exdream.no-ip.info/blog/content/binary/CanyonCommander01_small.jpg" border="0" /><br /><br />
Btw: The Coding4Fun site was redesigned in the last weeks and most of the old links
do not work anymore (which is something MSDN usually never does). But now most of
the content is back and can be found in the new categories (Rocket Commander is under
Games -&gt; Arcade). I also updated the link on <a href="http://www.RocketCommander.com">www.RocketCommander.com</a> and
the link for the video tutorials is:<br /><a href="http://msdn.microsoft.com/coding4fun/gaming/arcade/article.aspx?articleid=997852">http://msdn.microsoft.com/coding4fun/gaming/arcade/article.aspx?articleid=997852</a><br /><br />
Update: The old link works now too, I guess the MSDN relinking system is working as
expected now :)<br /><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=e906a1f5-23d3-4142-8968-fec2307b2934" /></body>
      <title>That leaked XNA Racer Video on YouTube</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,e906a1f5-23d3-4142-8968-fec2307b2934.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/11/14/ThatLeakedXNARacerVideoOnYouTube.aspx</link>
      <pubDate>Tue, 14 Nov 2006 21:22:27 GMT</pubDate>
      <description>Someone recorded XNA Racer, which was shown at some Tokio Gameshow named "kotaku".&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.kotaku.com/gaming/xna/clips-xna-racer-preview-213594.php"&gt;Here
is the original link.&lt;/a&gt; Some harsh tone in those comments, no you don't have to
pay 99 dollars to play this game, it will be completly free. And about the "boring"
gameplay, hey it was not done, this was just an alpha preview and the game looks much
better now and is getting better physics and levels as we speak. Well, at least some
are comparing it to AAA titles, thats always nice (and totally crazy, you wouldn't
compare a house build by 1 guy to a scyscrapper).&lt;br&gt;
&lt;object height="350" width="425"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/-OHJpeCwOmk"&gt;
&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/-OHJpeCwOmk" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"&gt;
&lt;/object&gt;
&lt;br&gt;
Thanks for posting about it to &lt;a href="http://thezbuffer.com/"&gt;ZMan &lt;/a&gt;and &lt;a href="http://amapplease.blogspot.com/"&gt;Ultrahead&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
I guess I have to release a video of the game myself, these leaked videos look not
very pretty and showing off an early alpha version has its disadvantages (almost 90%
of the ingame objects are missing, the video shows the second track, which is not
done yet, completely dummy and it was an early alpha version, the game runs now about
3 times faster).&lt;br&gt;
&lt;br&gt;
As some of you (like &lt;a href="http://thezbuffer.com"&gt;ZMan&lt;/a&gt;) already found out,
there is also an XNA book coming out written by me. I just started a few weeks back
writing it (but it will be complete by the end of the year). Funny you can already &lt;a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"&gt;order
it on amazon&lt;/a&gt;. I will write more about it when its done. You will not only learn
about game programming and XNA, but there will be plenty of practical examples in
the book. In every of the 14 chapters a new game is introduced and you go though the
process of writing a game from start to finish.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.amazon.com/dp/0470126779?creativeASIN=0470126779"&gt;&lt;img src="http://ec1.images-amazon.com/images/P/0470126779.01._AA240_SCLZZZZZZZ_V35843563_.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;br&gt;
One final note: Canyon Commander is a lot of fun, it is a new mod, which will come
out in the next days.&lt;br&gt;
&lt;img src="http://exdream.no-ip.info/blog/content/binary/CanyonCommander01_small.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
Btw: The Coding4Fun site was redesigned in the last weeks and most of the old links
do not work anymore (which is something MSDN usually never does). But now most of
the content is back and can be found in the new categories (Rocket Commander is under
Games -&amp;gt; Arcade). I also updated the link on &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt; and
the link for the video tutorials is:&lt;br&gt;
&lt;a href="http://msdn.microsoft.com/coding4fun/gaming/arcade/article.aspx?articleid=997852"&gt;http://msdn.microsoft.com/coding4fun/gaming/arcade/article.aspx?articleid=997852&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Update: The old link works now too, I guess the MSDN relinking system is working as
expected now :)&lt;br&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=e906a1f5-23d3-4142-8968-fec2307b2934" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,e906a1f5-23d3-4142-8968-fec2307b2934.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=f672e94d-da4b-4305-9c96-8b68dbd18545</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,f672e94d-da4b-4305-9c96-8b68dbd18545.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,f672e94d-da4b-4305-9c96-8b68dbd18545.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f672e94d-da4b-4305-9c96-8b68dbd18545</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">This was my first day working at Microsoft.
Pretty interesting people work there and a lot of them. Good thing no one noticed
that I'm not able to remember 500 names per second. I was installing stuff half of
the day, but I found out more about XNA and already fixed some issues. Before talking
more about my day, here are some News: 
<p>
The XNA Team did a little 2 minute video of a couple of XNA games, my starter kit
XNA Racer (which I hadn't talked about yet in detail, but that will come soon) can
be seen at the end of the video. I got a lot of nice comments about that already :)
</p><br /><a href="http://www.majornelson.com/archive/2006/11/08/zune-video-xna-video-montage.aspx"><img src="content/binary/XnaRacer01_small.jpg" border="0" /></a><p>
Here is the link to the video (Major Nelson has a nice blog btw):<br /><a href="http://www.majornelson.com/archive/2006/11/08/zune-video-xna-video-montage.aspx">http://www.majornelson.com/archive/2006/11/08/zune-video-xna-video-montage.aspx</a><br />
And this is David Weller talking about it:<br /><a href="http://letskilldave.com/archive/2006/11/08/XNA-Video-Montage-_2300_1-is-ready-for-you_2100_.aspx">http://letskilldave.com/archive/2006/11/08/XNA-Video-Montage-_2300_1-is-ready-for-you_2100_.aspx</a><br /></p><p>
A nice guy from France with the name "Marc Guevremont" made yet another Rocket Commander
Mod and this one just looks impressive. He managed to implement a landscape engine
with shadow mapping (I guess precalculated). It looks very much like Rebel Assault.
The game itself is still similar to Rocket Commander, but it looks so much different
and he also made 3 cool levels. The game is called Canyon Commander and will hopefully
be available soon. 
<br /><a href="content/binary/CanyonCommander01.jpg"><img src="content/binary/CanyonCommander01_small.jpg" border="0" /></a></p><p>
More information, screenshots and a video can be found in the Rocket Commander Forums
and here: <a href="http://www.webs7.com/Canyon/">http://www.webs7.com/Canyon/</a></p><p>
I did not make many pictures today and it was to dark when we drove back to make any
useful pictures with my phone camera. 
</p><p>
Driving through Seattle.<br /><a href="content/binary/seattle2006_07.jpg"><img src="content/binary/seattle2006_07_small.jpg" border="0" /></a></p><p>
And going over the long Evergreen Point Floating Bridge between Seattle and Redmond.
It goes over the lake Washington and I couldn't get an answer if a Russian atom u-boot
could fit under the bridge.<br /><a href="content/binary/seattle2006_08.jpg"><img src="content/binary/seattle2006_08_small.jpg" border="0" /></a></p><p>
I was told that Bill Gates has his house somewhere on the right here, but you can't
see it, too much leaves.<br /><a href="content/binary/seattle2006_09.jpg"><img src="content/binary/seattle2006_09_small.jpg" border="0" /></a></p><p>
More pictures tomorrow.
</p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=f672e94d-da4b-4305-9c96-8b68dbd18545" /></body>
      <title>Seattle Day 1 and XNA Video and Canyon Commander</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,f672e94d-da4b-4305-9c96-8b68dbd18545.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/11/09/SeattleDay1AndXNAVideoAndCanyonCommander.aspx</link>
      <pubDate>Thu, 09 Nov 2006 05:08:20 GMT</pubDate>
      <description>This was my first day working at Microsoft. Pretty interesting people work there and a lot of them. Good thing no one noticed that I'm not able to remember 500 names per second. I was installing stuff half of the day, but I found out more about XNA and already fixed some issues. Before talking more about my day, here are some News:
&lt;p&gt;
The XNA Team did a little 2 minute video of a couple of XNA games, my starter kit
XNA Racer (which I hadn't talked about yet in detail, but that will come soon) can
be seen at the end of the video. I got a lot of nice comments about that already :)
&lt;/p&gt;
&lt;br&gt;
&lt;a href="http://www.majornelson.com/archive/2006/11/08/zune-video-xna-video-montage.aspx"&gt;&lt;img src="content/binary/XnaRacer01_small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;
Here is the link to the video (Major Nelson has a nice blog btw):&lt;br&gt;
&lt;a href="http://www.majornelson.com/archive/2006/11/08/zune-video-xna-video-montage.aspx"&gt;http://www.majornelson.com/archive/2006/11/08/zune-video-xna-video-montage.aspx&lt;/a&gt;
&lt;br&gt;
And this is David Weller talking about it:&lt;br&gt;
&lt;a href="http://letskilldave.com/archive/2006/11/08/XNA-Video-Montage-_2300_1-is-ready-for-you_2100_.aspx"&gt;http://letskilldave.com/archive/2006/11/08/XNA-Video-Montage-_2300_1-is-ready-for-you_2100_.aspx&lt;/a&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
A nice guy from France with the name "Marc Guevremont" made yet another Rocket Commander
Mod and this one just looks impressive. He managed to implement a landscape engine
with shadow mapping (I guess precalculated). It looks very much like Rebel Assault.
The game itself is still similar to Rocket Commander, but it looks so much different
and he also made 3 cool levels. The game is called Canyon Commander and will hopefully
be available soon. 
&lt;br&gt;
&lt;a href="content/binary/CanyonCommander01.jpg"&gt;&lt;img src="content/binary/CanyonCommander01_small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
More information, screenshots and a video can be found in the Rocket Commander Forums
and here: &lt;a href="http://www.webs7.com/Canyon/"&gt;http://www.webs7.com/Canyon/&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I did not make many pictures today and it was to dark when we drove back to make any
useful pictures with my phone camera. 
&lt;/p&gt;
&lt;p&gt;
Driving through Seattle.&lt;br&gt;
&lt;a href="content/binary/seattle2006_07.jpg"&gt;&lt;img src="content/binary/seattle2006_07_small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
And going over the long Evergreen Point Floating Bridge between Seattle and Redmond.
It goes over the lake Washington and I couldn't get an answer if a Russian atom u-boot
could fit under the bridge.&lt;br&gt;
&lt;a href="content/binary/seattle2006_08.jpg"&gt;&lt;img src="content/binary/seattle2006_08_small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I was told that Bill Gates has his house somewhere on the right here, but you can't
see it, too much leaves.&lt;br&gt;
&lt;a href="content/binary/seattle2006_09.jpg"&gt;&lt;img src="content/binary/seattle2006_09_small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
More pictures tomorrow.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=f672e94d-da4b-4305-9c96-8b68dbd18545" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,f672e94d-da4b-4305-9c96-8b68dbd18545.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=88152be1-c0ba-497e-a6f5-006c4ccca0f0</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,88152be1-c0ba-497e-a6f5-006c4ccca0f0.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,88152be1-c0ba-497e-a6f5-006c4ccca0f0.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=88152be1-c0ba-497e-a6f5-006c4ccca0f0</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
Hi everyone,<br /><br />
sorry for not posting anything for a long time now (last post is almost 2 months away).
I was very busy writing a new cool game with help of the <b>XNA Framework</b>, the
game will also be a starter kit in the upcoming <b>XNA Game Studio Express</b> release
and it looks really cool. More about that later ...<br /><br />
In the meantime our new causal games brand <a href="http://www.quicksandentertainment.de/">www.Quicksandentertainment.de</a> released <b>Pizza
Commander</b> on <a href="http://www.PizzaCommander.de">www.PizzaCommander.de</a> (<a href="http://exdream.no-ip.info/blog/PermaLink.aspx?guid=489a0cc2-19ee-4f42-b770-c7106b0f0253">I
talked about the game in August</a>) and a new game <b>Rocket Racer</b> was just released,
which is also based on the <b>Rocket Commander Engine</b>. You can check it out here: <a href="http://www.rocketracer.de">www.RocketRacer.de</a><br />
For both games there is a demo available (just 20 MB), so you can check out the game
and see if you like it. The full version is currently only available in Germany and
Poland, but we keep searching for more publishers and continue to release it worldwide
:)<br /><br />
In <b>Rocket Racer</b> you fly around with your Rocket and it feels very similar as
Rocket Commander at first, but it has a lot of new graphics and effects. After a while
you will see that just flying around will not do it, you have to fly through gates
to get time and more points. If your time runs out, you die. The levels are quite
challenging and I played the game over 10 times now from start to finish and it still
is fun :D Well, call me crazy.<br /><br /><p>
In the meantime the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c72d9f1e-53f3-4747-8490-6801d8e8b4ef&amp;DisplayLang=en">new
DirectX SDK October 2006</a> came out. It features now a better PIX tool and makes
it possible to debug shaders directly from your applications, which might be useful
for Managed DirectX applications. Managed DirectX 2.0 is now also removed and will
not work anymore (e.g. NormalMapCompressor v1.4 will not work anymore, use NormalMapCompressor
v1.3 or v1.2).<br /><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=D625324C-59B4-4951-849E-640B508DC442&amp;displaylang=en"><img src="pics/directx.jpg" border="0" /></a></p><p><a href="http://blogs.msdn.com/xna/archive/2006/10/23/announcing-xna-game-studio-express-beta-2.aspx">Microsoft
also announced a few days ago</a> that there will be a <b>second XNA beta</b> in a
few weeks, while the final release is going to happen later this year (which means
december and before the holidays). The new beta will include many new cool features,
for example the content pipeline and support for model files and also a lot more help
and documentation.
</p>
More information about <b>XNA</b>, tips, my development diaries and the new upcoming
XNA Starter Kit Game I wrote will come soon :)<br /></td>
              <td valign="top">
                <font size="-2">
                  <center>
                    <a href="http://www.RocketRacer.de">Rocket Racer</a> Screenshot 1:<br /><a href="http://www.rocketracer.de/images/RocketRacer03.jpg"><img src="http://www.rocketracer.de/images/RocketRacer03_.jpg" border="0" /></a><br /><br />
Rocket Racer Screenshot 2:<br /><a href="http://www.rocketracer.de/images/RocketRacer01.jpg"><img src="http://www.rocketracer.de/images/RocketRacer01_.jpg" border="0" /></a><br /><br />
Rocket Racer Screenshot 3:<br /><a href="http://www.rocketracer.de/images/RocketRacer10.jpg"><img src="http://www.rocketracer.de/images/RocketRacer10_.jpg" border="0" /></a><br /><br />
Pizza Commander Screenshot:<br /><a href="http://www.quicksandentertainment.de/images/pizza1.jpg"><img src="images/pizza_small.jpg" border="0" width="220" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=88152be1-c0ba-497e-a6f5-006c4ccca0f0" />
      </body>
      <title>Long time, no see</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,88152be1-c0ba-497e-a6f5-006c4ccca0f0.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/10/27/LongTimeNoSee.aspx</link>
      <pubDate>Fri, 27 Oct 2006 14:43:20 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Hi everyone,&lt;br&gt;
&lt;br&gt;
sorry for not posting anything for a long time now (last post is almost 2 months away).
I was very busy writing a new cool game with help of the &lt;b&gt;XNA Framework&lt;/b&gt;, the
game will also be a starter kit in the upcoming &lt;b&gt;XNA Game Studio Express&lt;/b&gt; release
and it looks really cool. More about that later ...&lt;br&gt;
&lt;br&gt;
In the meantime our new causal games brand &lt;a href="http://www.quicksandentertainment.de/"&gt;www.Quicksandentertainment.de&lt;/a&gt; released &lt;b&gt;Pizza
Commander&lt;/b&gt; on &lt;a href="http://www.PizzaCommander.de"&gt;www.PizzaCommander.de&lt;/a&gt; (&lt;a href="http://exdream.no-ip.info/blog/PermaLink.aspx?guid=489a0cc2-19ee-4f42-b770-c7106b0f0253"&gt;I
talked about the game in August&lt;/a&gt;) and a new game &lt;b&gt;Rocket Racer&lt;/b&gt; was just released,
which is also based on the &lt;b&gt;Rocket Commander Engine&lt;/b&gt;. You can check it out here: &lt;a href="http://www.rocketracer.de"&gt;www.RocketRacer.de&lt;/a&gt;
&lt;br&gt;
For both games there is a demo available (just 20 MB), so you can check out the game
and see if you like it. The full version is currently only available in Germany and
Poland, but we keep searching for more publishers and continue to release it worldwide
:)&lt;br&gt;
&lt;br&gt;
In &lt;b&gt;Rocket Racer&lt;/b&gt; you fly around with your Rocket and it feels very similar as
Rocket Commander at first, but it has a lot of new graphics and effects. After a while
you will see that just flying around will not do it, you have to fly through gates
to get time and more points. If your time runs out, you die. The levels are quite
challenging and I played the game over 10 times now from start to finish and it still
is fun :D Well, call me crazy.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
In the meantime the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c72d9f1e-53f3-4747-8490-6801d8e8b4ef&amp;amp;DisplayLang=en"&gt;new
DirectX SDK October 2006&lt;/a&gt; came out. It features now a better PIX tool and makes
it possible to debug shaders directly from your applications, which might be useful
for Managed DirectX applications. Managed DirectX 2.0 is now also removed and will
not work anymore (e.g. NormalMapCompressor v1.4 will not work anymore, use NormalMapCompressor
v1.3 or v1.2).&lt;br&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=D625324C-59B4-4951-849E-640B508DC442&amp;amp;displaylang=en"&gt;&lt;img src="pics/directx.jpg" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.msdn.com/xna/archive/2006/10/23/announcing-xna-game-studio-express-beta-2.aspx"&gt;Microsoft
also announced a few days ago&lt;/a&gt; that there will be a &lt;b&gt;second XNA beta&lt;/b&gt; in a
few weeks, while the final release is going to happen later this year (which means
december and before the holidays). The new beta will include many new cool features,
for example the content pipeline and support for model files and also a lot more help
and documentation.
&lt;/p&gt;
More information about &lt;b&gt;XNA&lt;/b&gt;, tips, my development diaries and the new upcoming
XNA Starter Kit Game I wrote will come soon :)&lt;br&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;&lt;a href="http://www.RocketRacer.de"&gt;Rocket Racer&lt;/a&gt; Screenshot 1:&lt;br&gt;
&lt;a href="http://www.rocketracer.de/images/RocketRacer03.jpg"&gt;&lt;img src="http://www.rocketracer.de/images/RocketRacer03_.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Rocket Racer Screenshot 2:&lt;br&gt;
&lt;a href="http://www.rocketracer.de/images/RocketRacer01.jpg"&gt;&lt;img src="http://www.rocketracer.de/images/RocketRacer01_.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Rocket Racer Screenshot 3:&lt;br&gt;
&lt;a href="http://www.rocketracer.de/images/RocketRacer10.jpg"&gt;&lt;img src="http://www.rocketracer.de/images/RocketRacer10_.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Pizza Commander Screenshot:&lt;br&gt;
&lt;a href="http://www.quicksandentertainment.de/images/pizza1.jpg"&gt;&lt;img src="images/pizza_small.jpg" border="0" width="220"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=88152be1-c0ba-497e-a6f5-006c4ccca0f0" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,88152be1-c0ba-497e-a6f5-006c4ccca0f0.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=44339eda-86da-4a2d-ae94-9387aad9c178</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,44339eda-86da-4a2d-ae94-9387aad9c178.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,44339eda-86da-4a2d-ae94-9387aad9c178.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=44339eda-86da-4a2d-ae94-9387aad9c178</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <title>Quick Tips for XNA Beta 1 (aka My Own XNA FAQ)</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,44339eda-86da-4a2d-ae94-9387aad9c178.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/08/31/QuickTipsForXNABeta1AkaMyOwnXNAFAQ.aspx</link>
      <pubDate>Thu, 31 Aug 2006 06:07:47 GMT</pubDate>
      <description>&lt;a href="http://msdn.microsoft.com/directx/xna/"&gt;&lt;img src="images/XnaLogo.jpg" border="0"&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/directx/xna/gse/"&gt;Download XNA Beta1&lt;/a&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=846&amp;amp;SiteID=1"&gt;XNA
Framework Forum&lt;/a&gt; and &lt;a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=882&amp;amp;SiteID=1"&gt;XNA
Game Studio Express Forum&lt;/a&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
Getting Started: Open C# Express (which is XNA Game Studio), Help-&amp;gt;Content-&amp;gt;Select
XNA and navigate to Getting Started with XNA and read through &lt;b&gt;Your First XNA Game&lt;/b&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
Next you could try out the &lt;b&gt;Space War Starter Kit&lt;/b&gt; Game. If you can't control
the game read &lt;a href="http://www.xnaspot.com/Tutorial_GettingStarted.aspx"&gt;this tutorial
from xnaspot.com&lt;/a&gt; about changing it to support keyboard input.&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
x64 Bit platform support: Read &lt;a href="http://exdream.no-ip.info/blog/PermaLink.aspx?guid=8962e9a7-3185-438d-882a-e8e919771dc2"&gt;this
blog entry&lt;/a&gt; for an easy fix. Basically just add &lt;font color="#0000ff"&gt;&amp;lt;PlatformTarget&amp;gt;x86&amp;lt;/PlatformTarget&amp;gt;&lt;/font&gt; to
your csproj file.&lt;br&gt;
Or download and extract &lt;a href="http://exdream.no-ip.info/blog/Xna64BitSupport.zip"&gt;this
file (Xna64BitSupport.zip 14 KB)&lt;/a&gt; into:&lt;br&gt;
&lt;font color="#808080"&gt;C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\VCSExpress\&lt;/font&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
Blogs:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/xna/"&gt;http://blogs.msdn.com/xna/&lt;/a&gt; XNA Team blog
to get news from the makers 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://xbox360homebrew.com/"&gt;http://xbox360homebrew.com/&lt;/a&gt; XBOX 360 Homebrew,
quite good 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://thezbuffer.com/"&gt;http://thezbuffer.com/&lt;/a&gt; Always a good resource,
biggest MDX site ever 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://letskilldave.com/"&gt;http://letskilldave.com/&lt;/a&gt; Let's Kill Dave! Davil
Weller about XNA. He posts a lot of interessting things. 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/tmiller/"&gt;http://blogs.msdn.com/tmiller/&lt;/a&gt; Tom Millers
Blog, yeah, this is the MDX father of all things :) 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/mitchw/"&gt;http://blogs.msdn.com/mitchw/&lt;/a&gt; Mitch Walker,
one of the XNA guys 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/al_msft/"&gt;http://blogs.msdn.com/al_msft/&lt;/a&gt; Albert
Ho, XNA Redux, another XNA guy 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/mklucher/default.aspx"&gt;http://blogs.msdn.com/mklucher/default.aspx&lt;/a&gt; Michael
Klucher's XNA Blog, guess what, another XNA guy 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/shawnhar/default.aspx"&gt;http://blogs.msdn.com/shawnhar/default.aspx&lt;/a&gt; Shawn
Hargreaves Blog, Game programming, C#, and the XNA Framework Content Pipeline 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/rickhos/default.aspx"&gt;http://blogs.msdn.com/rickhos/default.aspx&lt;/a&gt; Rick
Hoskinson's Blog about XNA 
&lt;/li&gt;
&lt;li&gt;
And there are many more, but who's got the time ^^ 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
Tutorials:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.xnadevelopment.com/"&gt;http://www.xnadevelopment.com/&lt;/a&gt; XNA Development,
Tutorials and Co 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://learn-xna.com/default.aspx"&gt;http://learn-xna.com/default.aspx&lt;/a&gt; Learn
XNA I guess, not much there yet 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.xnaspot.com/"&gt;http://www.xnaspot.com/&lt;/a&gt; XNA Spot, got already
a nice tutorial about Getting started with the Space War Starter Kit 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
Interessting reads:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/directx/XNA/default.aspx"&gt;http://msdn.microsoft.com/directx/XNA/default.aspx&lt;/a&gt; XNA
Info and FAQ 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://forums.microsoft.com/msdn/default.aspx?forumgroupid=20&amp;amp;siteid=1"&gt;http://forums.microsoft.com/msdn/default.aspx?forumgroupid=20&amp;amp;siteid=1&lt;/a&gt; XNA
Forums 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://makeitbigingames.com/blog/?p=34"&gt;http://makeitbigingames.com/blog/?p=34&lt;/a&gt; XNA
Game Studio Express Doubters Get It Wrong 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://xbox360homebrew.com/blogs/homebrew360/archive/2006/08/24/75.aspx"&gt;http://xbox360homebrew.com/blogs/homebrew360/archive/2006/08/24/75.aspx&lt;/a&gt; Hearing
some Audio from the Games Convention in Leipzig (scroll to 48:00 minutes). It demonstrates
basically a Torque X game with XNA, but its quite interessting. 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=634578&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=634578&amp;amp;SiteID=1&lt;/a&gt; Forum
post about Xbox 360 Official Dev Kit vs. "the XNA thing" 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=684005&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=684005&amp;amp;SiteID=1&lt;/a&gt; Pretty
negative post about XNA, he wants to stay with c++ and DX (ever heard of MDX?)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
And now finally my own thoughts and tips:&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;How to render fonts like with Direct3D.Font?&lt;/b&gt;
&lt;p&gt;
Well, thats not possible, there are not Font classes in XNA at all yet! You have to
create your own font code by rendering bitmap fonts. If you want to see some code
about that check out the SpaceWar Starter Kit and look inside the Font.cs class. The
fonts in SpaceWar just contain numbers, but the game contains some text. How did they
do that? Well, they just put most of the text in the game directly onto the textures,
buttons, etc.&lt;br&gt;
&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=683983&amp;amp;SiteID=1"&gt;Here
is also a forum post&lt;/a&gt; about this issue and some source code, which might help. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;How to play sounds?&lt;/b&gt;
&lt;p&gt;
Thats quite easy, create sounds with XAct, load them in your game and then use the
SoundBank class to play your sounds. Some tutorials can be found in the help and a
simple example is in the Sound.cs file in SpaceWar Starter Kit. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Okay, where do I add my mp3 for some music playback?&lt;/b&gt;
&lt;p&gt;
Could you stop asking this questions? Arg, I'm asking myself this, oh no. But I guess
sooner or later this would come up anyway. Well the solution? There is none. No, I'm
not kidding. There is no support for mp3, wma or CD playback of music in XNA. On the
windows platform you could use some external stuff (DirectShow, MCI, external libraries,
etc.), but on the XBox360 you are stuck with XAct, which does just support sound effect
files.
&lt;/p&gt;
&lt;p&gt;
Ok, then just let add the .mp3 as a .wav file there. Yup, thats possible, but consider
your game size. If your binaries are maybe 1MB, textures 5-10MB and sounds 2MB you
don't want to add 3*50MB for 3 music files. I had quite a long discussion with some
music artist about this issue and we agreed that it would be best to do try out some
22kHz mono sounds for the music for a smaller game size. Don't even try to think about
any compression, the only format that XAct eats is PCM .Wav files. Sample them down
or live with mega-files, your choice ... 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;How to add Controller (Mouse, Keyboard, XBox360 Controller) support?&lt;/b&gt;
&lt;p&gt;
Again, this is not hard stuff. If you have worked with XInput before, this will be
easy for you. Otherwise just read the XNA Programming Guide-&amp;gt;Input pages, which
all contain easy to work with code samples. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;How to show a mouse cursor?&lt;/b&gt;
&lt;p&gt;
You might notice that there is no mouse cursor in the samples, starter kit or any
new project you create. The reason for this is that by default the Game.IsMouseVisible
is set to false. If you set it to true (e.g. in your game constructor) you will see
the mouse cursor again (write: &lt;b&gt;this.IsMouseVisible = true;&lt;/b&gt;). Another way would
be to display your own custom mouse cursor as a sprite at the current mouse position
(see help to get mouse position, it is quit easy). 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;How to capture keyboard text?&lt;/b&gt;
&lt;p&gt;
Well, thats not that easy. You can only check the state of each button (mouse, keyboard,
whatever), but you can't get the text directly like with the OnKeyPress event in window
forms. One way would be to write your own custom text handling, like this:&lt;br&gt;
&lt;br&gt;
&lt;code&gt;&lt;font color="#0000ff"&gt; string chatText = "";&lt;br&gt;
List&lt;/font&gt;
&lt;keys&gt;
&lt;font color="#0000ff"&gt; keysLastFrame = new List&lt;/font&gt;
&lt;keys&gt;
&lt;font color="#0000ff"&gt;();&lt;br&gt;
&lt;br&gt;
...&lt;br&gt;
&lt;br&gt;
Keys[] keysNow = Keyboard.GetState().GetPressedKeys();&lt;br&gt;
foreach (Keys key in keysNow)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (keysLastFrame.Contains(key) == false)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; chatText += key.ToString();&lt;br&gt;
keysLastFrame = new List&lt;/font&gt; 
&lt;keys&gt;
&lt;font color="#0000ff"&gt;(keysNow);&lt;/font&gt;
&lt;br&gt;
&lt;/keys&gt;
&lt;/keys&gt;
&lt;/keys&gt;
&lt;/code&gt; 
&lt;br&gt;
But this has the disadvantage if you run low on frames or the user types very fast
you might miss some keys (test this by adding Thread.Sleep(50)), which really sucks.
It is also a bit of work to get all the special keys, shift combinations, backspace,
etc. working. For windows apps it might be wise to think about capuring the keyboard
directly with some dummy form (very easy to get text then with OnKeyPress). Another
approach would be to create an extra thread just for handling the keyboard at a high
rate to make sure you catch all the keys. More about this solution can be found in &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=683173&amp;amp;SiteID=1"&gt;this
post&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;What about drawing lines, boxes or other simple 2d stuff?&lt;/b&gt;
&lt;p&gt;
Oh no, this is one of the parts that is really annoying and this does require some
rethinking because all this kind of rendering was done with help of the fixed function
pipeline (hello DirectX 7), which is no longer supported in XNA. It was never easy
in DirectX to draw lines or filled boxes, you had to create your own vertex buffer
or just draw some primitives and set all kinds of renderstages, but with XNA this
gets even more complicated. Better not tell anyone how simple this is in OpenGL (glLine
anyone ^^). 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt; So how can we draw some lines in 3d?&lt;/b&gt; 
&lt;/p&gt;
&lt;p&gt;
Again: It is very important to know that you have to do EVERYTHING with shaders! The
Sprite classes are just some helpers, but for 3d you need shaders, nothing else will
work! I say this that often because many people in the XNA Forum already having problems
rendering data and do not understand that if you don't have a shader around your rendering
code, nothing will happen! Additionally you have to make sure you pass all the required
data to your shader, there is a lot more work involved that just rendering some primitives
in DirectX using the fixed function pipeline.
&lt;/p&gt;
&lt;p&gt;
I will try to keep this as short as possible, but you will see this is quite a lot
of code for just rendering a single line. Here we go. We start with the variables
we need (add to your Game class):
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;font color="#0000ff"&gt; Matrix Projection = Matrix.Identity,&lt;br&gt;
View = Matrix.Identity;&lt;br&gt;
Vector3 pos1 = new Vector3(0, 0, 0),&lt;br&gt;
pos2 = new Vector3(100, 100, 100);&lt;br&gt;
VertexPositionColor[] lineVertices =&lt;br&gt;
new VertexPositionColor[2];&lt;br&gt;
lineVertices[0] = new VertexPositionColor(pos1, Color.Red);&lt;br&gt;
lineVertices[1] = new VertexPositionColor(pos2, Color.Yellow);&lt;br&gt;
&lt;br&gt;
Effect effect = null;&lt;br&gt;
EffectParameter worldViewProj = null;&lt;/font&gt; 
&lt;br&gt;
&lt;/code&gt; 
&lt;/p&gt;
&lt;p&gt;
We will use the Projection and View to calculate the worldViewProj matrix for our
shader to convert the 3d coordinates to 2d (yep, I told you, we have to do everything
ourself). If you want some camera control, always update the View matrix, which again
you have to manage yourself (hello XNA team, some help with this basic stuff plz).
Ok, lets continue before I explode, here is the initialization code (copy to your
Game constructor):
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;font color="#0000ff"&gt; float aspectRatio = (float)TestGame.Width / (float)TestGame.Height;&lt;br&gt;
Projection = Matrix.CreatePerspectiveFieldOfView(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (float)Math.PI / 2, aspectRatio, 0.1f, 1000.0f);&lt;br&gt;
View = Matrix.CreateLookAt(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; new Vector3(0, 0, -50), Vector3.Zero, Vector3.Up);&lt;br&gt;
&lt;br&gt;
CompiledEffect compiledEffect = Effect.CompileEffectFromFile(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Shaders\\LineRendering.fx", null, null, CompilerOptions.None,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; TargetPlatform.Windows);&lt;br&gt;
effect = new Effect(TestGame.Device,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; compiledEffect.GetShaderCode(), CompilerOptions.None, null);&lt;br&gt;
&lt;br&gt;
worldViewProj = effect.Parameters["worldViewProj"];&lt;/font&gt; 
&lt;br&gt;
&lt;/code&gt; 
&lt;/p&gt;
&lt;p&gt;
Ok, what happens here? First of all we calculate our aspect ratio, nothing special.
Then we have to calculate our projection and view matrices (please read the DirectX
documentation if you have no idea what I'm talking about). Basically we have a field
of view of 90 degrees (PI/2), we use our aspect ratio and we have a view range from
0.1 (near) to 1000.0 units (far). Then we create our camera at the position (0, 0,
-50) looking at the center of our scene.
&lt;/p&gt;
&lt;p&gt;
Next we have to load our shader effect file. Yes, I told you about that earlier, we
need a freaking shader to draw our simple line. We will get into that in a little
bit, but ALWAYS make sure the .fx file is correct (test with FX Composer first). If
the .fx file contains compiler errors you get unfunny NullReferenceExceptions, which
won't help you (see below). Finally we are getting the worldViewProj parameter. This
is the only line of this whole line code I really appreciate. Getting shader parameters
is now a lot easier and cleaner, good work here! Also working with shaders is very
easy now. 
&lt;/p&gt;
&lt;p&gt;
Time to continue with our code, we need the rendering code (add to Draw()) now:
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;font color="#0000ff"&gt;&lt;font color="#008000"&gt; // Start line shader&lt;/font&gt;
&lt;br&gt;
effect.Begin(EffectStateOptions.Default);&lt;br&gt;
effect.Techniques[0].Passes[0].Begin();&lt;br&gt;
&lt;br&gt;
&lt;font color="#008000"&gt; // Render line&lt;/font&gt;
&lt;br&gt;
worldViewProj.SetValue(View * Projection);&lt;br&gt;
TestGame.device.VertexDeclaration = new VertexDeclaration(&lt;br&gt;
TestGame.device, VertexPositionColor.VertexElements);&lt;br&gt;
&lt;br&gt;
TestGame.device.DrawUserPrimitives&lt;/font&gt; 
&lt;vertexpositioncolor&gt;
&lt;font color="#0000ff"&gt;(&lt;br&gt;
PrimitiveType.LineList, 1, lineVertices);&lt;br&gt;
&lt;br&gt;
&lt;font color="#008000"&gt; // End shader&lt;/font&gt;
&lt;br&gt;
effect.Techniques[0].Passes[0].End();&lt;br&gt;
effect.End();&lt;/font&gt; 
&lt;br&gt;
&lt;/vertexpositioncolor&gt;
&lt;/code&gt; 
&lt;/p&gt;
&lt;p&gt;
This code is pretty straight forward. We start our shader and select the first technique
(the only one we got). Then we calculate our worldViewProj matrix from the View and
Projection matrices we calculated in the constructor. After setting the VertexDeclaration
we can draw our primitives, which are lines in our case. Just one to be more specific.
Adding more lines is quite easy at this point. Finally we have to close the rendering
pass (we just got 1 pass, else we would have to make a foreach loop around this code)
and we also close the shader. 
&lt;/p&gt;
&lt;p&gt;
So far so good, but how does the rendering now happen? 100% in the shader, the code
we just wrote will do nothing more than calling the shader with the data we set, the
line point positions and colors. So lets take a look at the shader, which does all
the rendering. The shader itself is quite simple: 
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;font color="#008000"&gt; // File: LineRendering.fx, Author: Abi&lt;br&gt;
// Code lines: 52, Size of file: 1,18 KB&lt;br&gt;
// Creation date: 31.08.2006 05:36&lt;br&gt;
// Last modified: 31.08.2006 06:44&lt;br&gt;
// Generated with Commenter by abi.exDream.com&lt;br&gt;
// Note: To test this use FX Composer from NVIDIA!&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font color="#0000ff"&gt; string description = "Line rendering helper shader for XNA";&lt;br&gt;
&lt;br&gt;
&lt;font color="#008000"&gt; // Default variables, supported by the engine&lt;/font&gt;
&lt;br&gt;
float4x4 worldViewProj : WorldViewProjection;&lt;br&gt;
&lt;br&gt;
struct VertexInput&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; float3 pos : POSITION;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; float4 color : COLOR;&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
struct VertexOutput 
&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; float4 pos : POSITION;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; float4 color : COLOR;&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
VertexOutput LineRenderingVS(VertexInput In)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; VertexOutput Out;&lt;br&gt;
&lt;br&gt;
&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Transform position&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Out.pos = mul(float4(In.pos, 1), worldViewProj);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Out.color = In.color;&lt;br&gt;
&lt;br&gt;
&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // And pass everything to the pixel shader&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return Out;&lt;br&gt;
} &lt;font color="#008000"&gt;// LineRenderingVS(VertexInput In)&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
float4 LineRenderingPS(VertexOutput In) : Color&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return In.color;&lt;br&gt;
} &lt;font color="#008000"&gt;// LineRenderingPS(VertexOutput In)&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font color="#008000"&gt; // Techniques&lt;/font&gt;
&lt;br&gt;
technique LineRendering&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pass Pass0&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VertexShader = compile vs_1_1 LineRenderingVS();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PixelShader = compile ps_1_1 LineRenderingPS();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;font color="#008000"&gt;// Pass0&lt;/font&gt;
&lt;br&gt;
} &lt;font color="#008000"&gt;// LineRendering&lt;/font&gt;&lt;/font&gt;&lt;font color="#008000"&gt; &lt;/font&gt; 
&lt;br&gt;
&lt;/code&gt; 
&lt;/p&gt;
&lt;p&gt;
And thats it. As you can see we just take the input position, transform it and then
output the color we interpolated through the vertex shader. The pixel shader has just
to output the color. Working with other primitive types can be done in a similar way,
so I hope this code helps. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;And what about 2d lines?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
2D lines can be done quite similary. In DirectX you would never think about rendering
2D lines with shaders, when it is so much easier with the fixed function pipeline.
But this is not possible in XNA, so we have to use shaders again. Lets go quickly
through the code that is required:
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;font color="#0000ff"&gt; Matrix Projection = Matrix.Identity,&lt;br&gt;
View = Matrix.Identity;&lt;br&gt;
Point pos1 = new Point(0, 0),&lt;br&gt;
pos2 = new Point(500, 250);&lt;br&gt;
VertexPositionColor[] lineVertices =&lt;br&gt;
new VertexPositionColor[2];&lt;br&gt;
Effect effect = null;&lt;br&gt;
EffectParameter worldViewProj = null;&lt;/font&gt;
&lt;br&gt;
&lt;/code&gt; 
&lt;/p&gt;
&lt;p&gt;
Very similar to what we had above, only our positions are now Points and not Vector3.
Also note we don't calculate the lineVertices here because the data is resolution
dependant and we have to grab the resolution from the graphics object first. Lets
take a look at the initialization code:
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;font color="#0000ff"&gt; float aspectRatio = (float)TestGame.Width / (float)TestGame.Height;&lt;br&gt;
Projection = Matrix.CreatePerspectiveFieldOfView(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; (float)Math.PI / 2, aspectRatio, 0.1f, 1000.0f);&lt;br&gt;
View = Matrix.CreateLookAt(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; new Vector3(0, 0, -50), Vector3.Zero, Vector3.Up);&lt;br&gt;
&lt;br&gt;
lineVertices[0] = new VertexPositionColor(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; new Vector3(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -1.0f + 2.0f * pos1.X / TestGame.Width,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -(-1.0f + 2.0f * pos1.Y / TestGame.Height), 0), Color.Red);&lt;br&gt;
lineVertices[1] = new VertexPositionColor(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; new Vector3(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -1.0f + 2.0f * pos2.X / TestGame.Width,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -(-1.0f + 2.0f * pos2.Y / TestGame.Height), 0), Color.Green);&lt;br&gt;
&lt;br&gt;
CompiledEffect compiledEffect = Effect.CompileEffectFromFile(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; "Shaders\\LineRendering2D.fx", null, null, CompilerOptions.None,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; TargetPlatform.Windows);&lt;br&gt;
effect = new Effect(TestGame.Device,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; compiledEffect.GetShaderCode(), CompilerOptions.None, null);&lt;br&gt;
&lt;br&gt;
worldViewProj = effect.Parameters["worldViewProj"];&lt;/font&gt; 
&lt;br&gt;
&lt;/code&gt; 
&lt;/p&gt;
&lt;p&gt;
This looks slightly more complex. The reason for that is the conversation from pixel
coordinates to screen space, which goes from -1 to +1 and has y inverted. We could
also do this calculation in the vertex shader, but I like C# more ^^ Please also note
that we don't need the z coordinate, but it is way easier to just use the VertexPositionColor
struct instead of creating our own struct. Lets continue with the rendering.
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;font color="#0000ff"&gt;&lt;font color="#008000"&gt; // Start line shader&lt;/font&gt;
&lt;br&gt;
effect.Begin(EffectStateOptions.Default);&lt;br&gt;
effect.Techniques[0].Passes[0].Begin();&lt;br&gt;
&lt;br&gt;
&lt;font color="#008000"&gt; // Render line&lt;/font&gt;
&lt;br&gt;
worldViewProj.SetValue(View * Projection);&lt;br&gt;
TestGame.device.VertexDeclaration = new VertexDeclaration(&lt;br&gt;
TestGame.device, VertexPositionColor.VertexElements);&lt;br&gt;
&lt;br&gt;
TestGame.device.DrawUserPrimitives&lt;/font&gt; 
&lt;vertexpositioncolor&gt;
&lt;font color="#0000ff"&gt;(&lt;br&gt;
PrimitiveType.LineList, 1, lineVertices);&lt;br&gt;
&lt;br&gt;
&lt;font color="#008000"&gt; // End shader&lt;/font&gt;
&lt;br&gt;
effect.Techniques[0].Passes[0].End();&lt;br&gt;
effect.End();&lt;/font&gt; 
&lt;br&gt;
&lt;/vertexpositioncolor&gt;
&lt;/code&gt; 
&lt;/p&gt;
&lt;p&gt;
Nothing changed here, nothing we have to discuss. Everything works just the same.
lets take a look at the shader!
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&lt;font color="#008000"&gt; // File: LineRendering2D.fx, Author: Abi&lt;br&gt;
// Code lines: 52, Size of file: 1,18 KB&lt;br&gt;
// Creation date: 31.08.2006 05:36&lt;br&gt;
// Last modified: 31.08.2006 06:55&lt;br&gt;
// Generated with Commenter by abi.exDream.com&lt;br&gt;
// Note: To test this use FX Composer from NVIDIA!&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
string description = "Line rendering in 2D space shader for XNA";&lt;br&gt;
&lt;font color="#008000"&gt;
&lt;br&gt;
// Default variables, supported by the engine&lt;/font&gt;
&lt;br&gt;
float4x4 worldViewProj : WorldViewProjection;&lt;br&gt;
&lt;br&gt;
struct VertexInput&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; float3 pos : POSITION;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; float4 color : COLOR;&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
struct VertexOutput 
&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; float4 pos : POSITION;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; float4 color : COLOR;&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
VertexOutput LineRendering2DVS(VertexInput In)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; VertexOutput Out;&lt;br&gt;
&lt;br&gt;
&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Transform position&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Out.pos = float4(In.pos, 1);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Out.color = In.color;&lt;br&gt;
&lt;br&gt;
&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // And pass everything to the pixel shader&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return Out;&lt;br&gt;
} // LineRendering2DVS(VertexInput In)&lt;br&gt;
&lt;br&gt;
float4 LineRendering2DPS(VertexOutput In) : Color&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return In.color;&lt;br&gt;
} &lt;font color="#008000"&gt;// LineRendering2DPS(VertexOutput In)&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font color="#008000"&gt; // Techniques&lt;/font&gt;
&lt;br&gt;
technique LineRendering2D&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pass Pass0&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VertexShader = compile vs_1_1 LineRendering2DVS();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PixelShader = compile ps_1_1 LineRendering2DPS();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;font color="#008000"&gt;// Pass0&lt;/font&gt;
&lt;br&gt;
} &lt;font color="#008000"&gt;// LineRendering2D&lt;/font&gt;
&lt;br&gt;
&lt;/code&gt; 
&lt;/p&gt;
&lt;p&gt;
Not much changed here either. Only the vertex shader is changed, we don't have to
use our worldViewProj matrix anymore. We are just copying the data over to the pixel
shader for rendering the screen stuff directly.
&lt;/p&gt;
&lt;p&gt;
Thats it for rendering 2D data. I guess most 2D stuff will be covered by the Sprite
class, but if you need some custom 2d stuff (lines, boxes, etc.) this code should
help you out. Have fun writing more complex stuff. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Ok, if the line stuff is that hard, lets do some simple mesh rendering, right?&lt;/b&gt;
&lt;p&gt;
Wrong again. While this was planed for the XNA Beta release, it didn't make it into
the beta and you have to do your own mesh loading, handling and rendering. In the
SpaceWar Starter Kit game you can find some code to load swm model files (wtf is this
format?), but you can't render .x or .fbx files that easily yet. In the future no
problem, but right know you are f .. erm, not able to ^^. When I got some code for
mesh loading and rendering, I will show it :-) 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Content Management, what about that?&lt;/b&gt;
&lt;p&gt;
Well, its quite cool to just drop your content files into your project and then you
can directly access them in your code. But since this feature is not supported yet,
there is no point discussing it ... If you want to read stuff anyway, check this blog
posts about the content pipeline out: &lt;a href="http://blogs.msdn.com/xna/archive/2006/08/29/730168.aspx"&gt;http://blogs.msdn.com/xna/archive/2006/08/29/730168.aspx&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/shawnhar/archive/2006/08/26/725954.aspx"&gt;http://blogs.msdn.com/shawnhar/archive/2006/08/26/725954.aspx&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Why are there so few help topics in the most important namespace Microsoft.XNA.Graphics,
especially for 3d rendering?&lt;/b&gt;
&lt;p&gt;
Well, since most of the line rendering, mesh or even the content pipeline is not supported,
it is no wonder some important topics are missing. The help basically just tells you
how to create a textured cube yet, nothing else. But this is also an early beta release,
expect more help topics in the future. The many new XNA pages that are created these
days (like 10 new ones each day ^^) will also provide a lot of resources. I bet XNA
will have a really big community after a while. XNA has already interessted a lot
of people about this new technology.
&lt;/p&gt;
&lt;p&gt;
Please also try to use the &lt;a href="http://msdn.microsoft.com/directx/"&gt;DirectX documentation&lt;/a&gt; as
backup help in case you need more tutorials, samples and documentation.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Shaders?&lt;/b&gt;
&lt;p&gt;
Yap, everything except Sprites has to be done with shaders. I guess this will be reason
enough for most XNA games to never have any 3d content. Working with sprites is quite
easy, but having to write custom shader code, declaring vertex types and having crazy
random exceptions is nothing easy.
&lt;/p&gt;
&lt;p&gt;
For example if your shader fails to compile you get just a &lt;b&gt;System.NullReferenceException:
Object reference not set to an instance of an object.&lt;/b&gt; There is no explanation
what did went wrong, which is pretty bad IMO. Shaders are really a pain in the ass
because they are not managed in any way. Its just some script that gets compiled for
the GPU and if anything went wrong you can hope your tools tell you exactly what to
do. MDX did already suck in this regard, but from my quick early preview XNA is way
worse. I really hope this part gets improved. What does nice and clean sprite, sound
and controller programming help me if the 3d code is ugly as hell and as hard to write
as c++ minus the debugging benefits from DirectX.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Debugging DirectX?&lt;/b&gt; Yes, lets do that. First you need VS 2005 (see below how
to get that to work with XNA). Now activate unmanaged Debugging and make sure DirectX
is running in Debug mode (either go to your control panel and open up DirectX or use
Start-&amp;gt;Programs-&amp;gt;DirectX-&amp;gt;Utilities-&amp;gt;Control Panel (which is the only
available choice on x64 bit), now select debug mode and also set the Managed DirectX
dlls to debug for better debugging support. Now when crazy NullReferenceExceptions
happen and you are lucky you might see some helpful explanation.
&lt;/p&gt;
&lt;p&gt;
Scroll above to see some simple shaders for the line rendering stuff. There is also
another shader example in the documentation, work with that code and change it with
help of tools like &lt;a href="http://developer.nvidia.com/object/fx_composer_home.html"&gt;FX
Composer&lt;/a&gt; to find out about compiling errors beforehand. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Do I have to dispose textures, models, etc. like in MDX?&lt;/b&gt;
&lt;p&gt;
Not really. I didn't notice any problems yet. I guess XNA has some mechanisms to collect
all resources when disposing itself (game component and device). As you can see in
the SpaceWar Starter Kit they didn't had to implement any disposing for their MeshCache
or TextureCache lists in SpacewarGame.cs.
&lt;/p&gt;
&lt;p&gt;
This is quite cool IMO, it makes coding even easier than it was in MDX. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Why does my game crash with a NullReferenceException when I drag it over to another
screen when using SpriteBatches?&lt;/b&gt;
&lt;p&gt;
I guess this is some bug in the SpriteBatch class, which does not handle the device
lost event correctly or something. It always crashes in the Begin() method when dragging
the window out of my first screen. Since the SpriteBatch class does not have any events
other than disposing, the best and simplest solution is just to add a event handler
for the OnCreateDevice event and put your SpriteBatch creation code there too. This
way it gets re-created when you need it. Would be nice if you didn't have to do this
yourself ... XNA team reading this? Who knows ^^ 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Occlusion quering for example for lens flare effects?&lt;/b&gt;
&lt;p&gt;
Not supported, check out &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=683808&amp;amp;SiteID=1"&gt;this
post&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;What about Physics, AI, Collision, Particles, etc.?&lt;/b&gt;
&lt;p&gt;
Not supported right now, check out &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=684033&amp;amp;SiteID=1"&gt;this
post&lt;/a&gt;. Since XNA is mainly a graphic engine with sound and controller support,
it is not very likely you get advanced engine features soon. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;How to get XNA working in VS 2005 (with all the plugins you might have, which do
not work in Express)?&lt;/b&gt;
&lt;p&gt;
Thats not supported or even possible out of the box! Read more about this &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=683964&amp;amp;SiteID=1&amp;amp;mode=1"&gt;here
(Forum)&lt;/a&gt; and in the &lt;a href="http://msdn.microsoft.com/directx/xna/faq/"&gt;FAQ&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
But since I'm such a clever guy I modified the XNA templates quite a bit and added
support opening the project in VS 2005. &lt;a href="http://exdream.no-ip.info/blog/PermaLink.aspx?guid=8962e9a7-3185-438d-882a-e8e919771dc2"&gt;Read
the full story here&lt;/a&gt;. Basically just download this: &lt;a href="%3Ca%20href=" http://exdream.no-ip.info/blog/xna64bitsupport.zip=""&gt;Xna64BitSupport.zip
(14 KB)&lt;/a&gt; and extract it to:&lt;br&gt;
&lt;font color="#808080"&gt; C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\VCSExpress\&lt;/font&gt;
&lt;br&gt;
Now you can open your created XNA Game Studio Express projects in VS 2005 and continue
working on them there. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Unit Testing in XNA?&lt;/b&gt;
&lt;p&gt;
Quite simple, just add NUnit.Framework.dll, which is fully managed and should even
work on the XBox360 (not that you need unit testing there). If you use VS Express, &lt;a href="http://www.testdriven.net/"&gt;TestDriven.NET&lt;/a&gt; will
not work (unless you have a version from last year, which still supported it). If
you use VS 2005 use &lt;a href="http://www.testdriven.net/"&gt;TestDriven.NET&lt;/a&gt; or &lt;a href="http://www.mailframe.net/products/testrunner.htm"&gt;TestRunner&lt;/a&gt; (tested
it few weeks ago, very nice, but does not support static unit tests, big nono for
me).
&lt;/p&gt;
&lt;p&gt;
I also suggest using a TestGame class and do many static unit tests to play around
with XNA (I already wrote 5 static unit tests today). Thats much faster than to create
a new project everytime. And each test looks much easier and shorter than a complete
new project. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Performance of XNA compared to MDX or native DirectX.&lt;/b&gt;
&lt;p&gt;
I couldn't detect any performance penalities yet, someone in the XNA forums had some
problems archiving 800 fps when using bitmap fonts, dunno what that was about. But
it is very hard to say how XNA performs in relation to MDX because there is not much
code or games we can compare yet.
&lt;/p&gt;
&lt;p&gt;
But in my opinion it does not even matter, the XBox360 is fast enough even if you
write really shitty code and the windows platform is also quite fast with all this
dual core around. For most simpler or casual games this will never matter much. However
I do strongly believe that XNA will perform on the same level as MDX and DirectX. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;But I want to play my XNA game on my XBox 360?&lt;/b&gt;
&lt;p&gt;
Me too, but we have to wait for the next drop of XNA ^^ Not supported yet. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;What about Rocket Commander for the XBox 360?&lt;/b&gt;
&lt;p&gt;
Well, I thought about that, but since many of the classes used in Rocket Commander
are not supported yet in XNA and the actual XBox360 execution is not yet possible,
why even bother? As soon as XBox360 XNA'ing is possible, I will consider a Rocket
Commander port again. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Btw: Why is the SpaceWar Starter Kit so big (155 MB uncompressed)?&lt;/b&gt; There is
not even music in it.&lt;p&gt;
Most textures are uncompressed as .tga files, not good ... Rocket Commander has more
graphics, music and I guess more sound files too, but is less than 10 MB. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Need more help?&lt;/b&gt; Then ask in the &lt;a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=846&amp;amp;SiteID=1"&gt;XNA
Forums&lt;/a&gt; and not here, I got stuff to do :D 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
Hope this helps. I will post more about XNA Trick &amp;amp; Tips soon ;-) 
&lt;p&gt;
Yes, I'm writing a XNA game too. It will even be a Starter Kit for the next XNA Game
Studio Release, more about that next week, I will post weekly screenshots like in
the Rocket Commander Development time.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=44339eda-86da-4a2d-ae94-9387aad9c178" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,44339eda-86da-4a2d-ae94-9387aad9c178.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander;XNA</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=990a1524-93cb-42bc-b3a9-5106e368cf3e</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,990a1524-93cb-42bc-b3a9-5106e368cf3e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,990a1524-93cb-42bc-b3a9-5106e368cf3e.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=990a1524-93cb-42bc-b3a9-5106e368cf3e</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="images/windowsxpx64.jpg" style="margin-left: 10px;" align="right" border="0" /> I
installed Windows XP Professional x64 Bit today and this post is about my experiences
with it. I tried it a year ago, but most drivers were not available for 64 bit back
then. Now most drivers are supported and most programs will work without a problem.
However some drivers and programs will still make trouble. Most of the issues could
be resolved one way or another.<br /><br />
Generally I would say Windows XP x64 works great and is even a little bit faster than
32 bit Windows. 
<p><br /></p><h3><img src="images/GreenSmiley.png" /><sup>No problems</sup></h3>
Had to change my mainboard because my current one went dead yesterday, I could use
the same Windows x64 version without reinstalling, thats nice. Windows 32 bit does
not work anymore (some driver troubles I guess). I also noticed that about Vista,
no more reinstalls required if you change your board and cpu. 
<p>
Games worked great, no problems here. I guess Microsoft plays a lot of games and wants
to make sure all of them work, hehe. Even 15 year old games like <b>Raptor</b> (my
all time shoot'n'up favorite) or <b>Wolfenstein 3D</b> worked without problems. <b>Starcraft</b>, <b>Quake3</b> and
current games worked nice too. <b>Daemon Tools</b> also provides a x64 bit version
for Windows XP x86 for emulating CDs or DVDs. 
</p><p><b> Visual Studio 2005</b>, <b>DirectX SDK</b> and all other development tools like <b>VS
Express</b>, <b>SharpDevelop</b>, <b>CodeRush</b>, <b>Perforce</b>, <b>UltraEdit</b>, <b>PCalc</b>, <b>NSIS</b>,
etc. work great too. For running 32 bit IIS apps you might have to follow <a href="http://www.eggheadcafe.com/articles/20050417.asp">these
instructions</a>. 
</p><p><b> Virtual Server 2005</b> works nicely and you can run virtual x64 and x86 computers,
I guess the performance is also good or even better than before, but maybe my system
is just faster. 
</p><p>
Most normal programs did work too, but since nearly 99% of all programs are still
32 bit, it does not really make sense to have a 64bit platform yet. For browsing <b>IE
64 bit</b> is available and for <b>Firefox</b> (which is 32bit again) there is a 64
bit port called <a href="http://www.mozilla.org/projects/deerpark/">Deer Park</a>,
which works nicely. Both of these browsers are useful if you need more than 2 GB memory
for your crazy browsing. Some programs do provide a x64 bit version, which works just
the same way as the 32 bit version (I guess they did just a recompile with different
compiler settings). I would say more programs and tools will be tested for x64 in
the future, especially for Vista, when more users might choose x64 for their operating
system. 
</p><p><br /></p><h3><img src="images/YellowSmiley.png" /><sup>Programs with problems</sup></h3>
Most .NET 2.0 tools I tested did not work, but all of them could be fixed by changing
the build setting from <b>Any CPU</b> to <b>x86 Platform</b>. While .NET 2.0 has NO
problem running in 32 or 64 bit, it is not that easy in the case you call any external
code (and almost all my tools do that). For example my <a href="AbiTrafficMonitor.exe">AbiTrafficMonitor</a> tool
uses <a href="http://www.tamirgal.com/home/dev.aspx?Item=SharpPcap">SharpPcap</a>,
which again uses wpcap.dll, which is only available as a 32bit dll. By forcing 32
bit to the application everything works great, in 64 bit the dll is not found and
can't be forced. It is not possible to load 32 bit dlls in 64 bit mode, you will get
the following error message when attempting to do that. <b>An attempt was made to
load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)</b><p>
So you have to make sure a 64 bit version of all used dlls exists, else DO NOT use
the <b>Any CPU</b> or <b>x64 Platform</b> settings. so this has to do something with
.NET 2.0 (just some stupid compiler setting, recompile works, but a smarter version
would be cool). 
</p><p>
Here is the <a href="AbiTrafficMonitor.exe">new installer for AbiTrafficMonitor</a>,
which works on Windows XP x64 too (by forcing the x86 mode). It does obviously still
work on a normal 32 bit (x86) windows platform. 
</p><p>
.NET 1.1 games like my <b>Arena Wars</b> game worked too, also .NET 1.1 tools worked
fine. All .NET 1.1 assemblies run automatically as 32bit applications by design. .NET
2.0 runs automatically in 64bit mode on x64 platforms if All CPU is selected. 
</p><p>
However my .NET 2.0 game <a href="http://www.RocketCommander.com">Rocket Commander</a> could
not be started. Actually this is the same problem as above (not allowed to call 32
bit dlls from 64 bit code). .NET 2.0 runs fine in 64 bit mode and DirectX provides
also 64 bit dlls, BUT Managed DirectX does NOT support using 64 bit. There is no version
available to do that right now, neither MDX 1.1 nor MDX 2.0 support x64. So again,
force the platform to be x86 and everything works again. 
</p><p>
I recompiled Rocket Commander and it is available at the default download location: <a href="http://www.RocketCommander.com/download.html">www.RocketCommander.com
download page</a><br />
There were also a couple of discussions about this issue in the Rocket Commander boards. 
</p><p>
Another issue are external tools or helper tools like <a href="http://www.testdriven.net/">TestDriven.NET</a>,
which support x64, but it seems the underlaying <a href="http://www.nunit.org/">NUnit
Framework</a> does work only in 32 bit. Not funny at all if you have a x64 bit app
or just run All CPU on a x64 platform and want to test your code. This issue can be
resolved by testing in 32 bit mode and then later switch to 64 bit if you want a 64
bit version of your app. 
</p><p><b> UltraEdit</b>, <b>WinZip</b> and <b>WinRar</b> work fine, but all of them are
32 bit. So whats the problem? They all provide shell extensions for the Windows Explorer,
which do not work in the 64bit version of the Explorer. There are 2 solutions for
this. 
</p><ul><li>
Start the Windows Explorer 32 bit with the command line. Command:<br /><b>c:\windows\syswow64\explorer.exe /separate</b><br />
This didn't work very well for me, some of the shell commands did not work properly
and it is really annoying to start the windows explorer this way. Often you might
open a folder or jump to a containing folder, then of course the default 64 bit Windows
Explorer is used.<br /><br /></li><li>
Add your own shell commands in the registry. This works great for <b>Open with UltraEdit</b> or <b>Extract
files here</b>, but if you need smarter commands like <b>Extract to 
<name>
subfolder
</name></b> this doesn't help. Anyways, here is the solution. Add this file to your registry
to add the following lines (change them to whatever you need):<br /><br /><font color="#0000ff"> Windows Registry Editor Version 5.00<br /><br />
[HKEY_CLASSES_ROOT\*\shell]<br /><br />
[HKEY_CLASSES_ROOT\*\shell\Extract here]<br />
@="Extract here"<br />
[HKEY_CLASSES_ROOT\*\shell\Extract here\command]<br />
@="C:\\Program Files (x86)\\WinRAR\\winrar x \"%1\"" 
<br /><br />
[HKEY_CLASSES_ROOT\*\shell\Ultra Edit]<br />
@="Open with UltraEdit"<br />
[HKEY_CLASSES_ROOT\*\shell\Ultra Edit\command]<br />
@="c:\\Program Files (x86)\\ULTRAEDIT-32\\uedit32.exe \"%1\""</font></li></ul><p><br /></p><h3><img src="images/OrangeSmiley.png" /><sup>Programs and drivers that do not work</sup></h3>
Some old setups like for the <b>Panorama</b> Wallpaper changer do not at all (wrong
windows version error message), but I managed to install some of the manually (copying
files and setting registry settings). 
<p>
My on board network drivers do not work at all, neither does my old TV card, but I
had many driver problems in Vista Beta 2 x64 too. I found a old 1Gbit network card
that works and I never watch TV anyways. All other drivers (board, gfx, sound, mouse,
keyboard) work just fine.
</p><b>Update 2008-08-19</b>: My onboard sound really sucks and I tried to install my
old PCI Soundcard (XFire 1024), but since the vendor does not provide 64 bit drivers,
there is no way I can use that card. The onboard network adapter (Marvell 88E1111)
also stopped working and does not even show up. Another old VIA VT6120 1gbit card
could be installed, but didn't work either. Maybe I have to try out deactivating the
other cards and then it should work, a 64 bit driver is installed.<br /><p>
Now to my main issue: You cannot use ANY new keyboard layouts at all! I really need
my own AbiKeyboardV9 layout to type efficiently. I tried like 10 different other keyboard
layouts too, all of them can be installed, but as soon as you try to use a new layout
you always get a error message like "Windows could not load the x keyboard layout.".
Not funny at all and I found absolutely NOTHING for either vista or x64 Windows to
fix this problem on the internet. I used the <a href="http://www.microsoft.com/globaldev/tools/msklc.mspx">Microsoft
Keyboard Layout Creator</a>, which works great on Windows XP 32 bit and lower. But
this tool was last updated 2003 and the support for future windows version or x64
is just not-existant. Other tools I tried (keytrans, klm, etc.) suck even more and
usually cost a lot of money, none of them worked on 64 bit or provide any useful features
for me. All of them work only in 32bit. 
</p><p>
More links on that topic (all of them have x64 bit problems and are unresolved)<br /><a href="http://www.planetamd64.com/lofiversion/index.php/t15929.html">http://www.planetamd64.com/lofiversion/index.php/t15929.html</a><br /><a href="http://blogs.msdn.com/michkap/archive/2006/01/26/517728.aspx">http://blogs.msdn.com/michkap/archive/2006/01/26/517728.aspx</a><br /><a href="http://blogs.msdn.com/michkap/archive/2005/10/06/477930.aspx">http://blogs.msdn.com/michkap/archive/2005/10/06/477930.aspx</a></p><p>
I found some information on <a href="http://www.sysinternals.com/blog/2005/05/running-everyday-on-64-bit-windows.html">Marks
Blog from Sysinternals</a> in which he provides a solution to his Cap2Ctrl tool (which
just maps the Caps Lock key to Ctrl). Similar to that I found out which keys have
which codes with help of the <a href="http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc">scancode.doc</a> doc
from Microsoft for keyboard developers and wrote my own keyboard remapping code. 
</p><p>
While the normal keys worked great and were changed in a couple of minutes all the
special keys are messed up because I had different meanings for pressing shift with
special keys. I found no solution to that so I updated my keyboard layout, there were
some minor changes I wanted to do anyways. This is my new keyboard layout, which now
works on all windows versions (finally I can use Vista too ^^). Some keys are not
optimal, but to support both the german and US keyboards some '/" have to be used
twice (scan code 2B) and some keys like -/_ had to be moved to worse positions (relative
to my old layout, not much of a difference compared on the US layout). This can't
be fixed with scancode remapping. I've used my new layout for a couple of hours now
and it seems fine. The most annoying changes are &lt;&gt;, (), \|- and -_, everything
else stays, but I guess I will manage. 
</p><p>
This is my new Keyboard Layout: 
</p><ul><li>
AbiKeyboardLayout v10<br /><img src="images/abiKeyboardLayoutV10.png" /></li><li>
To install you can use the following file: <a href="abi%20keyboard%20installer.reg">abi
keyboard installer.reg</a></li><li>
And uninstall it again with this file: <a href="abi%20keyboard%20uninstall.reg">abi
keyboard uninstall.reg</a></li><li>
This is the content of <b>abi keyboard installer.reg</b>:<br /><br /><font color="#0000ff"> Windows Registry Editor Version 5.00<br /><br />
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]<br />
"Scancode Map"=hex:00,00,00,00, 00,00,00,00, 19,00,00,00, 2A,00,3A,00, 2B,00,0C,00,
0C,00,0D,00, 0D,00,10,00, 19,00,12,00, 15,00,14,00, 10,00,15,00, 22,00,16,00, 20,00,17,00,
21,00,18,00, 25,00,19,00, 28,00,2B,00, 18,00,1F,00, 12,00,20,00, 16,00,21,00, 17,00,22,00,
1F,00,24,00, 14,00,25,00, 31,00,26,00, 26,00,27,00, 27,00,28,00, 0C,00,56,00, 24,00,30,00,
30,00,31,00, 00,00,00,00</font><p>
To understand the scan codes and how this binary code is formated please read this
document: <a href="http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc">scancode.doc</a>. 
</p></li></ul><p>
So far so good, I will stick with x64 and you guys know now how complicated my computer
is ^^
</p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=990a1524-93cb-42bc-b3a9-5106e368cf3e" /></body>
      <title>Windows XP x64 Experiences</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,990a1524-93cb-42bc-b3a9-5106e368cf3e.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/08/18/WindowsXPX64Experiences.aspx</link>
      <pubDate>Fri, 18 Aug 2006 06:32:56 GMT</pubDate>
      <description>&lt;img src="images/windowsxpx64.jpg" style="margin-left: 10px;" align="right" border="0"&gt; I
installed Windows XP Professional x64 Bit today and this post is about my experiences
with it. I tried it a year ago, but most drivers were not available for 64 bit back
then. Now most drivers are supported and most programs will work without a problem.
However some drivers and programs will still make trouble. Most of the issues could
be resolved one way or another.&lt;br&gt;
&lt;br&gt;
Generally I would say Windows XP x64 works great and is even a little bit faster than
32 bit Windows. 
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h3&gt;&lt;img src="images/GreenSmiley.png"&gt; &lt;sup&gt;No problems&lt;/sup&gt;
&lt;/h3&gt;
Had to change my mainboard because my current one went dead yesterday, I could use
the same Windows x64 version without reinstalling, thats nice. Windows 32 bit does
not work anymore (some driver troubles I guess). I also noticed that about Vista,
no more reinstalls required if you change your board and cpu. 
&lt;p&gt;
Games worked great, no problems here. I guess Microsoft plays a lot of games and wants
to make sure all of them work, hehe. Even 15 year old games like &lt;b&gt;Raptor&lt;/b&gt; (my
all time shoot'n'up favorite) or &lt;b&gt;Wolfenstein 3D&lt;/b&gt; worked without problems. &lt;b&gt;Starcraft&lt;/b&gt;, &lt;b&gt;Quake3&lt;/b&gt; and
current games worked nice too. &lt;b&gt;Daemon Tools&lt;/b&gt; also provides a x64 bit version
for Windows XP x86 for emulating CDs or DVDs. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt; Visual Studio 2005&lt;/b&gt;, &lt;b&gt;DirectX SDK&lt;/b&gt; and all other development tools like &lt;b&gt;VS
Express&lt;/b&gt;, &lt;b&gt;SharpDevelop&lt;/b&gt;, &lt;b&gt;CodeRush&lt;/b&gt;, &lt;b&gt;Perforce&lt;/b&gt;, &lt;b&gt;UltraEdit&lt;/b&gt;, &lt;b&gt;PCalc&lt;/b&gt;, &lt;b&gt;NSIS&lt;/b&gt;,
etc. work great too. For running 32 bit IIS apps you might have to follow &lt;a href="http://www.eggheadcafe.com/articles/20050417.asp"&gt;these
instructions&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt; Virtual Server 2005&lt;/b&gt; works nicely and you can run virtual x64 and x86 computers,
I guess the performance is also good or even better than before, but maybe my system
is just faster. 
&lt;/p&gt;
&lt;p&gt;
Most normal programs did work too, but since nearly 99% of all programs are still
32 bit, it does not really make sense to have a 64bit platform yet. For browsing &lt;b&gt;IE
64 bit&lt;/b&gt; is available and for &lt;b&gt;Firefox&lt;/b&gt; (which is 32bit again) there is a 64
bit port called &lt;a href="http://www.mozilla.org/projects/deerpark/"&gt;Deer Park&lt;/a&gt;,
which works nicely. Both of these browsers are useful if you need more than 2 GB memory
for your crazy browsing. Some programs do provide a x64 bit version, which works just
the same way as the 32 bit version (I guess they did just a recompile with different
compiler settings). I would say more programs and tools will be tested for x64 in
the future, especially for Vista, when more users might choose x64 for their operating
system. 
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h3&gt;&lt;img src="images/YellowSmiley.png"&gt; &lt;sup&gt;Programs with problems&lt;/sup&gt;
&lt;/h3&gt;
Most .NET 2.0 tools I tested did not work, but all of them could be fixed by changing
the build setting from &lt;b&gt;Any CPU&lt;/b&gt; to &lt;b&gt;x86 Platform&lt;/b&gt;. While .NET 2.0 has NO
problem running in 32 or 64 bit, it is not that easy in the case you call any external
code (and almost all my tools do that). For example my &lt;a href="AbiTrafficMonitor.exe"&gt;AbiTrafficMonitor&lt;/a&gt; tool
uses &lt;a href="http://www.tamirgal.com/home/dev.aspx?Item=SharpPcap"&gt;SharpPcap&lt;/a&gt;,
which again uses wpcap.dll, which is only available as a 32bit dll. By forcing 32
bit to the application everything works great, in 64 bit the dll is not found and
can't be forced. It is not possible to load 32 bit dlls in 64 bit mode, you will get
the following error message when attempting to do that. &lt;b&gt;An attempt was made to
load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)&lt;/b&gt; 
&lt;p&gt;
So you have to make sure a 64 bit version of all used dlls exists, else DO NOT use
the &lt;b&gt;Any CPU&lt;/b&gt; or &lt;b&gt;x64 Platform&lt;/b&gt; settings. so this has to do something with
.NET 2.0 (just some stupid compiler setting, recompile works, but a smarter version
would be cool). 
&lt;/p&gt;
&lt;p&gt;
Here is the &lt;a href="AbiTrafficMonitor.exe"&gt;new installer for AbiTrafficMonitor&lt;/a&gt;,
which works on Windows XP x64 too (by forcing the x86 mode). It does obviously still
work on a normal 32 bit (x86) windows platform. 
&lt;/p&gt;
&lt;p&gt;
.NET 1.1 games like my &lt;b&gt;Arena Wars&lt;/b&gt; game worked too, also .NET 1.1 tools worked
fine. All .NET 1.1 assemblies run automatically as 32bit applications by design. .NET
2.0 runs automatically in 64bit mode on x64 platforms if All CPU is selected. 
&lt;/p&gt;
&lt;p&gt;
However my .NET 2.0 game &lt;a href="http://www.RocketCommander.com"&gt;Rocket Commander&lt;/a&gt; could
not be started. Actually this is the same problem as above (not allowed to call 32
bit dlls from 64 bit code). .NET 2.0 runs fine in 64 bit mode and DirectX provides
also 64 bit dlls, BUT Managed DirectX does NOT support using 64 bit. There is no version
available to do that right now, neither MDX 1.1 nor MDX 2.0 support x64. So again,
force the platform to be x86 and everything works again. 
&lt;/p&gt;
&lt;p&gt;
I recompiled Rocket Commander and it is available at the default download location: &lt;a href="http://www.RocketCommander.com/download.html"&gt;www.RocketCommander.com
download page&lt;/a&gt;
&lt;br&gt;
There were also a couple of discussions about this issue in the Rocket Commander boards. 
&lt;/p&gt;
&lt;p&gt;
Another issue are external tools or helper tools like &lt;a href="http://www.testdriven.net/"&gt;TestDriven.NET&lt;/a&gt;,
which support x64, but it seems the underlaying &lt;a href="http://www.nunit.org/"&gt;NUnit
Framework&lt;/a&gt; does work only in 32 bit. Not funny at all if you have a x64 bit app
or just run All CPU on a x64 platform and want to test your code. This issue can be
resolved by testing in 32 bit mode and then later switch to 64 bit if you want a 64
bit version of your app. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt; UltraEdit&lt;/b&gt;, &lt;b&gt;WinZip&lt;/b&gt; and &lt;b&gt;WinRar&lt;/b&gt; work fine, but all of them are
32 bit. So whats the problem? They all provide shell extensions for the Windows Explorer,
which do not work in the 64bit version of the Explorer. There are 2 solutions for
this. 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Start the Windows Explorer 32 bit with the command line. Command:&lt;br&gt;
&lt;b&gt;c:\windows\syswow64\explorer.exe /separate&lt;/b&gt;
&lt;br&gt;
This didn't work very well for me, some of the shell commands did not work properly
and it is really annoying to start the windows explorer this way. Often you might
open a folder or jump to a containing folder, then of course the default 64 bit Windows
Explorer is used.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Add your own shell commands in the registry. This works great for &lt;b&gt;Open with UltraEdit&lt;/b&gt; or &lt;b&gt;Extract
files here&lt;/b&gt;, but if you need smarter commands like &lt;b&gt;Extract to 
&lt;name&gt;
subfolder
&lt;/name&gt;
&lt;/b&gt; this doesn't help. Anyways, here is the solution. Add this file to your registry
to add the following lines (change them to whatever you need):&lt;br&gt;
&lt;br&gt;
&lt;font color="#0000ff"&gt; Windows Registry Editor Version 5.00&lt;br&gt;
&lt;br&gt;
[HKEY_CLASSES_ROOT\*\shell]&lt;br&gt;
&lt;br&gt;
[HKEY_CLASSES_ROOT\*\shell\Extract here]&lt;br&gt;
@="Extract here"&lt;br&gt;
[HKEY_CLASSES_ROOT\*\shell\Extract here\command]&lt;br&gt;
@="C:\\Program Files (x86)\\WinRAR\\winrar x \"%1\"" 
&lt;br&gt;
&lt;br&gt;
[HKEY_CLASSES_ROOT\*\shell\Ultra Edit]&lt;br&gt;
@="Open with UltraEdit"&lt;br&gt;
[HKEY_CLASSES_ROOT\*\shell\Ultra Edit\command]&lt;br&gt;
@="c:\\Program Files (x86)\\ULTRAEDIT-32\\uedit32.exe \"%1\""&lt;/font&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h3&gt;&lt;img src="images/OrangeSmiley.png"&gt; &lt;sup&gt;Programs and drivers that do not work&lt;/sup&gt;
&lt;/h3&gt;
Some old setups like for the &lt;b&gt;Panorama&lt;/b&gt; Wallpaper changer do not at all (wrong
windows version error message), but I managed to install some of the manually (copying
files and setting registry settings). 
&lt;p&gt;
My on board network drivers do not work at all, neither does my old TV card, but I
had many driver problems in Vista Beta 2 x64 too. I found a old 1Gbit network card
that works and I never watch TV anyways. All other drivers (board, gfx, sound, mouse,
keyboard) work just fine.
&lt;/p&gt;
&lt;b&gt;Update 2008-08-19&lt;/b&gt;: My onboard sound really sucks and I tried to install my
old PCI Soundcard (XFire 1024), but since the vendor does not provide 64 bit drivers,
there is no way I can use that card. The onboard network adapter (Marvell 88E1111)
also stopped working and does not even show up. Another old VIA VT6120 1gbit card
could be installed, but didn't work either. Maybe I have to try out deactivating the
other cards and then it should work, a 64 bit driver is installed.&lt;br&gt;
&lt;p&gt;
Now to my main issue: You cannot use ANY new keyboard layouts at all! I really need
my own AbiKeyboardV9 layout to type efficiently. I tried like 10 different other keyboard
layouts too, all of them can be installed, but as soon as you try to use a new layout
you always get a error message like "Windows could not load the x keyboard layout.".
Not funny at all and I found absolutely NOTHING for either vista or x64 Windows to
fix this problem on the internet. I used the &lt;a href="http://www.microsoft.com/globaldev/tools/msklc.mspx"&gt;Microsoft
Keyboard Layout Creator&lt;/a&gt;, which works great on Windows XP 32 bit and lower. But
this tool was last updated 2003 and the support for future windows version or x64
is just not-existant. Other tools I tried (keytrans, klm, etc.) suck even more and
usually cost a lot of money, none of them worked on 64 bit or provide any useful features
for me. All of them work only in 32bit. 
&lt;/p&gt;
&lt;p&gt;
More links on that topic (all of them have x64 bit problems and are unresolved)&lt;br&gt;
&lt;a href="http://www.planetamd64.com/lofiversion/index.php/t15929.html"&gt;http://www.planetamd64.com/lofiversion/index.php/t15929.html&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://blogs.msdn.com/michkap/archive/2006/01/26/517728.aspx"&gt;http://blogs.msdn.com/michkap/archive/2006/01/26/517728.aspx&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://blogs.msdn.com/michkap/archive/2005/10/06/477930.aspx"&gt;http://blogs.msdn.com/michkap/archive/2005/10/06/477930.aspx&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I found some information on &lt;a href="http://www.sysinternals.com/blog/2005/05/running-everyday-on-64-bit-windows.html"&gt;Marks
Blog from Sysinternals&lt;/a&gt; in which he provides a solution to his Cap2Ctrl tool (which
just maps the Caps Lock key to Ctrl). Similar to that I found out which keys have
which codes with help of the &lt;a href="http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc"&gt;scancode.doc&lt;/a&gt; doc
from Microsoft for keyboard developers and wrote my own keyboard remapping code. 
&lt;/p&gt;
&lt;p&gt;
While the normal keys worked great and were changed in a couple of minutes all the
special keys are messed up because I had different meanings for pressing shift with
special keys. I found no solution to that so I updated my keyboard layout, there were
some minor changes I wanted to do anyways. This is my new keyboard layout, which now
works on all windows versions (finally I can use Vista too ^^). Some keys are not
optimal, but to support both the german and US keyboards some '/" have to be used
twice (scan code 2B) and some keys like -/_ had to be moved to worse positions (relative
to my old layout, not much of a difference compared on the US layout). This can't
be fixed with scancode remapping. I've used my new layout for a couple of hours now
and it seems fine. The most annoying changes are &amp;lt;&amp;gt;, (), \|- and -_, everything
else stays, but I guess I will manage. 
&lt;/p&gt;
&lt;p&gt;
This is my new Keyboard Layout: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
AbiKeyboardLayout v10&lt;br&gt;
&lt;img src="images/abiKeyboardLayoutV10.png"&gt; 
&lt;/li&gt;
&lt;li&gt;
To install you can use the following file: &lt;a href="abi%20keyboard%20installer.reg"&gt;abi
keyboard installer.reg&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
And uninstall it again with this file: &lt;a href="abi%20keyboard%20uninstall.reg"&gt;abi
keyboard uninstall.reg&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
This is the content of &lt;b&gt;abi keyboard installer.reg&lt;/b&gt;:&lt;br&gt;
&lt;br&gt;
&lt;font color="#0000ff"&gt; Windows Registry Editor Version 5.00&lt;br&gt;
&lt;br&gt;
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]&lt;br&gt;
"Scancode Map"=hex:00,00,00,00, 00,00,00,00, 19,00,00,00, 2A,00,3A,00, 2B,00,0C,00,
0C,00,0D,00, 0D,00,10,00, 19,00,12,00, 15,00,14,00, 10,00,15,00, 22,00,16,00, 20,00,17,00,
21,00,18,00, 25,00,19,00, 28,00,2B,00, 18,00,1F,00, 12,00,20,00, 16,00,21,00, 17,00,22,00,
1F,00,24,00, 14,00,25,00, 31,00,26,00, 26,00,27,00, 27,00,28,00, 0C,00,56,00, 24,00,30,00,
30,00,31,00, 00,00,00,00&lt;/font&gt; 
&lt;p&gt;
To understand the scan codes and how this binary code is formated please read this
document: &lt;a href="http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc"&gt;scancode.doc&lt;/a&gt;. 
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So far so good, I will stick with x64 and you guys know now how complicated my computer
is ^^
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=990a1524-93cb-42bc-b3a9-5106e368cf3e" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,990a1524-93cb-42bc-b3a9-5106e368cf3e.aspx</comments>
      <category>All;Arena Wars;BroodWar;Game Development;Other;Programming;Reviews;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=489a0cc2-19ee-4f42-b770-c7106b0f0253</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,489a0cc2-19ee-4f42-b770-c7106b0f0253.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,489a0cc2-19ee-4f42-b770-c7106b0f0253.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=489a0cc2-19ee-4f42-b770-c7106b0f0253</wfw:commentRss>
      <title>New Pizza Commander finished and Quicksand entertainment goes online</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,489a0cc2-19ee-4f42-b770-c7106b0f0253.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/08/03/NewPizzaCommanderFinishedAndQuicksandEntertainmentGoesOnline.aspx</link>
      <pubDate>Thu, 03 Aug 2006 20:59:19 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
The new &lt;b&gt;Pizza Commander&lt;/b&gt; game (check out &lt;a href="http://exdream.no-ip.info/blog/PermaLink.aspx?guid=4ee6539c-a5fc-4e06-9f43-fd5534d5239a"&gt;my
old post&lt;/a&gt;, Pizza Commander is the first Rocket Commander Mod going commerical)
is finished and we also build a website for it, you can check that out at:&lt;br&gt;
&lt;a href="http://www.Quicksandentertainment.de"&gt;www.Quicksandentertainment.de&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
The game is quite a lot of fun. There are 15 Missions, some for beginners and some
for better players. There are also some screenshots available on the Quicksand website.
A demo will also come soon.&lt;br&gt;
&lt;br&gt;
Other than that I'm working on updating a couple of my tools (mainly &lt;b&gt;CR_Commenter&lt;/b&gt; and &lt;b&gt;AppTrafficMonitor&lt;/b&gt;),
adding a lot of features and fixing bugs. More on that this weekend.&lt;br&gt;
&lt;br&gt;
More announcements of new projects I'm currently involved in are also coming soon. 
&lt;p&gt;
Also: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c72d9f1e-53f3-4747-8490-6801d8e8b4ef&amp;DisplayLang=en"&gt;The
new DirectX SDK August 2006&lt;/a&gt; just came out. Check it out.&lt;br /&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c72d9f1e-53f3-4747-8490-6801d8e8b4ef&amp;DisplayLang=en"&gt;&lt;img src="pics/directx.jpg" border="0" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Quicksand entertainment website:&lt;br&gt;
&lt;a href="http://www.Quicksandentertainment.de"&gt;&lt;img src="images/quicksand_small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
New Pizza Commander Screenshot:&lt;br&gt;
&lt;a href="http://www.quicksandentertainment.de/images/pizza1.jpg"&gt;&lt;img src="images/pizza_small.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=489a0cc2-19ee-4f42-b770-c7106b0f0253" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,489a0cc2-19ee-4f42-b770-c7106b0f0253.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=824cfa78-5d59-4411-b466-d38059f34f6e</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,824cfa78-5d59-4411-b466-d38059f34f6e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,824cfa78-5d59-4411-b466-d38059f34f6e.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=824cfa78-5d59-4411-b466-d38059f34f6e</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
It never stops, does it? There is yet another Mod for <a href="http://www.RocketCommander.com">Rocket
Commander</a>. It is called <b>Virus Commander</b> and was made by Interwanderer aka
Erdem Yarici, known from the <a href="http://arenawars.krawall.de/com/phpBB2/viewforum.php?f=17">Rocket
Commander boards</a>. In the beginning he had a lot of questions and not much experience
with game development, but after watching the tutorials and playing around with the
code, he managed to create his own mod. Looks pretty good for the first try, music
is also nice. The gameplay itself is not much different from Flower Commander, but
I bet Interwanderer will tweak that as well in the future. Anyway, have fun with the
new mod :-) 
<p>
Download links: 
</p><ul><li><a href="http://www.rocketcommander.com/VirusCommanderUpdate.exe">VirusCommanderUpdate.exe
(6.5 mb)<br /></a></li><li><a href="http://www.rocketcommander.com/VirusCommanderSourceCode.zip">VirusCommanderSourceCode.zip
(250 kb)<br /></a></li></ul></td>
              <td valign="top">
                <font size="-2">
                  <center>Virus Commander main menu:<br /><a href="http://www.rocketcommander.com/VirusCommanderScreenshot1.jpg"><img src="http://www.rocketcommander.com/VirusCommanderScreenshot1Small.jpg" border="0" /></a><br /><br />
Big Virus in the game:<br /><a href="http://www.rocketcommander.com/VirusCommanderScreenshot2.jpg"><img src="http://www.rocketcommander.com/VirusCommanderScreenshot2Small.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=824cfa78-5d59-4411-b466-d38059f34f6e" />
      </body>
      <title>And another Mod: Virus Commander, this time made by a player</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,824cfa78-5d59-4411-b466-d38059f34f6e.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/07/03/AndAnotherModVirusCommanderThisTimeMadeByAPlayer.aspx</link>
      <pubDate>Mon, 03 Jul 2006 03:29:49 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
It never stops, does it? There is yet another Mod for &lt;a href="http://www.RocketCommander.com"&gt;Rocket
Commander&lt;/a&gt;. It is called &lt;b&gt;Virus Commander&lt;/b&gt; and was made by Interwanderer aka
Erdem Yarici, known from the &lt;a href="http://arenawars.krawall.de/com/phpBB2/viewforum.php?f=17"&gt;Rocket
Commander boards&lt;/a&gt;. In the beginning he had a lot of questions and not much experience
with game development, but after watching the tutorials and playing around with the
code, he managed to create his own mod. Looks pretty good for the first try, music
is also nice. The gameplay itself is not much different from Flower Commander, but
I bet Interwanderer will tweak that as well in the future. Anyway, have fun with the
new mod :-) &gt;
&lt;p&gt;
Download links: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.rocketcommander.com/VirusCommanderUpdate.exe"&gt;VirusCommanderUpdate.exe
(6.5 mb)&lt;br&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.rocketcommander.com/VirusCommanderSourceCode.zip"&gt;VirusCommanderSourceCode.zip
(250 kb)&lt;br&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Virus Commander main menu:&lt;br&gt;
&lt;a href="http://www.rocketcommander.com/VirusCommanderScreenshot1.jpg"&gt;&lt;img src="http://www.rocketcommander.com/VirusCommanderScreenshot1Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Big Virus in the game:&lt;br&gt;
&lt;a href="http://www.rocketcommander.com/VirusCommanderScreenshot2.jpg"&gt;&lt;img src="http://www.rocketcommander.com/VirusCommanderScreenshot2Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=824cfa78-5d59-4411-b466-d38059f34f6e" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,824cfa78-5d59-4411-b466-d38059f34f6e.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=4ee6539c-a5fc-4e06-9f43-fd5534d5239a</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,4ee6539c-a5fc-4e06-9f43-fd5534d5239a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,4ee6539c-a5fc-4e06-9f43-fd5534d5239a.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4ee6539c-a5fc-4e06-9f43-fd5534d5239a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
I'm happy to announce, that one of my Rocket Commander Mods "Pizza Commander" got
some attention by a german low budget publisher Novitas. Novitas, also known for its <a href="http://www.pepper-shop.de/peppergames/index.php">Green
Pepper and Pepper Games series</a>, will release a special version of Pizza Commander
in September 2006. The game will not be like the original game, the game principle
is completly new, but we still use the Rocket Commander engine. There will be at least
10 new levels and missions with very entertaining game rules. 
<p>
More on that can be found on our new label for budget games <a href="http://www.quicksandentertainment.de">www.quicksandentertainment.de</a> (nothing
there yet, but there will be information soon). 
</p><p>
I might post some screens of the version and the new cool game ideas in the next month
when we develop this game. 
</p><p>
Btw: The <a href="http://www.Coding4fun.de">www.Coding4Fun.de</a> Quick Tutorials
are all finished now and will hopefully be released soon, I will report on that too. 
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>This is NOT how the Pizza Commander Reloaded retail game will look like ^^<br /><a href="http://www.rocketcommander.com"><img src="images/PizzaPackung.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=4ee6539c-a5fc-4e06-9f43-fd5534d5239a" />
      </body>
      <title>Pizza Commander goes commercial</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,4ee6539c-a5fc-4e06-9f43-fd5534d5239a.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/06/30/PizzaCommanderGoesCommercial.aspx</link>
      <pubDate>Fri, 30 Jun 2006 07:23:58 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
I'm happy to announce, that one of my Rocket Commander Mods "Pizza Commander" got
some attention by a german low budget publisher Novitas. Novitas, also known for its &lt;a href="http://www.pepper-shop.de/peppergames/index.php"&gt;Green
Pepper and Pepper Games series&lt;/a&gt;, will release a special version of Pizza Commander
in September 2006. The game will not be like the original game, the game principle
is completly new, but we still use the Rocket Commander engine. There will be at least
10 new levels and missions with very entertaining game rules. 
&lt;p&gt;
More on that can be found on our new label for budget games &lt;a href="http://www.quicksandentertainment.de"&gt;www.quicksandentertainment.de&lt;/a&gt; (nothing
there yet, but there will be information soon). 
&lt;p&gt;
I might post some screens of the version and the new cool game ideas in the next month
when we develop this game. 
&lt;p&gt;
Btw: The &lt;a href="http://www.Coding4fun.de"&gt;www.Coding4Fun.de&lt;/a&gt; Quick Tutorials
are all finished now and will hopefully be released soon, I will report on that too. 
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;This is NOT how the Pizza Commander Reloaded retail game will look like ^^&lt;br&gt;
&lt;a href="http://www.rocketcommander.com"&gt;&lt;img src="images/PizzaPackung.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=4ee6539c-a5fc-4e06-9f43-fd5534d5239a" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,4ee6539c-a5fc-4e06-9f43-fd5534d5239a.aspx</comments>
      <category>All;Game Development;Other;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=988bfa4d-8021-4eb3-8298-24af693c1f56</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,988bfa4d-8021-4eb3-8298-24af693c1f56.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,988bfa4d-8021-4eb3-8298-24af693c1f56.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=988bfa4d-8021-4eb3-8298-24af693c1f56</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
For the upcoming "Quick Tutorials" on <a href="http://www.Coding4fun.de">www.Coding4Fun.de</a> I
did a new game modification of Rocket Commander. And guess what, in times like this,
where everyone is watching the WorldCup of Fussball/Soccer, we need a Fussball Commmander
(not really, but it is fun anyways). 
<p>
Don't expect too much, this is just a 5-minute game modification. The game is pretty
simple, actually it is the same as Rocket Commander and it fits perfectly into a Quick
Tutorial, where I just explain the basic steps what to do if you want to create your
own game or mod. Have fun. The Coding4fun Quick Tutorials will be released shortly. 
</p><p>
Download links: 
</p><ul><li><a href="http://www.rocketcommander.com/FussballCommanderUpdate.exe">FussballCommanderUpdate.exe
(1 mb)<br /></a></li><li><a href="http://www.rocketcommander.com/FussballCommanderSourceCode.zip">FussballCommanderSourceCode.zip
(260 kb)<br /></a></li></ul></td>
              <td valign="top">
                <font size="-2">
                  <center>Fussball Commander main menu:<br /><a href="http://www.rocketcommander.com/FussballCommander1.jpg"><img src="http://www.rocketcommander.com/FussballCommander1Small.jpg" border="0" /></a><br /><br />
Fussball Commander In game:<br /><a href="http://www.rocketcommander.com/FussballCommander2.jpg"><img src="http://www.rocketcommander.com/FussballCommander2Small.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=988bfa4d-8021-4eb3-8298-24af693c1f56" />
      </body>
      <title>Fussball Commander released</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,988bfa4d-8021-4eb3-8298-24af693c1f56.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/06/28/FussballCommanderReleased.aspx</link>
      <pubDate>Wed, 28 Jun 2006 22:39:17 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
For the upcoming "Quick Tutorials" on &lt;a href="http://www.Coding4fun.de"&gt;www.Coding4Fun.de&lt;/a&gt; I
did a new game modification of Rocket Commander. And guess what, in times like this,
where everyone is watching the WorldCup of Fussball/Soccer, we need a Fussball Commmander
(not really, but it is fun anyways). 
&lt;p&gt;
Don't expect too much, this is just a 5-minute game modification. The game is pretty
simple, actually it is the same as Rocket Commander and it fits perfectly into a Quick
Tutorial, where I just explain the basic steps what to do if you want to create your
own game or mod. Have fun. The Coding4fun Quick Tutorials will be released shortly. 
&lt;/p&gt;
&lt;p&gt;
Download links: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.rocketcommander.com/FussballCommanderUpdate.exe"&gt;FussballCommanderUpdate.exe
(1 mb)&lt;br&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.rocketcommander.com/FussballCommanderSourceCode.zip"&gt;FussballCommanderSourceCode.zip
(260 kb)&lt;br&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Fussball Commander main menu:&lt;br&gt;
&lt;a href="http://www.rocketcommander.com/FussballCommander1.jpg"&gt;&lt;img src="http://www.rocketcommander.com/FussballCommander1Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Fussball Commander In game:&lt;br&gt;
&lt;a href="http://www.rocketcommander.com/FussballCommander2.jpg"&gt;&lt;img src="http://www.rocketcommander.com/FussballCommander2Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=988bfa4d-8021-4eb3-8298-24af693c1f56" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,988bfa4d-8021-4eb3-8298-24af693c1f56.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=73bdb2f1-dc22-4675-b435-f8617cfca3cb</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,73bdb2f1-dc22-4675-b435-f8617cfca3cb.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,73bdb2f1-dc22-4675-b435-f8617cfca3cb.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=73bdb2f1-dc22-4675-b435-f8617cfca3cb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
The biggest german magazine for dot.net technology, called "dot.net magazin" wrote
a nice 3 page article about Rocket Commander, the technology and engine behind it
and a little interview with me. It really sounds great reading about .NET 2.0 and
games, I get the feeling like I'm being normal ^^ 
<p>
Jens Konerow, the author of the article, wrote really nice stuff about me, thanks
:) I'm not really a regular reader of the magazine (I only read english stuff, can't
speak german anymore, hehe), but I check out their cool website and articles from
time to time. 
</p><p>
More information can be found on the <a href="http://www.dotnet-magazin.de">official
dot.net magazine site</a>. If you have a chance to pick up the magazine, go do it,
lots of interessting stuff in there :) 
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>German Dot.net magazine:<br /><a href="http://www.dotnet-magazin.de"><img src="http://www.dotnet-magazin.de/itr/ausgaben/pspic/bildgross/95/DM7_806_bi448e56efaf728.gif" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=73bdb2f1-dc22-4675-b435-f8617cfca3cb" />
      </body>
      <title>Article in german dot.net magazine</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,73bdb2f1-dc22-4675-b435-f8617cfca3cb.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/06/26/ArticleInGermanDotnetMagazine.aspx</link>
      <pubDate>Mon, 26 Jun 2006 21:05:01 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
The biggest german magazine for dot.net technology, called "dot.net magazin" wrote
a nice 3 page article about Rocket Commander, the technology and engine behind it
and a little interview with me. It really sounds great reading about .NET 2.0 and
games, I get the feeling like I'm being normal ^^ 
&lt;p&gt;
Jens Konerow, the author of the article, wrote really nice stuff about me, thanks
:) I'm not really a regular reader of the magazine (I only read english stuff, can't
speak german anymore, hehe), but I check out their cool website and articles from
time to time. 
&lt;p&gt;
More information can be found on the &lt;a href="http://www.dotnet-magazin.de"&gt;official
dot.net magazine site&lt;/a&gt;. If you have a chance to pick up the magazine, go do it,
lots of interessting stuff in there :) 
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;German Dot.net magazine:&lt;br&gt;
&lt;a href="http://www.dotnet-magazin.de"&gt;&lt;img src="http://www.dotnet-magazin.de/itr/ausgaben/pspic/bildgross/95/DM7_806_bi448e56efaf728.gif" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=73bdb2f1-dc22-4675-b435-f8617cfca3cb" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,73bdb2f1-dc22-4675-b435-f8617cfca3cb.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=30b914d3-2eaa-410c-bdbe-5e802ef87467</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,30b914d3-2eaa-410c-bdbe-5e802ef87467.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,30b914d3-2eaa-410c-bdbe-5e802ef87467.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=30b914d3-2eaa-410c-bdbe-5e802ef87467</wfw:commentRss>
      <slash:comments>8</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
Yesterday the newest issue of the german GameStar/dev magazine came out. The title
story is "Bau dein eigenes Spiel" (Build your own game) and was written by me. The
article explains how you can develop your own game with the Rocket Commander as an
example. 
<p>
More information can be found on the <a href="http://www.gamestar.de/dev/index.html">official
GameStar/dev site</a>. If you have a chance to pick up the magazine, go do it, lots
of interessting stuff in there :) 
</p><p>
My little boo plugin is coming in a working stage. I really hate all this try'n'error
developing with the VS SDK, but I hope I don't have to go through it again (should
continue to work, shouldn't it?). Maybe I can release an early version of the boo
plugin next month sometime. 
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>German GameStar/dev magazine:<br /><a href="http://www.gamestar.de/dev/index.html"><img src="http://www.gamestar.de/images/dev/dev_0206.gif" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=30b914d3-2eaa-410c-bdbe-5e802ef87467" />
      </body>
      <title>Gamestar/dev 2006-03 Title Story</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,30b914d3-2eaa-410c-bdbe-5e802ef87467.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/05/27/Gamestardev200603TitleStory.aspx</link>
      <pubDate>Sat, 27 May 2006 20:36:03 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Yesterday the newest issue of the german GameStar/dev magazine came out. The title
story is "Bau dein eigenes Spiel" (Build your own game) and was written by me. The
article explains how you can develop your own game with the Rocket Commander as an
example. 
&lt;p&gt;
More information can be found on the &lt;a href="http://www.gamestar.de/dev/index.html"&gt;official
GameStar/dev site&lt;/a&gt;. If you have a chance to pick up the magazine, go do it, lots
of interessting stuff in there :) 
&lt;/p&gt;
&lt;p&gt;
My little boo plugin is coming in a working stage. I really hate all this try'n'error
developing with the VS SDK, but I hope I don't have to go through it again (should
continue to work, shouldn't it?). Maybe I can release an early version of the boo
plugin next month sometime. 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;German GameStar/dev magazine:&lt;br&gt;
&lt;a href="http://www.gamestar.de/dev/index.html"&gt;&lt;img src="http://www.gamestar.de/images/dev/dev_0206.gif" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=30b914d3-2eaa-410c-bdbe-5e802ef87467" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,30b914d3-2eaa-410c-bdbe-5e802ef87467.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=d847517a-6635-4850-ae88-57b2978c9183</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,d847517a-6635-4850-ae88-57b2978c9183.aspx</pingback:target>
      <dc:creator>Benjamin Nitschke (abi)</dc:creator>
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,d847517a-6635-4850-ae88-57b2978c9183.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d847517a-6635-4850-ae88-57b2978c9183</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <title>Zombie Quest - A new free 2D Adventure</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,d847517a-6635-4850-ae88-57b2978c9183.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/05/23/ZombieQuestANewFree2DAdventure.aspx</link>
      <pubDate>Tue, 23 May 2006 16:36:10 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Last weekend I was on a little conference in Fulda, which turned into lan session
in the evening (Prometheus). It was fun and we (orgas and me) decided to do a little
fast coding contest. The idea was to create a text adventure in a couple of hours.
While the contestents were working I was a little bored so I created my own adventure
in just a couple of hours ;-) 
&lt;p&gt;
I improved it a little the last 2 days (just added some graphics and sounds) and now
I got a very cool adventure, which is fun to play I think. I hope you like it too.
I also included the full source code. The whole game is based on the Rocket Commander
Engine and shows you how easy it is (2000 lines of code) to create a fullblown 2D-Adventure
with many cool effects. 
&lt;/p&gt;
&lt;p&gt;
Good luck in your adventure beating the evil zombies! 
&lt;/p&gt;
&lt;p&gt;
Download links: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="ZombieQuestInstaller.zip"&gt;ZombieQuestInstaller.zip&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="ZombieQuestSourceCode.zip"&gt;ZombieQuestSourceCode.zip&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Zombie Quest main menu:&lt;br&gt;
&lt;a href="Images/ZombieQuest/ZombieQuestScreenshot01.jpg"&gt;&lt;img src="Images/ZombieQuest/ZombieQuestScreenshot01Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Nice graphics in Zombie Quest:&lt;br&gt;
&lt;a href="Images/ZombieQuest/ZombieQuestScreenshot02.jpg"&gt;&lt;img src="Images/ZombieQuest/ZombieQuestScreenshot02Small.jpg" &amp;gt;="" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Beware of the mall:&lt;br&gt;
&lt;a href="Images/ZombieQuest/ZombieQuestScreenshot03.jpg"&gt;&lt;img src="Images/ZombieQuest/ZombieQuestScreenshot03Small.jpg" &amp;gt;="" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=d847517a-6635-4850-ae88-57b2978c9183" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,d847517a-6635-4850-ae88-57b2978c9183.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=6a6770e9-63cc-412e-81b1-6863e3d62740</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,6a6770e9-63cc-412e-81b1-6863e3d62740.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,6a6770e9-63cc-412e-81b1-6863e3d62740.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6a6770e9-63cc-412e-81b1-6863e3d62740</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Links for the Webcasts</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,6a6770e9-63cc-412e-81b1-6863e3d62740.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/05/17/LinksForTheWebcasts.aspx</link>
      <pubDate>Wed, 17 May 2006 21:39:08 GMT</pubDate>
      <description>Hi there. If you watched one of my webcasts and need a link or something, I can help you out :-)&lt;br&gt;
&lt;br&gt;
Searching for more webcasts? 
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
For example the Webcast &lt;a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032296889%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e"&gt;Introduction
to Shaders Using Managed DirectX (Level 200)&lt;/a&gt; by &lt;a href="http://www.thezbuffer.com/"&gt;ZMan&lt;/a&gt; is
at 31 May 2006&lt;/li&gt;
&lt;li&gt;
&lt;a href="PermaLink.aspx?guid=5c1feac7-ee54-485f-9b50-e347b4154667"&gt;My blog post about
the Rocket Commander webcasts and the schedule&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.microsoft.com/webcasts/"&gt;Check out http://www.microsoft.com/webcasts/
for all the webcasts at microsoft&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr size="2" width="100%"&gt;
&lt;br&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
Rocket Commander Webcast Part 1 of 3: &lt;b&gt;The Graphic Engine&lt;/b&gt; (16 May 2006)&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032294993&amp;amp;Culture=en-US"&gt;On
demand webcast download&lt;/a&gt; Please remember: This webcast has very poor audio and
many problems during the desktop sharing, the next two webcasts are MUCH better!&lt;/li&gt;
&lt;li&gt;
Get Visual Studio Express for free at &lt;a href="http://msdn.microsoft.com/vstudio/express/"&gt;http://msdn.microsoft.com/vstudio/express/&lt;/a&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Get the source code from &lt;a href="http://www.RocketCommander.com"&gt;http://www.RocketCommander.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/coding4fun/gamedevelopment/rocketcmd/default.aspx"&gt;Link
to all the Video Tutorials of Rocket Commander&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://download.microsoft.com/download/4/1/e/41e8f2c1-1bf7-419f-b31b-06122d090a49/RCMyOwnGraphicEngine.msi"&gt;MyOwnGraphicEngine.zip&lt;/a&gt;,
which is used in the webcast&lt;/li&gt;
&lt;li&gt;
More Links:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.thezbuffer.com"&gt;http://www.thezbuffer.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.gamedev.net"&gt;http://www.gamedev.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.CodeProject.com"&gt;http://www.CodeProject.com&lt;/a&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/Coding4Fun/"&gt;http://msdn.microsoft.com/Coding4Fun/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;hr size="2" width="100%"&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032294993&amp;amp;Culture=en-US"&gt;&lt;img src="images/WebcastPart1.jpg" border="0"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;
Rocket Commander Webcast Part 2 of 3: &lt;b&gt;Shaders&lt;/b&gt; (17 May 2006)&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032295005&amp;amp;Culture=en-US"&gt;On
demand webcast download&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
Get FX Composer from NVidia: &lt;a href="http://developer.nvidia.com/object/fx_composer_home.html"&gt;http://developer.nvidia.com/object/fx_composer_home.html&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
Get the source code from &lt;a href="http://www.RocketCommander.com"&gt;http://www.RocketCommander.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/coding4fun/gamedevelopment/rocketcmd/default.aspx"&gt;Link
to all the Video Tutorials of Rocket Commander&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://download.microsoft.com/download/4/1/e/41e8f2c1-1bf7-419f-b31b-06122d090a49/RCTutorial06.msi"&gt;RCTutorial06.zip&lt;/a&gt;,
which is used in the webcast&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.delphi3d.net/articles/viewarticle.php?article=bumpmapping.htm"&gt;Nice
online article about bumpmapping&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://exdream.no-ip.info/blog/PermaLink.aspx?guid=b9646192-c5e7-4173-a643-6773e1ba60b1"&gt;Books:&lt;/a&gt;
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Programming Vertex &amp;amp; Pixel Shaders (Wolfgang Engel)&lt;/li&gt;
&lt;li&gt;
Game Programming Gems 1-6 (Charles River Media)&lt;/li&gt;
&lt;li&gt;
GPU Gems 1+2 (NVidia)&lt;/li&gt;
&lt;li&gt;
Shader X 1-4 Programming Series (Wolfgang Engel)&lt;/li&gt;
&lt;li&gt;
Shaders for Game Programmers and Artists (Premier Press)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
More Links:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.thezbuffer.com"&gt;http://www.thezbuffer.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.gamedev.net"&gt;http://www.gamedev.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.CodeProject.com"&gt;http://www.CodeProject.com&lt;/a&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/Coding4Fun/"&gt;http://msdn.microsoft.com/Coding4Fun/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;hr size="2" width="100%"&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032295005&amp;amp;Culture=en-US"&gt;&lt;img src="images/WebcastPart2.jpg" border="0"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;br&gt;
Rocket Commander Webcast Part 3 of 3: &lt;b&gt;Creating your own Game Modification&lt;/b&gt; (19
May 2006)&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032295014&amp;Culture=en-US"&gt;On
demand webcast&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
Get FX Composer from NVidia: &lt;a href="http://developer.nvidia.com/object/fx_composer_home.html"&gt;http://developer.nvidia.com/object/fx_composer_home.html&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
Get the source code from &lt;a href="http://www.RocketCommander.com"&gt;http://www.RocketCommander.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/coding4fun/gamedevelopment/rocketcmd/default.aspx"&gt;Link
to all the Video Tutorials of Rocket Commander&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.rocketcommander.com/FlowerCommanderUpdate.exe"&gt;Download the Flower
Commander installer&lt;/a&gt;, which shown in the webcast&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.rocketcommander.com/FlowerCommanderSourceCode.zip"&gt;Download the
Flower Commander source code&lt;/a&gt; from the webcast.&lt;/li&gt;
&lt;li&gt;
More Links:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.thezbuffer.com"&gt;http://www.thezbuffer.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.gamedev.net"&gt;http://www.gamedev.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.CodeProject.com"&gt;http://www.CodeProject.com&lt;/a&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/Coding4Fun/"&gt;http://msdn.microsoft.com/Coding4Fun/&lt;/a&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032295014&amp;Culture=en-US"&gt;&lt;img src="images/WebcastPart3.jpg" border=0&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=6a6770e9-63cc-412e-81b1-6863e3d62740" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,6a6770e9-63cc-412e-81b1-6863e3d62740.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=2200aeba-895d-4e7b-9622-51ef0545c2a3</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,2200aeba-895d-4e7b-9622-51ef0545c2a3.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,2200aeba-895d-4e7b-9622-51ef0545c2a3.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2200aeba-895d-4e7b-9622-51ef0545c2a3</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
I was a <a href="http://ndoc.sourceforge.net/">NDoc</a> User in the past, but the
support for .NET 2.0 is very bad and the project isn't updated anymore. There are
a couple of hotfixes, but they don't really work with any of my .NET 2.0 projects
including Rocket Commander (see <a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=110491&amp;SiteID=1">here
(msdn forums)</a>, <a href="http://jonas.lagerblad.com/blog/?p=4">here (.NET 2.0 fix)</a> and
here <a href="http://weblogs.asp.net/fmarguerie/archive/2006/02/16/ndoc_project_stalled_no_version_2_microsoft.aspx">here
(blog bla)</a>). 
<p>
I tried a couple of other tools, but they either cost too much or they just don't
work. Today I tried the new version of <a href="http://www.stack.nl/%7Edimitri/doxygen/">Doxygen</a> and
yes it is not only capable of analysing .NET 2.0 code, but it produces also very nice
outputs in many formats: 
</p><ul><li>
Plain Html 
</li><li>
Html with Frames 
</li><li>
Compressed Html (.chm) 
</li><li>
LaTeX 
</li><li>
Man pages (wtf? they are still in use?) 
</li><li>
Rich Text Format (RTF, word style) 
</li><li>
Xml 
</li></ul><p>
I just took all the Rocket Commander sourcecode and made a html help page, check it
out here: <a href="http://abi.exdream.com/RocketCommanderSourceCode/index.html">http://abi.exdream.com/RocketCommanderSourceCode/index.html</a>. 
</p><p>
You can generate your own help, as you know the full source code of Rocket Commander
is freely available. Doxygen is also open source and a great tool. 
</p><p>
Btw: I'm currently using <a href="http://www.gimp.org/">GIMP</a> (GNU Image Manipulation
Program, or: A photoshop knock-off). I'm not really happy with many of the choices
the developers made (multiple windows always overlapping and losing focus, own stupid
save dialog, not many hotkey binding per default), but its free and very powerful.
At least it supports a lot more stuff than <a href="http://www.eecs.wsu.edu/paint.net/">Paint.NET</a> (where
you can't even paint with a soft brush for some reason). So if you are still using
Paint or Paint.NET, consider becoming a GIMP user :-)
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>Doxygen program:<br /><a href="http://www.stack.nl/%7Edimitri/doxygen/"><img src="Images/Doxygen.jpg" border="0" /></a><br /><br /><a href="http://abi.exdream.com/RocketCommanderSourceCode/index.html">Rocket Commander
SourceCode with Doxygen:<br /><img src="Images/RCDoxygen.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=2200aeba-895d-4e7b-9622-51ef0545c2a3" />
      </body>
      <title>Doxygen rulez!</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,2200aeba-895d-4e7b-9622-51ef0545c2a3.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/05/15/DoxygenRulez.aspx</link>
      <pubDate>Mon, 15 May 2006 00:32:00 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
I was a &lt;a href="http://ndoc.sourceforge.net/"&gt;NDoc&lt;/a&gt; User in the past, but the
support for .NET 2.0 is very bad and the project isn't updated anymore. There are
a couple of hotfixes, but they don't really work with any of my .NET 2.0 projects
including Rocket Commander (see &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=110491&amp;amp;SiteID=1"&gt;here
(msdn forums)&lt;/a&gt;, &lt;a href="http://jonas.lagerblad.com/blog/?p=4"&gt;here (.NET 2.0 fix)&lt;/a&gt; and
here &lt;a href="http://weblogs.asp.net/fmarguerie/archive/2006/02/16/ndoc_project_stalled_no_version_2_microsoft.aspx"&gt;here
(blog bla)&lt;/a&gt;). 
&lt;p&gt;
I tried a couple of other tools, but they either cost too much or they just don't
work. Today I tried the new version of &lt;a href="http://www.stack.nl/%7Edimitri/doxygen/"&gt;Doxygen&lt;/a&gt; and
yes it is not only capable of analysing .NET 2.0 code, but it produces also very nice
outputs in many formats: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Plain Html 
&lt;/li&gt;
&lt;li&gt;
Html with Frames 
&lt;/li&gt;
&lt;li&gt;
Compressed Html (.chm) 
&lt;/li&gt;
&lt;li&gt;
LaTeX 
&lt;/li&gt;
&lt;li&gt;
Man pages (wtf? they are still in use?) 
&lt;/li&gt;
&lt;li&gt;
Rich Text Format (RTF, word style) 
&lt;/li&gt;
&lt;li&gt;
Xml 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I just took all the Rocket Commander sourcecode and made a html help page, check it
out here: &lt;a href="http://abi.exdream.com/RocketCommanderSourceCode/index.html"&gt;http://abi.exdream.com/RocketCommanderSourceCode/index.html&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
You can generate your own help, as you know the full source code of Rocket Commander
is freely available. Doxygen is also open source and a great tool. 
&lt;/p&gt;
&lt;p&gt;
Btw: I'm currently using &lt;a href="http://www.gimp.org/"&gt;GIMP&lt;/a&gt; (GNU Image Manipulation
Program, or: A photoshop knock-off). I'm not really happy with many of the choices
the developers made (multiple windows always overlapping and losing focus, own stupid
save dialog, not many hotkey binding per default), but its free and very powerful.
At least it supports a lot more stuff than &lt;a href="http://www.eecs.wsu.edu/paint.net/"&gt;Paint.NET&lt;/a&gt; (where
you can't even paint with a soft brush for some reason). So if you are still using
Paint or Paint.NET, consider becoming a GIMP user :-)
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Doxygen program:&lt;br&gt;
&lt;a href="http://www.stack.nl/%7Edimitri/doxygen/"&gt;&lt;img src="Images/Doxygen.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://abi.exdream.com/RocketCommanderSourceCode/index.html"&gt;Rocket Commander
SourceCode with Doxygen:&lt;br&gt;
&lt;img src="Images/RCDoxygen.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=2200aeba-895d-4e7b-9622-51ef0545c2a3" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,2200aeba-895d-4e7b-9622-51ef0545c2a3.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=5c1feac7-ee54-485f-9b50-e347b4154667</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,5c1feac7-ee54-485f-9b50-e347b4154667.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,5c1feac7-ee54-485f-9b50-e347b4154667.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5c1feac7-ee54-485f-9b50-e347b4154667</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
I just wanted to remind you of the 3 webcasts I will do about Game Development next
week.<br />
Its about the Rocket Commander game in particular and many other topics (see below).<br /><ul><li>
Tuesday, May 16, 2006 9AM - 10AM PST (6PM - 7PM CET)<br /><b>Rocket Commander Part 1: The graphic engine.</b><br /><a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032294993%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e">Link
to MSDN Webcast: Rocket Commander Part 1/3 to register</a><br /><br /></li><li>
Wednesday, May 17, 2006 9AM - 10AM PST (6PM - 7PM CET)<br /><b>Rocket Commander Part 2: User Interface, Sound and more</b><br /><a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032295005%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e">Link
to MSDN Webcast: Rocket Commander Part 2/3 to register</a><br /><br /></li><li>
Friday, May 19, 2006 9AM - 10AM PST (6PM - 7PM CET)<br /><b>Rocket Commander Part 3: Game design and creating a game mod</b><br /><a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032295014%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e">Link
to MSDN Webcast: Rocket Commander Part 3/3 to register</a><br /><br /></li></ul><br />
I will talk about the following topics: 
<ul><li><b>Part 1: The graphic engine</b></li><li>
Learning Game Development from Rocket Commander 
</li><li>
Introducing Rocket Commander 
</li><li>
The graphic engine and its features 
</li><li>
How to write your own graphic engine 
</li><li>
Time for questions about graphics<br /><br /></li><li><b>Part 2: Shaders</b></li><li>
What are Shaders? 
</li><li>
Example Games 
</li><li>
Create Shader files with FXComposer 
</li><li>
Normal Mapping 
</li><li>
Implementing Shaders into the Engine 
</li><li>
Feel free to ask any questions you have about Shaders.<br /><br /></li><li><b>Part 3: Creating a Game Modification</b></li><li>
Input devices and User Interface 
</li><li>
Keyboard, Mouse and XBox Controller 
</li><li>
Menu and IGameScreen classes 
</li><li>
Game logic and how to change it 
</li><li>
Creating Flower Commander 
</li><li>
New main menu, new models, etc. 
</li><li>
Testing the finished Mod 
</li><li>
Game logic discussion and FAQ session at the end. 
</li></ul><p>
See you next week ;-)
</p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=5c1feac7-ee54-485f-9b50-e347b4154667" /></body>
      <title>Reminder: Rocket Commander webcasts next week.</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,5c1feac7-ee54-485f-9b50-e347b4154667.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/05/12/ReminderRocketCommanderWebcastsNextWeek.aspx</link>
      <pubDate>Fri, 12 May 2006 15:05:05 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
I just wanted to remind you of the 3 webcasts I will do about Game Development next
week.&lt;br&gt;
Its about the Rocket Commander game in particular and many other topics (see below).&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Tuesday, May 16, 2006 9AM - 10AM PST (6PM - 7PM CET)&lt;br&gt;
&lt;b&gt;Rocket Commander Part 1: The graphic engine.&lt;/b&gt;
&lt;br&gt;
&lt;a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032294993%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e"&gt;Link
to MSDN Webcast: Rocket Commander Part 1/3 to register&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Wednesday, May 17, 2006 9AM - 10AM PST (6PM - 7PM CET)&lt;br&gt;
&lt;b&gt;Rocket Commander Part 2: User Interface, Sound and more&lt;/b&gt;
&lt;br&gt;
&lt;a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032295005%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e"&gt;Link
to MSDN Webcast: Rocket Commander Part 2/3 to register&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Friday, May 19, 2006 9AM - 10AM PST (6PM - 7PM CET)&lt;br&gt;
&lt;b&gt;Rocket Commander Part 3: Game design and creating a game mod&lt;/b&gt;
&lt;br&gt;
&lt;a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032295014%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e"&gt;Link
to MSDN Webcast: Rocket Commander Part 3/3 to register&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
I will talk about the following topics: 
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Part 1: The graphic engine&lt;/b&gt; 
&lt;/li&gt;
&lt;li&gt;
Learning Game Development from Rocket Commander 
&lt;/li&gt;
&lt;li&gt;
Introducing Rocket Commander 
&lt;/li&gt;
&lt;li&gt;
The graphic engine and its features 
&lt;/li&gt;
&lt;li&gt;
How to write your own graphic engine 
&lt;/li&gt;
&lt;li&gt;
Time for questions about graphics&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Part 2: Shaders&lt;/b&gt; 
&lt;/li&gt;
&lt;li&gt;
What are Shaders? 
&lt;/li&gt;
&lt;li&gt;
Example Games 
&lt;/li&gt;
&lt;li&gt;
Create Shader files with FXComposer 
&lt;/li&gt;
&lt;li&gt;
Normal Mapping 
&lt;/li&gt;
&lt;li&gt;
Implementing Shaders into the Engine 
&lt;/li&gt;
&lt;li&gt;
Feel free to ask any questions you have about Shaders.&lt;br&gt;
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Part 3: Creating a Game Modification&lt;/b&gt; 
&lt;/li&gt;
&lt;li&gt;
Input devices and User Interface 
&lt;/li&gt;
&lt;li&gt;
Keyboard, Mouse and XBox Controller 
&lt;/li&gt;
&lt;li&gt;
Menu and IGameScreen classes 
&lt;/li&gt;
&lt;li&gt;
Game logic and how to change it 
&lt;/li&gt;
&lt;li&gt;
Creating Flower Commander 
&lt;/li&gt;
&lt;li&gt;
New main menu, new models, etc. 
&lt;/li&gt;
&lt;li&gt;
Testing the finished Mod 
&lt;/li&gt;
&lt;li&gt;
Game logic discussion and FAQ session at the end. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
See you next week ;-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=5c1feac7-ee54-485f-9b50-e347b4154667" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,5c1feac7-ee54-485f-9b50-e347b4154667.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=d3d92e91-7892-4c9d-94a1-1234affc012f</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,d3d92e91-7892-4c9d-94a1-1234affc012f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,d3d92e91-7892-4c9d-94a1-1234affc012f.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d3d92e91-7892-4c9d-94a1-1234affc012f</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
Hey Rocket Commander players, a new Mod is out: Pizza Commander. It is a lot of fun
and the most advanced mod released yet. More information and the downloads can be
found on <a href="http://www.RocketCommander.com/Mods.html#PizzaCommander">www.RocketCommander.com/Mods.html#PizzaCommander</a>. 
<p>
Features: 
</p><ul><li>
Lots of new models, check them out with the <a href="http://www.rocketcommander.com/Mods.html#Other">ModelViewer</a></li><li>
New sounds, very funny ;-) 
</li><li>
New camera controlling and better collision detection 
</li><li>
The fly (tm) ^^ 
</li><li>
Lots more, just check it out.</li><li>
Almost 20 000 Rocket Commander played online games right now, Wow!<br /></li></ul><p>
No more Rocket Commander mods for me now, if you want more: Write some yourself :-)<br />
I'm working on my Boo addin for VS now (in my free time, this blog is always about
stuff I do on my free time, sorry can't tell you the ubersecret real projects yet
^^). 
</p><p>
Btw: My polynapping attempt this weekend failed. I couldn't stay awake for more than
1-2 naps and had headaches after staying up too long. Have to try it again sometime
in the future.
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>Pizza Commander:<br /><a href="http://www.RocketCommander.com/Mods.html#PizzaCommander"><img src="http://www.RocketCommander.com/PizzaCommander5Small.jpg" border="0" /></a><br /><br /><a href="http://www.RocketCommander.com/Mods.html#PizzaCommander"><img src="http://www.RocketCommander.com/PizzaCommander1Small.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=d3d92e91-7892-4c9d-94a1-1234affc012f" />
      </body>
      <title>Pizza Commander released!</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,d3d92e91-7892-4c9d-94a1-1234affc012f.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/05/02/PizzaCommanderReleased.aspx</link>
      <pubDate>Tue, 02 May 2006 20:50:39 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Hey Rocket Commander players, a new Mod is out: Pizza Commander. It is a lot of fun
and the most advanced mod released yet. More information and the downloads can be
found on &lt;a href="http://www.RocketCommander.com/Mods.html#PizzaCommander"&gt;www.RocketCommander.com/Mods.html#PizzaCommander&lt;/a&gt;. 
&lt;p&gt;
Features: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Lots of new models, check them out with the &lt;a href="http://www.rocketcommander.com/Mods.html#Other"&gt;ModelViewer&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
New sounds, very funny ;-) 
&lt;/li&gt;
&lt;li&gt;
New camera controlling and better collision detection 
&lt;/li&gt;
&lt;li&gt;
The fly (tm) ^^ 
&lt;/li&gt;
&lt;li&gt;
Lots more, just check it out.&lt;/li&gt;
&lt;li&gt;
Almost 20 000 Rocket Commander played online games right now, Wow!&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
No more Rocket Commander mods for me now, if you want more: Write some yourself :-)&lt;br&gt;
I'm working on my Boo addin for VS now (in my free time, this blog is always about
stuff I do on my free time, sorry can't tell you the ubersecret real projects yet
^^). 
&lt;/p&gt;
&lt;p&gt;
Btw: My polynapping attempt this weekend failed. I couldn't stay awake for more than
1-2 naps and had headaches after staying up too long. Have to try it again sometime
in the future.
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Pizza Commander:&lt;br&gt;
&lt;a href="http://www.RocketCommander.com/Mods.html#PizzaCommander"&gt;&lt;img src="http://www.RocketCommander.com/PizzaCommander5Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.RocketCommander.com/Mods.html#PizzaCommander"&gt;&lt;img src="http://www.RocketCommander.com/PizzaCommander1Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=d3d92e91-7892-4c9d-94a1-1234affc012f" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,d3d92e91-7892-4c9d-94a1-1234affc012f.aspx</comments>
      <category>All;Game Development;Other;Polynapping;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=91f671e6-1b85-4a7a-bcec-aab8166b617b</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,91f671e6-1b85-4a7a-bcec-aab8166b617b.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,91f671e6-1b85-4a7a-bcec-aab8166b617b.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=91f671e6-1b85-4a7a-bcec-aab8166b617b</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
I wasn't checking the Rocket Commander for the last few days and today I was adding
the new Mods to the Website. I was amazed how many games were played in just 3-4 days
(more than in the whole month till then). Seems the Coding4Fun site on MSDN is attracking
a lot of people to try it out ^^ 
<p>
I've been working on the Fruit Commander and Pizza Commander Mods for Rocket Commander
(sorry for the delay, had a couple of other things to do), they are both similar to
the Flower Commander Mod, but more advanced and include a lot of new cool features.
The Pizza Commander is still in the Beta-Stage and will be released tomorrow (I think
^^). The Fruit Commander is finished and tested, so why not release it :) 
</p><p>
In the Fruit Commander you have to collect as much fruits as possible, but beware:
There are also rotten fruits, which are bad for your health. You have also to be careful
about the Vitamin levels of each fruit, it will not be healty for you just to collect
1 fruit type (you need all vitamins). There are also a lot of other cool features
in the game. Just to name a few: New camera with auto-roll, SpecularMap shader, cool
chilling soundtrack, new UI and a lot of game logic changes. The full source code
is also provided, check out <a href="http://www.RocketCommander.com">www.RocketCommander.com</a></p><p>
Another cool tool would be the Rocket Commander Model Viewer, which allows you to
view all kinds of models in the Rocket Commander game and its Mods. It is easy to
use and very useful to check stuff out. There is also a VB.net and c# Version available
and the best of all: It is just 300 lines of code and very easy to understand. I made
the VB version just for fun, changing the code into any other .NET language shouldn't
be hard either. You can find all download links in the Mods/Other section on the <a href="http://www.RocketCommander.com">www.RocketCommander.com</a> website. 
<br />
RC Model Viewer Tool:<br /><a href="http://www.RocketCommander.com/Mods.html"><img src="http://www.rocketcommander.com/RCModelViewer.jpg" border="0" /></a></p><p>
Again: Check out the Rocket Commander Video Tutorials on Coding4Fun if you haven't
already: <a href="http://msdn.microsoft.com/coding4fun/gamedevelopment/rocketcmd/default.aspx">http://msdn.microsoft.com/coding4fun/
gamedevelopment/rocketcmd/default.aspx</a><br /><br />
Btw: Thanks for all the news, blog posts, etc. mentioning Rocket Commander, the website
traffic increased by the factor 10 in the last couple of days ;-) 
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>
                    <a href="http://www.RocketCommander.com/Mods.html">
                      <img src="http://www.rocketcommander.com/FruitCommander1Small.jpg" border="0" />
                    </a>
                    <br />
Fruit Commander Main Menu<br /><br /><a href="http://www.RocketCommander.com/Mods.html"><img src="http://www.rocketcommander.com/FruitCommander2Small.jpg" border="0" /></a><br />
Fruit Commander Game Screen<br /><br /><a href="http://www.RocketCommander.com/Mods.html"><img src="http://www.rocketcommander.com/PizzaCommander1Small.jpg" border="0" /></a><br />
Pizza Commander, coming soon<br /></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=91f671e6-1b85-4a7a-bcec-aab8166b617b" />
      </body>
      <title>New Rocket Commander Mod: Fruit Commander and other cool Tools</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,91f671e6-1b85-4a7a-bcec-aab8166b617b.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/04/25/NewRocketCommanderModFruitCommanderAndOtherCoolTools.aspx</link>
      <pubDate>Tue, 25 Apr 2006 05:47:45 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
I wasn't checking the Rocket Commander for the last few days and today I was adding
the new Mods to the Website. I was amazed how many games were played in just 3-4 days
(more than in the whole month till then). Seems the Coding4Fun site on MSDN is attracking
a lot of people to try it out ^^ 
&lt;p&gt;
I've been working on the Fruit Commander and Pizza Commander Mods for Rocket Commander
(sorry for the delay, had a couple of other things to do), they are both similar to
the Flower Commander Mod, but more advanced and include a lot of new cool features.
The Pizza Commander is still in the Beta-Stage and will be released tomorrow (I think
^^). The Fruit Commander is finished and tested, so why not release it :) 
&lt;/p&gt;
&lt;p&gt;
In the Fruit Commander you have to collect as much fruits as possible, but beware:
There are also rotten fruits, which are bad for your health. You have also to be careful
about the Vitamin levels of each fruit, it will not be healty for you just to collect
1 fruit type (you need all vitamins). There are also a lot of other cool features
in the game. Just to name a few: New camera with auto-roll, SpecularMap shader, cool
chilling soundtrack, new UI and a lot of game logic changes. The full source code
is also provided, check out &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Another cool tool would be the Rocket Commander Model Viewer, which allows you to
view all kinds of models in the Rocket Commander game and its Mods. It is easy to
use and very useful to check stuff out. There is also a VB.net and c# Version available
and the best of all: It is just 300 lines of code and very easy to understand. I made
the VB version just for fun, changing the code into any other .NET language shouldn't
be hard either. You can find all download links in the Mods/Other section on the &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt; website. 
&lt;br&gt;
RC Model Viewer Tool:&lt;br&gt;
&lt;a href="http://www.RocketCommander.com/Mods.html"&gt;&lt;img src="http://www.rocketcommander.com/RCModelViewer.jpg" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Again: Check out the Rocket Commander Video Tutorials on Coding4Fun if you haven't
already: &lt;a href="http://msdn.microsoft.com/coding4fun/gamedevelopment/rocketcmd/default.aspx"&gt;http://msdn.microsoft.com/coding4fun/
gamedevelopment/rocketcmd/default.aspx&lt;/a&gt; 
&lt;br&gt;
&lt;br&gt;
Btw: Thanks for all the news, blog posts, etc. mentioning Rocket Commander, the website
traffic increased by the factor 10 in the last couple of days ;-) 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;&lt;a href="http://www.RocketCommander.com/Mods.html"&gt;&lt;img src="http://www.rocketcommander.com/FruitCommander1Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
Fruit Commander Main Menu&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.RocketCommander.com/Mods.html"&gt;&lt;img src="http://www.rocketcommander.com/FruitCommander2Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
Fruit Commander Game Screen&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.RocketCommander.com/Mods.html"&gt;&lt;img src="http://www.rocketcommander.com/PizzaCommander1Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
Pizza Commander, coming soon&lt;br&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=91f671e6-1b85-4a7a-bcec-aab8166b617b" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,91f671e6-1b85-4a7a-bcec-aab8166b617b.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=f14bf361-86d9-4a75-a7c5-fa345bebfa87</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,f14bf361-86d9-4a75-a7c5-fa345bebfa87.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,f14bf361-86d9-4a75-a7c5-fa345bebfa87.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f14bf361-86d9-4a75-a7c5-fa345bebfa87</wfw:commentRss>
      <slash:comments>11</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
Good news: The english version of the Rocket Commander Tutorial Videos are now avialable
at <a href="http://msdn.microsoft.com/coding4fun/gamedevelopment/rocketcmd/default.aspx">http://msdn.microsoft.com/coding4fun/gamedevelopment/rocketcmd/default.aspx</a><br />
Check them out in case you couldn't understand the german ones yet ^^ 
<p>
There are 10 Video Tutorials and a lot of links and help avialable for anyone interessted
in game programming. This are the 10 Tutorials, each video is 40 minutes and there
are plenty of links and information in the tutorials. 
</p><ul><li>
Tutorial #1. How do I setup Visual Studio for our project? 
</li><li>
Tutorial #2. Design and Concept 
</li><li>
Tutorial #3. Helper classes 
</li><li>
Tutorial #4. Graphic classes 
</li><li>
Tutorial #5. Music and Sound 
</li><li>
Tutorial #6. Shader Introduction (TangentVertex class and FxComposer) 
</li><li>
Tutorial #7. Shaders (Parallax, Instancing) 
</li><li>
Tutorial #8. Post Screen Shaders 
</li><li>
Tutorial #9. Input and Interface 
</li><li>
Tutorial #10. Game logic and the Flower Commander Mod 
</li></ul><p>
Another good news is coming from microsoft, who decided to make all Visual Studio
Express editions 100% free (prior to this they were only free to download until October
2006). In just 5 months over 5 million copies of Visual Studio Express were already
downloaded, thats really a lot for just a developer tool! 
</p><p>
Last but not least there is also some cool stuff coming up tomorrow: 2 new Mods for
the Rocket Commander and more cool stuff on <a href="http://www.RocketCommander.com">www.RocketCommander.com</a>. 
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>Rocket Commander Tutorials:<br /><a href="http://msdn.microsoft.com/coding4fun/gamedevelopment/rocketcmd/default.aspx"><img src="http://msdn.microsoft.com/coding4fun/images/gamedev/rocketcmd/rocketcmd_T1.png" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=f14bf361-86d9-4a75-a7c5-fa345bebfa87" />
      </body>
      <title>English Rocket Commander Tutorials are finally up on Coding4Fun</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,f14bf361-86d9-4a75-a7c5-fa345bebfa87.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/04/19/EnglishRocketCommanderTutorialsAreFinallyUpOnCoding4Fun.aspx</link>
      <pubDate>Wed, 19 Apr 2006 20:13:49 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Good news: The english version of the Rocket Commander Tutorial Videos are now avialable
at &lt;a href="http://msdn.microsoft.com/coding4fun/gamedevelopment/rocketcmd/default.aspx"&gt;http://msdn.microsoft.com/coding4fun/gamedevelopment/rocketcmd/default.aspx&lt;/a&gt; 
&lt;br&gt;
Check them out in case you couldn't understand the german ones yet ^^ 
&lt;p&gt;
There are 10 Video Tutorials and a lot of links and help avialable for anyone interessted
in game programming. This are the 10 Tutorials, each video is 40 minutes and there
are plenty of links and information in the tutorials. 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Tutorial #1. How do I setup Visual Studio for our project? 
&lt;/li&gt;
&lt;li&gt;
Tutorial #2. Design and Concept 
&lt;/li&gt;
&lt;li&gt;
Tutorial #3. Helper classes 
&lt;/li&gt;
&lt;li&gt;
Tutorial #4. Graphic classes 
&lt;/li&gt;
&lt;li&gt;
Tutorial #5. Music and Sound 
&lt;/li&gt;
&lt;li&gt;
Tutorial #6. Shader Introduction (TangentVertex class and FxComposer) 
&lt;/li&gt;
&lt;li&gt;
Tutorial #7. Shaders (Parallax, Instancing) 
&lt;/li&gt;
&lt;li&gt;
Tutorial #8. Post Screen Shaders 
&lt;/li&gt;
&lt;li&gt;
Tutorial #9. Input and Interface 
&lt;/li&gt;
&lt;li&gt;
Tutorial #10. Game logic and the Flower Commander Mod 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Another good news is coming from microsoft, who decided to make all Visual Studio
Express editions 100% free (prior to this they were only free to download until October
2006). In just 5 months over 5 million copies of Visual Studio Express were already
downloaded, thats really a lot for just a developer tool! 
&lt;/p&gt;
&lt;p&gt;
Last but not least there is also some cool stuff coming up tomorrow: 2 new Mods for
the Rocket Commander and more cool stuff on &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt;. 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Rocket Commander Tutorials:&lt;br&gt;
&lt;a href="http://msdn.microsoft.com/coding4fun/gamedevelopment/rocketcmd/default.aspx"&gt;&lt;img src="http://msdn.microsoft.com/coding4fun/images/gamedev/rocketcmd/rocketcmd_T1.png" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=f14bf361-86d9-4a75-a7c5-fa345bebfa87" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,f14bf361-86d9-4a75-a7c5-fa345bebfa87.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=d4e41fcd-7fcd-4810-8469-c3de5b47615c</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,d4e41fcd-7fcd-4810-8469-c3de5b47615c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,d4e41fcd-7fcd-4810-8469-c3de5b47615c.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d4e41fcd-7fcd-4810-8469-c3de5b47615c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
Before I begin brabbling about my problems, first the good news: The <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7AB978B5-5F1A-4F6A-88EB-FC646138BECA&amp;displaylang=en">DirectX
April 2006 SDK</a> came out yesterday. There is more new Direct3D 10 Beta stuff and
more samples for XACT (thats for audio creation), etc. This is the news for Managed
DirectX:<br /><br /><font size="-2"><b>Managed DirectX 2.0 Beta Update</b></font><p><font size="-2">Microsoft is working on a new managed gaming framework which will
target Windows and Xbox 360 known as the XNA Framework. The majority of what exists
today as the Managed DirectX 2.0 beta will become a key component of the XNA Framework.
Managed DirectX 2.0 will continue to ship as a beta in subsequent SDK releases of
the DirectX SDK until a beta of the XNA Framework is made available. While we are
striving to deliver a smooth transition from code written to use the Managed DirectX
2.0 beta, Microsoft can make no guarantees about the API compatibility between the
Managed DirectX 2.0 beta and the upcoming graphics API’s in the XNA Framework. Microsoft
will be providing guidance about the API differences as well as migration assistance
as more information becomes available regarding the XNA Framework. </font></p><p><font size="-2">The following is an initial list of known changes which will exist
between the Managed DirectX 2.0 beta and what Microsoft will deliver with the XNA
Framework. This list will be updated as more information is available, and is as always
subject to change. </font></p><p></p><ul><font size="-2"><li>
Managed XACT and managed XInput will replace managed DirectSound and managed DirectInput
respectively. Managed DirectSound and managed DirectInput will no longer be available
in the XNA Framework. However, DirectSound and DirectInput will still be available
for developers who choose to use Managed DirectX 1.1. 
</li><li>
Managed DxDiag will not be available in the XNA Framework. DxDiag support will still
be available for developers using Managed DirectX 1.1. 
</li><li>
Microsoft is actively investigating how to bring forward functionality from Direct
3DX 9.0 into the XNA Framework. D3DX9 will still be supported in MDX 1.1 
</li><li>
Please note that Managed DirectX 1.1 is fully compatible with the .NET Framework 2.0. 
</li></font></ul><font size="-2">The XNA Framework will be supported on several architectures (including
64-bit) for both Windows and Xbox 360. </font><p>
So what does this mean for us fellow Managed DirectX programmers? First of all: Forget
MDX2, it will never get to any final version. If you need DirectX in .NET just use
MDX1 for now. The XNA framework will replace MDX2 in the future, but it isn't here
yet. And to confuse us .NET programmers even more there is now a <a href="http://www.mdxinfo.com/articles/mdx10.php">managed
Direct3D 10 wrapper</a> (but like native Direct3D 10 it requires Vista to run). For
me this means I will stay with MDX1 until XNA becomes useable. 
</p><p>
Another thing I find very annoying is the fact that there is still no documentation
for MDX2 and MDX1 is still in the "August 2005 state". I hope that's going to be better
with XNA ... don't really know what Microsoft expect developers to do with a beta
version like MDX2 with no documentation at all. Want to read more discussions about
this DirectX release? Then check out <a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=386587&amp;PageSize=25&amp;WhichPage=1">this
post from David Weller yesterday at gamedev.net</a>. 
</p><p>
Ok back to the topic about Quo Vadis: Sorry for posting so late, but I wanted to post
my impressions and pics of the Quo Vadis last week after we drove back. Sadly my handy
(mda pro) decided to stop working and I couldn't charge it up again. When connecting
to the PC with USB the connection was only available for a couple of seconds and then
everything went dead. Today I finally opened up the device and found out that the
whole usb connector was broken and actually fell of the main board in my PDA. Tomorrow
I will try to mess everything up by soldering it back together. If I'm not careful
that's it for the device. 
</p><p>
Anyways, the problem was I couldn't get the photos back and I have no idea who called
my since last week and I don't care anymore ^^ today I got some of the pics on the
memory card back to my PC with help of a card reader (I don't have one). But most
of the pics are missing, I only got a few boring ones ^^
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>Quo Vadis Conference pics:<br />
Driving to the Quo Vadis with<br />
way to high HDR lighting.<br /><a href="images/QuoVadis01.jpg"><img src="images/QuoVadis01Small.jpg" border="0" /></a><br /><br />
One of the conference rooms.<br />
This is were I held my talk<br />
about .NET 2.0 too (room 3).<br /><a href="images/QuoVadis02.jpg"><img src="images/QuoVadis02Small.jpg" border="0" /></a><br /><br />
People at Quo Vadis<br /><a href="images/QuoVadis03.jpg"><img src="images/QuoVadis03Small.jpg" border="0" /></a><br /><br />
The autodesk booth<br /><a href="images/QuoVadis04.jpg"><img src="images/QuoVadis04Small.jpg" border="0" /></a><br /><br />
Chilling between the sessions.<br />
On the right side you can also<br />
see the Rocket Commander poster.<br />
We presented and played RC there.<br /><a href="images/QuoVadis05.jpg"><img src="images/QuoVadis05Small.jpg" border="0" /></a><br /><br />
Sorry, don't have any more pics :(<br /></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=d4e41fcd-7fcd-4810-8469-c3de5b47615c" />
      </body>
      <title>DirectX SDK April 2006 and Quo Vadis conference pics</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,d4e41fcd-7fcd-4810-8469-c3de5b47615c.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/04/12/DirectXSDKApril2006AndQuoVadisConferencePics.aspx</link>
      <pubDate>Wed, 12 Apr 2006 01:29:23 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Before I begin brabbling about my problems, first the good news: The &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7AB978B5-5F1A-4F6A-88EB-FC646138BECA&amp;amp;displaylang=en"&gt;DirectX
April 2006 SDK&lt;/a&gt; came out yesterday. There is more new Direct3D 10 Beta stuff and
more samples for XACT (thats for audio creation), etc. This is the news for Managed
DirectX:&lt;br&gt;
&lt;br&gt;
&lt;font size="-2"&gt;&lt;b&gt;Managed DirectX 2.0 Beta Update&lt;/b&gt; &lt;/font&gt;
&lt;p&gt;
&lt;font size="-2"&gt;Microsoft is working on a new managed gaming framework which will
target Windows and Xbox 360 known as the XNA Framework. The majority of what exists
today as the Managed DirectX 2.0 beta will become a key component of the XNA Framework.
Managed DirectX 2.0 will continue to ship as a beta in subsequent SDK releases of
the DirectX SDK until a beta of the XNA Framework is made available. While we are
striving to deliver a smooth transition from code written to use the Managed DirectX
2.0 beta, Microsoft can make no guarantees about the API compatibility between the
Managed DirectX 2.0 beta and the upcoming graphics API’s in the XNA Framework. Microsoft
will be providing guidance about the API differences as well as migration assistance
as more information becomes available regarding the XNA Framework. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="-2"&gt;The following is an initial list of known changes which will exist
between the Managed DirectX 2.0 beta and what Microsoft will deliver with the XNA
Framework. This list will be updated as more information is available, and is as always
subject to change. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;font size="-2"&gt;
&lt;li&gt;
Managed XACT and managed XInput will replace managed DirectSound and managed DirectInput
respectively. Managed DirectSound and managed DirectInput will no longer be available
in the XNA Framework. However, DirectSound and DirectInput will still be available
for developers who choose to use Managed DirectX 1.1. 
&lt;/li&gt;
&lt;li&gt;
Managed DxDiag will not be available in the XNA Framework. DxDiag support will still
be available for developers using Managed DirectX 1.1. 
&lt;/li&gt;
&lt;li&gt;
Microsoft is actively investigating how to bring forward functionality from Direct
3DX 9.0 into the XNA Framework. D3DX9 will still be supported in MDX 1.1 
&lt;/li&gt;
&lt;li&gt;
Please note that Managed DirectX 1.1 is fully compatible with the .NET Framework 2.0. 
&lt;/li&gt;
&lt;/font&gt;
&lt;/ul&gt;
&lt;font size="-2"&gt;The XNA Framework will be supported on several architectures (including
64-bit) for both Windows and Xbox 360. &lt;/font&gt;
&lt;p&gt;
So what does this mean for us fellow Managed DirectX programmers? First of all: Forget
MDX2, it will never get to any final version. If you need DirectX in .NET just use
MDX1 for now. The XNA framework will replace MDX2 in the future, but it isn't here
yet. And to confuse us .NET programmers even more there is now a &lt;a href="http://www.mdxinfo.com/articles/mdx10.php"&gt;managed
Direct3D 10 wrapper&lt;/a&gt; (but like native Direct3D 10 it requires Vista to run). For
me this means I will stay with MDX1 until XNA becomes useable. 
&lt;/p&gt;
&lt;p&gt;
Another thing I find very annoying is the fact that there is still no documentation
for MDX2 and MDX1 is still in the "August 2005 state". I hope that's going to be better
with XNA ... don't really know what Microsoft expect developers to do with a beta
version like MDX2 with no documentation at all. Want to read more discussions about
this DirectX release? Then check out &lt;a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=386587&amp;amp;PageSize=25&amp;amp;WhichPage=1"&gt;this
post from David Weller yesterday at gamedev.net&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Ok back to the topic about Quo Vadis: Sorry for posting so late, but I wanted to post
my impressions and pics of the Quo Vadis last week after we drove back. Sadly my handy
(mda pro) decided to stop working and I couldn't charge it up again. When connecting
to the PC with USB the connection was only available for a couple of seconds and then
everything went dead. Today I finally opened up the device and found out that the
whole usb connector was broken and actually fell of the main board in my PDA. Tomorrow
I will try to mess everything up by soldering it back together. If I'm not careful
that's it for the device. 
&lt;/p&gt;
&lt;p&gt;
Anyways, the problem was I couldn't get the photos back and I have no idea who called
my since last week and I don't care anymore ^^ today I got some of the pics on the
memory card back to my PC with help of a card reader (I don't have one). But most
of the pics are missing, I only got a few boring ones ^^
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Quo Vadis Conference pics:&lt;br&gt;
Driving to the Quo Vadis with&lt;br&gt;
way to high HDR lighting.&lt;br&gt;
&lt;a href="images/QuoVadis01.jpg"&gt;&lt;img src="images/QuoVadis01Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
One of the conference rooms.&lt;br&gt;
This is were I held my talk&lt;br&gt;
about .NET 2.0 too (room 3).&lt;br&gt;
&lt;a href="images/QuoVadis02.jpg"&gt;&lt;img src="images/QuoVadis02Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
People at Quo Vadis&lt;br&gt;
&lt;a href="images/QuoVadis03.jpg"&gt;&lt;img src="images/QuoVadis03Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
The autodesk booth&lt;br&gt;
&lt;a href="images/QuoVadis04.jpg"&gt;&lt;img src="images/QuoVadis04Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Chilling between the sessions.&lt;br&gt;
On the right side you can also&lt;br&gt;
see the Rocket Commander poster.&lt;br&gt;
We presented and played RC there.&lt;br&gt;
&lt;a href="images/QuoVadis05.jpg"&gt;&lt;img src="images/QuoVadis05Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Sorry, don't have any more pics :(&lt;br&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=d4e41fcd-7fcd-4810-8469-c3de5b47615c" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,d4e41fcd-7fcd-4810-8469-c3de5b47615c.aspx</comments>
      <category>All;Game Development;Other;Programming;Reviews;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=43c6972d-ac97-462e-a69f-cd959452ad47</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,43c6972d-ac97-462e-a69f-cd959452ad47.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,43c6972d-ac97-462e-a69f-cd959452ad47.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=43c6972d-ac97-462e-a69f-cd959452ad47</wfw:commentRss>
      <title>Quo Vadis April 6.-8. 2006</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,43c6972d-ac97-462e-a69f-cd959452ad47.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/04/02/QuoVadisApril682006.aspx</link>
      <pubDate>Sun, 02 Apr 2006 10:56:51 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
At the end of next week the &lt;a href="%3Ca%20href=" http://www.die-entwicklerkonferenz.de=""&gt;German
Quo Vadis Developer Conference&lt;/a&gt; will be held in Oberhausen near Essen (germany).
The event will take place from 2006-04-06 to the 2006-04-08 and a lot of german game
developers and even publishers will be there. 
&lt;p&gt;
At the first day 2006-04-06 at 16:00 I will present the newest tricks of .NET 2.0
in game development and talk a little about Rocket Commander too. The session name
is "&lt;b&gt;Vortrag - Making of Rocket Commander - .NET 2.0 Technologie. Ein exDream Project
- Benjamin Nitschke, exDream&lt;/b&gt;", you can check out the full schedule here: &lt;a href="http://www.die-entwicklerkonferenz.de/progamm/programm06.pdf"&gt;Quo
Vadis Program pdf&lt;/a&gt;. Don't ask me how I will do that, I never done such thing before,
but I think I will be fine. Shouldn't be much different from making video tutorials,
except maybe there will be an audience, ahhhh ^^ just kidding. 
&lt;/p&gt;
&lt;p&gt;
In the next few weeks the english Rocket Commander Video Tutorials will be available
on &lt;a href="http://msdn.microsoft.com/coding4fun/"&gt;Microsofts Coding4Fun site&lt;/a&gt;.
But there is even more! I will perform also 3 &lt;b&gt;webcasts &lt;/b&gt;in May about game development
and the Rocket Commander game. They will be in english and hosted by Microsoft, dunno
the links yet (links will be posted as soon as I know them), but here are the times: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Tuesday, May 16, 2006 9AM - 10AM PST (6PM - 7PM CET)&lt;br&gt;
&lt;b&gt;Rocket Commander Part 1: The graphic engine.&lt;/b&gt; 
&lt;/li&gt;
&lt;li&gt;
Wednesday, May 17, 2006 9AM - 10AM PST (6PM - 7PM CET)&lt;br&gt;
&lt;b&gt;Rocket Commander Part 2: User Interface, Sound and more&lt;/b&gt; 
&lt;/li&gt;
&lt;li&gt;
Friday, May 19, 2006 9AM - 10AM PST (6PM - 7PM CET)&lt;br&gt;
&lt;b&gt;Rocket Commander Part 3: Game design and creating a game mod&lt;/b&gt; 
&lt;/li&gt;
&lt;/ul&gt;
More on that later. 
&lt;p&gt;
I wanted to post a couple of tools (Collision, physics, enemy unit AI, etc) earlier
this week I done over the time for Rocket Commander and Coop Commander, but I got
the flu and was very sick and weak all week. Maybe I will be able to finish the tools
in the next couple of days and post them here, we will see. 
&lt;/p&gt;
&lt;p&gt;
Other than that: Hope to see ya at the &lt;a href="http://www.die-entwicklerkonferenz.de/"&gt;Quo
Vadis conference&lt;/a&gt;.
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Quo Vadis Developer Conference&lt;br&gt;
&lt;a href="http://www.die-entwicklerkonferenz.de/"&gt;&lt;img src="images/QuoVadis.jpg" border="0"&gt;&lt;/a&gt; 
&lt;br&gt;
Coding4Fun site:&lt;br&gt;
&lt;a href="http://msdn.microsoft.com/coding4fun/"&gt;&lt;img src="images/Coding4Fun.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=43c6972d-ac97-462e-a69f-cd959452ad47" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,43c6972d-ac97-462e-a69f-cd959452ad47.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=fa9f29cd-40f7-4795-bdd5-40e81623db70</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,fa9f29cd-40f7-4795-bdd5-40e81623db70.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,fa9f29cd-40f7-4795-bdd5-40e81623db70.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fa9f29cd-40f7-4795-bdd5-40e81623db70</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
I'm not a XBox 360 User nor do I want one yet, but that has nothing to do with its
great hardware features or that I like any other console better. I never owned any
console and I always was on the PC side (or HC side back in the C64 days), just because
it is more customizeable. But maybe this will change in the future? 
<p>
Earlier this week: As many of you propably know already <a href="http://blogs.msdn.com/tmiller/default.aspx">Tom
Miller</a>, the great Managed DirectX guy at Microsoft, switched over to the XNA team
and is working on the XBox team right now. More information can be found at <a href="http://www.thezbuffer.com/">The
Z-Buffer</a>. This lead to some speculations and is now backed up at the <a href="http://www.gdconf.com/">GDC
2006</a>, where several XNA sessions are held and at lot of people are bloging about
it (and I'm sad I can't be there, too expensive trip for me right now ^^). Some interessting
posts: <a href="http://blogs.msdn.com/danielfe/archive/2006/03/15/552513.aspx">Managed
code on Xbox 360 Developer Kits by Dan Fernandez (Microsoft - Lead Product Manager
- Visual Studio Express)</a>, <a href="http://www.brains-n-brawn.com/default.aspx?blog=http://www.mperfect.net/blog/browse.aspx?bid=632779260230625000">did
you just say .NET on XBox 360! by brains-n-brawn.com</a> and <a href="http://blogs.msdn.com/mikezintel/archive/2006/03/14/550958.aspx">A
Market Within A Market (was .NET in HD) by Mike Zintel</a>. 
</p><p>
I think this all sounds promising, maybe in the near future .NET games like the <a href="http://www.RocketCommander.com">Rocket
Commander</a> are possible on the XBox 360 without major pain rewriting all kinds
of things. 
</p><p><br /></p><p>
On the other side: Hackers are working for 4 months trying to crack the XBox 360 ..
and let just say they were not very succesfull in the past. I saw some videos and
webcast about early XBox 360 hacking attempts in January from the <a href="http://events.ccc.de/congress/2005/">22.
Chaos Communication Congress (CCC)</a> and it didn't look very "hacked" back then.<br />
But things have changed. Few hours ago this video was released: <a href="http://www.youtube.com/watch?v=XyZQ4k7Bi-8">Xbox360
DVD Firmware Hacked</a>. Hmm, that does not look good, does it? There are some interessting
discussions about it here: <a href="http://www.xboxhacker.net/index.php?option=com_smf&amp;Itemid=33&amp;topic=481.0">XboxHacker
BBS</a>. There have not released anything but infos yet, but I don't think this will
stop the "evil guys" from making prirated XBox 360 games soon and maybe there will
be a "modded" XBox 360 soon too. I just thought this was interessting ... 
</p><p><br /></p><p>
Btw: I noticed that currently a lot of people are playing <a href="http://www.RocketCommander.com">Rocket
Commander</a>, nearly 1000 games yesterday. Nice .. But there seems to be a bug with
the daily details list .. hmm, have to fix that .. bye. 
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>XBox 360 Launch in Asia.<br />
This is a very big XBox in Hongkong:<br /><a href="http://www.xbox-scene.com/"><img src="http://pictures.xbox-scene.com/xbox360/hongkong/hk.jpg" border="0" /></a><br />
XBox 360 hacked, the first video:<br /><a href="http://www.youtube.com/watch?v=XyZQ4k7Bi-8"><img src="images/XBox360Hacked.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=fa9f29cd-40f7-4795-bdd5-40e81623db70" />
      </body>
      <title>All kinds of XBox News</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,fa9f29cd-40f7-4795-bdd5-40e81623db70.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/03/19/AllKindsOfXBoxNews.aspx</link>
      <pubDate>Sun, 19 Mar 2006 03:33:49 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
I'm not a XBox 360 User nor do I want one yet, but that has nothing to do with its
great hardware features or that I like any other console better. I never owned any
console and I always was on the PC side (or HC side back in the C64 days), just because
it is more customizeable. But maybe this will change in the future? 
&lt;p&gt;
Earlier this week: As many of you propably know already &lt;a href="http://blogs.msdn.com/tmiller/default.aspx"&gt;Tom
Miller&lt;/a&gt;, the great Managed DirectX guy at Microsoft, switched over to the XNA team
and is working on the XBox team right now. More information can be found at &lt;a href="http://www.thezbuffer.com/"&gt;The
Z-Buffer&lt;/a&gt;. This lead to some speculations and is now backed up at the &lt;a href="http://www.gdconf.com/"&gt;GDC
2006&lt;/a&gt;, where several XNA sessions are held and at lot of people are bloging about
it (and I'm sad I can't be there, too expensive trip for me right now ^^). Some interessting
posts: &lt;a href="http://blogs.msdn.com/danielfe/archive/2006/03/15/552513.aspx"&gt;Managed
code on Xbox 360 Developer Kits by Dan Fernandez (Microsoft - Lead Product Manager
- Visual Studio Express)&lt;/a&gt;, &lt;a href="http://www.brains-n-brawn.com/default.aspx?blog=http://www.mperfect.net/blog/browse.aspx?bid=632779260230625000"&gt;did
you just say .NET on XBox 360! by brains-n-brawn.com&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/mikezintel/archive/2006/03/14/550958.aspx"&gt;A
Market Within A Market (was .NET in HD) by Mike Zintel&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
I think this all sounds promising, maybe in the near future .NET games like the &lt;a href="http://www.RocketCommander.com"&gt;Rocket
Commander&lt;/a&gt; are possible on the XBox 360 without major pain rewriting all kinds
of things. 
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
On the other side: Hackers are working for 4 months trying to crack the XBox 360 ..
and let just say they were not very succesfull in the past. I saw some videos and
webcast about early XBox 360 hacking attempts in January from the &lt;a href="http://events.ccc.de/congress/2005/"&gt;22.
Chaos Communication Congress (CCC)&lt;/a&gt; and it didn't look very "hacked" back then.&lt;br&gt;
But things have changed. Few hours ago this video was released: &lt;a href="http://www.youtube.com/watch?v=XyZQ4k7Bi-8"&gt;Xbox360
DVD Firmware Hacked&lt;/a&gt;. Hmm, that does not look good, does it? There are some interessting
discussions about it here: &lt;a href="http://www.xboxhacker.net/index.php?option=com_smf&amp;amp;Itemid=33&amp;amp;topic=481.0"&gt;XboxHacker
BBS&lt;/a&gt;. There have not released anything but infos yet, but I don't think this will
stop the "evil guys" from making prirated XBox 360 games soon and maybe there will
be a "modded" XBox 360 soon too. I just thought this was interessting ... 
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Btw: I noticed that currently a lot of people are playing &lt;a href="http://www.RocketCommander.com"&gt;Rocket
Commander&lt;/a&gt;, nearly 1000 games yesterday. Nice .. But there seems to be a bug with
the daily details list .. hmm, have to fix that .. bye. 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;XBox 360 Launch in Asia.&lt;br&gt;
This is a very big XBox in Hongkong:&lt;br&gt;
&lt;a href="http://www.xbox-scene.com/"&gt;&lt;img src="http://pictures.xbox-scene.com/xbox360/hongkong/hk.jpg" border="0"&gt;&lt;/a&gt; 
&lt;br&gt;
XBox 360 hacked, the first video:&lt;br&gt;
&lt;a href="http://www.youtube.com/watch?v=XyZQ4k7Bi-8"&gt;&lt;img src="images/XBox360Hacked.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=fa9f29cd-40f7-4795-bdd5-40e81623db70" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,fa9f29cd-40f7-4795-bdd5-40e81623db70.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=4baa233e-b40d-4a33-9c31-2446a3c09ac7</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,4baa233e-b40d-4a33-9c31-2446a3c09ac7.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,4baa233e-b40d-4a33-9c31-2446a3c09ac7.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4baa233e-b40d-4a33-9c31-2446a3c09ac7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
I finally found some time to finish the Rocket Commander website. A lot of features
were still missing and it makes much more sense to have seperate highscores for each
mod (each mod has a completely different scoring system). It is also cool to see who
is currently good on a specific map. Maybe you are not the best overall player, but
you maybe in the top players for the 'Easy Flight' Mission ^^ 
<p>
I'm also happy to announce that I will create Rocket Commander Video Tutorials in
english (for <a href="http://msdn.microsoft.com/coding4fun/">msdn.microsoft.com/coding4fun</a>),
similar to the ones in german on <a href="http://www.Coding4Fun.de">www.Coding4Fun.de</a> (check
it out if you havn't visit it already - and you understand german ^^). I often get
emails or icq message of people who want to do a specific thing like create a simple
shader and now I can refer to the video tutorials and don't have to explain anything
anymore :) 
</p><p>
Btw: Thanks for the many positiv feedback about Rocket Commander, similar to <a href="http://www.EuroVernichter.de">EuroVernichter</a> I
see a lot of people playing it, but usually I never get much feedback. For example
the boards are not really used right now (the german board has some discussions),
but maybe this will start as people run into problems when creating their own mods.
Or maybe everything runs so smooth that noone has any problems? Who knows ... 
</p><p>
Other than that I'm now finished with all that Rocket Commander stuff and I will continue
coding a little Coop Commander this weekend, but other than that I can focus my time
back to my regular projects (currently writing a cool shader designer tool, if any
of you want to know). 
</p><p></p></td>
              <td valign="top">
                <font size="-2">
                  <center>New Rocket Commander Site: <a href="http://www.rocketcommander.com/"><img src="images/RocketCommanderWebsiteNew1.jpg" border="0" /></a><br />
And the same site in the Flower Commander look:<br /><a href="http://www.RocketCommander.com/Default2.aspx"><img src="images/RocketCommanderWebsiteNew2.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=4baa233e-b40d-4a33-9c31-2446a3c09ac7" />
      </body>
      <title>New Rocket Commander Site finished</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,4baa233e-b40d-4a33-9c31-2446a3c09ac7.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/03/17/NewRocketCommanderSiteFinished.aspx</link>
      <pubDate>Fri, 17 Mar 2006 15:41:33 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
I finally found some time to finish the Rocket Commander website. A lot of features
were still missing and it makes much more sense to have seperate highscores for each
mod (each mod has a completely different scoring system). It is also cool to see who
is currently good on a specific map. Maybe you are not the best overall player, but
you maybe in the top players for the 'Easy Flight' Mission ^^ 
&lt;p&gt;
I'm also happy to announce that I will create Rocket Commander Video Tutorials in
english (for &lt;a href="http://msdn.microsoft.com/coding4fun/"&gt;msdn.microsoft.com/coding4fun&lt;/a&gt;),
similar to the ones in german on &lt;a href="http://www.Coding4Fun.de"&gt;www.Coding4Fun.de&lt;/a&gt; (check
it out if you havn't visit it already - and you understand german ^^). I often get
emails or icq message of people who want to do a specific thing like create a simple
shader and now I can refer to the video tutorials and don't have to explain anything
anymore :) 
&lt;p&gt;
Btw: Thanks for the many positiv feedback about Rocket Commander, similar to &lt;a href="http://www.EuroVernichter.de"&gt;EuroVernichter&lt;/a&gt; I
see a lot of people playing it, but usually I never get much feedback. For example
the boards are not really used right now (the german board has some discussions),
but maybe this will start as people run into problems when creating their own mods.
Or maybe everything runs so smooth that noone has any problems? Who knows ... 
&lt;p&gt;
Other than that I'm now finished with all that Rocket Commander stuff and I will continue
coding a little Coop Commander this weekend, but other than that I can focus my time
back to my regular projects (currently writing a cool shader designer tool, if any
of you want to know). 
&lt;p&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;New Rocket Commander Site: &lt;a href="http://www.rocketcommander.com/"&gt;&lt;img src="images/RocketCommanderWebsiteNew1.jpg" border="0"&gt;&lt;/a&gt; 
&lt;br&gt;
And the same site in the Flower Commander look:&lt;br&gt;
&lt;a href="http://www.RocketCommander.com/Default2.aspx"&gt;&lt;img src="images/RocketCommanderWebsiteNew2.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=4baa233e-b40d-4a33-9c31-2446a3c09ac7" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,4baa233e-b40d-4a33-9c31-2446a3c09ac7.aspx</comments>
      <category>All;Game Development;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=69193450-3dfd-47cd-9455-56e391f5a927</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,69193450-3dfd-47cd-9455-56e391f5a927.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,69193450-3dfd-47cd-9455-56e391f5a927.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=69193450-3dfd-47cd-9455-56e391f5a927</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
I've updated the <a href="http://www.RocketCommander.com">www.RocketCommander.com</a> website
a little bit, especially the Download and Mods sections. The new database for all
mods is up and running, but I hadn't had time to finish the web application yet (lots
of new features). 
<p><img src="images/flowerpackung.png" /><br />
Anyways, the new <a href="http://www.RocketCommander.com/mods.html">Flower Commander
V1.1 Mod</a> is available too (added the features from Rocket Commander V1.1, especially
the AutoUpdater) and it is available on <a href="http://www.RocketCommander.com">www.RocketCommander.com</a> now. 
</p><p>
And finally I've made a <a href="http://www.RocketCommander.com/CoopCommanderAlphaPreview.wmv">Coop
Commander Alpha Version Preview video</a>. It just contains some basic gameplay, but
it looks promising, doesn't it? Have fun. It will probably take another 1 or 2 weekends
till the game is more or less finished and will be released. 
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>Flower Commander V1.1 is out: <a href="http://www.rocketcommander.com/FlowerCommander2.jpg"><img src="http://www.rocketcommander.com/FlowerCommander2Small.jpg" border="0" /></a><br />
Coop Commander Preview Video<br /><a href="http://www.RocketCommander.com/CoopCommanderAlphaPreview.wmv"><img src="http://www.RocketCommander.com/CoopCommanderAlphaVideo.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=69193450-3dfd-47cd-9455-56e391f5a927" />
      </body>
      <title>Flower Commander V1.1 available and Coop Commander Preview Video</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,69193450-3dfd-47cd-9455-56e391f5a927.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/03/13/FlowerCommanderV11AvailableAndCoopCommanderPreviewVideo.aspx</link>
      <pubDate>Mon, 13 Mar 2006 16:21:14 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
I've updated the &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt; website
a little bit, especially the Download and Mods sections. The new database for all
mods is up and running, but I hadn't had time to finish the web application yet (lots
of new features). 
&lt;p&gt;
&lt;img src="images/flowerpackung.png"&gt;
&lt;br&gt;
Anyways, the new &lt;a href="http://www.RocketCommander.com/mods.html"&gt;Flower Commander
V1.1 Mod&lt;/a&gt; is available too (added the features from Rocket Commander V1.1, especially
the AutoUpdater) and it is available on &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt; now. 
&lt;/p&gt;
&lt;p&gt;
And finally I've made a &lt;a href="http://www.RocketCommander.com/CoopCommanderAlphaPreview.wmv"&gt;Coop
Commander Alpha Version Preview video&lt;/a&gt;. It just contains some basic gameplay, but
it looks promising, doesn't it? Have fun. It will probably take another 1 or 2 weekends
till the game is more or less finished and will be released. 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Flower Commander V1.1 is out: &lt;a href="http://www.rocketcommander.com/FlowerCommander2.jpg"&gt;&lt;img src="http://www.rocketcommander.com/FlowerCommander2Small.jpg" border="0"&gt;&lt;/a&gt; 
&lt;br&gt;
Coop Commander Preview Video&lt;br&gt;
&lt;a href="http://www.RocketCommander.com/CoopCommanderAlphaPreview.wmv"&gt;&lt;img src="http://www.RocketCommander.com/CoopCommanderAlphaVideo.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=69193450-3dfd-47cd-9455-56e391f5a927" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,69193450-3dfd-47cd-9455-56e391f5a927.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=10a8fa95-85bb-4553-86e3-e3b9d5dfd69c</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,10a8fa95-85bb-4553-86e3-e3b9d5dfd69c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,10a8fa95-85bb-4553-86e3-e3b9d5dfd69c.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=10a8fa95-85bb-4553-86e3-e3b9d5dfd69c</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
Hey everyone. The game Rocket Commander and its source code is now available on <a href="http://www.RocketCommander.com">www.RocketCommander.com</a>.
More features and stuff will be available on the website in the next couple of days,
stay tuned. 
<p>
I've also updated Rocket Commander to Version 1.1. It contains a couple of new cool
features:<br /></p><ul><li>
XBox360 Controller support, just plug it in and have fun with the rumble feature. 
</li><li>
A new exciting mission: The Revenge. It will be very hard and it is full of tricks.
Be sure to complete it a couple of times normally before trying to attempt special
tricks. 
</li><li>
AutoUpdater functionallity for future updates. Will be checked every time you launch
the game. 
</li></ul>
And as allways full source code is provided. Have fun! 
</td>
              <td valign="top">
                <font size="-2">
                  <center>The new www.RocketCommander.com site<br /><a href="http://www.RocketCommander.com"><img src="images/RocketCommanderWebsite.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=10a8fa95-85bb-4553-86e3-e3b9d5dfd69c" />
      </body>
      <title>Rocket Commander V1.1 avialable now and www.RocketCommander.com launched</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,10a8fa95-85bb-4553-86e3-e3b9d5dfd69c.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/03/12/RocketCommanderV11AvialableNowAndWwwRocketCommandercomLaunched.aspx</link>
      <pubDate>Sun, 12 Mar 2006 14:05:59 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Hey everyone. The game Rocket Commander and its source code is now available on &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt;.
More features and stuff will be available on the website in the next couple of days,
stay tuned. 
&lt;p&gt;
I've also updated Rocket Commander to Version 1.1. It contains a couple of new cool
features:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
XBox360 Controller support, just plug it in and have fun with the rumble feature. 
&lt;li&gt;
A new exciting mission: The Revenge. It will be very hard and it is full of tricks.
Be sure to complete it a couple of times normally before trying to attempt special
tricks. 
&lt;li&gt;
AutoUpdater functionallity for future updates. Will be checked every time you launch
the game. 
&lt;/ul&gt;
And as allways full source code is provided. Have fun! 
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;The new www.RocketCommander.com site&lt;br&gt;
&lt;a href="http://www.RocketCommander.com"&gt;&lt;img src="images/RocketCommanderWebsite.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=10a8fa95-85bb-4553-86e3-e3b9d5dfd69c" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,10a8fa95-85bb-4553-86e3-e3b9d5dfd69c.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=62b6e84f-838f-408a-8ad3-94993576a05d</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,62b6e84f-838f-408a-8ad3-94993576a05d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,62b6e84f-838f-408a-8ad3-94993576a05d.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=62b6e84f-838f-408a-8ad3-94993576a05d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
I bought an <b>XBox 360 Controller</b> yesterday just for fun. I'm not a console player
and I'm not very comfortable with console controllers (they are not very good for
RTS or Shooter games), but I thought maybe it would be fun to play <b>Rocket Commander</b> with
the new XBox 360 Controller. Especially the rumble feature would make sense if hitting
an asteroid. 
<br /><br />
I've implemented support for the XBox 360 controller this morning with help of <b>XInput</b>,
which was pretty easy (there are just 4 methods, I only need 3 of them, thats it).
The only annoying thing is that <b>XInput</b> is not available for Managed DirectX
yet, only the c++ dll supports it and the beta Managed DirectX for .NET 2.0 dll, which
isn't used for Rocket Commander. But importing the 4 methods with DllImport is no
biggy. If you want to know more about implementing <b>XInput</b> either check out
the new Rocket Commander V1.1 source code or this link:<br /><a href="http://www.brains-n-brawn.com/default.aspx?vDir=mcexinput">http://www.brains-n-brawn.com/default.aspx?vDir=mcexinput</a><br /><br /><p><a href="http://www.cebit.de/" target="cebit"><img src="http://www.cebit.de/img/logo_tradeshow.gif" border="0" height="80" width="180" /></a><br />
I was on the CeBIT today and it was pretty interessting, I will be there the next
couple of days too. I can be found either running around on the Microsoft booth in
hall 4 or on our own booth in hall 27/C29 (esports and entertainment). At microsoft
you might see the presentation about <a href="http://www.coding4fun.de">Coding4Fun.de</a> and
ClubSite4Fun and GameDev4Fun, which contains the <a href="http://www.RocketCommander.com">Rocket
Commander</a> and Flower Commander too. I haven't finished the website for <a href="http://www.RocketCommander.com">www.RocketCommander.com</a> yet,
but hopefully I will finish most of it this night.
</p><p>
Thanks to <b>Polynapping </b>I still have some extra time these days, but it isn't
easy with the CeBIT and staying awake for longer than 10 hours most of the time. I
usually sleep after the fair in the evening for 1.5 hours and before going to it again
1.5-3.0 hours. Also every 4 hours 20 minutes of sleep in the night. Most people ask
me if I feel tired all day and here is the answer: No! I'm even more awake most of
the time because I feel refreshed after napping or sleeping for a short while.<br /></p><p>
Back to the CeBIT: On the right you can also see a picture of me in the new <a href="http://www.volkswagen.de/vwcms_publish/vwcms/master_public/virtualmaster/de3/modelle/eos.html">Volkswagen
car "Eos"</a>. Tomorrow I will make some more pictures. 
</p><p>
I will post another blog entry later today when the new Rocket Commander website is
finished. 
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>The XBox 360 Controller<br /><img src="images/xBox360Controller.jpg" border="0" /><br /><br />
and Rocket Commander working together now :)<br /><a href="images/RocketCommander/RocketCommanderScreenshot0115.jpg"><img src="images/RocketCommander/RocketCommanderScreenshot0115Small.jpg" border="0" /></a><br /><br />
That's me in the new Volkswagen car "Eos" on the CeBIT 2006:<br /><a href="images/Cebit2006_benny_in_eos.jpg"><img src="images/Cebit2006_benny_in_eos_small.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=62b6e84f-838f-408a-8ad3-94993576a05d" />
      </body>
      <title>Coding4Fun.de Launch with the Rocket Commander and www.RocketCommander.com coming soon</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,62b6e84f-838f-408a-8ad3-94993576a05d.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/03/10/Coding4FundeLaunchWithTheRocketCommanderAndWwwRocketCommandercomComingSoon.aspx</link>
      <pubDate>Fri, 10 Mar 2006 21:01:08 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
I bought an &lt;b&gt;XBox 360 Controller&lt;/b&gt; yesterday just for fun. I'm not a console player
and I'm not very comfortable with console controllers (they are not very good for
RTS or Shooter games), but I thought maybe it would be fun to play &lt;b&gt;Rocket Commander&lt;/b&gt; with
the new XBox 360 Controller. Especially the rumble feature would make sense if hitting
an asteroid. 
&lt;br&gt;
&lt;br&gt;
I've implemented support for the XBox 360 controller this morning with help of &lt;b&gt;XInput&lt;/b&gt;,
which was pretty easy (there are just 4 methods, I only need 3 of them, thats it).
The only annoying thing is that &lt;b&gt;XInput&lt;/b&gt; is not available for Managed DirectX
yet, only the c++ dll supports it and the beta Managed DirectX for .NET 2.0 dll, which
isn't used for Rocket Commander. But importing the 4 methods with DllImport is no
biggy. If you want to know more about implementing &lt;b&gt;XInput&lt;/b&gt; either check out
the new Rocket Commander V1.1 source code or this link:&lt;br&gt;
&lt;a href="http://www.brains-n-brawn.com/default.aspx?vDir=mcexinput"&gt;http://www.brains-n-brawn.com/default.aspx?vDir=mcexinput&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;a href="http://www.cebit.de/" target="cebit"&gt;&lt;img src="http://www.cebit.de/img/logo_tradeshow.gif" border="0" height="80" width="180"&gt;&lt;/a&gt;
&lt;br&gt;
I was on the CeBIT today and it was pretty interessting, I will be there the next
couple of days too. I can be found either running around on the Microsoft booth in
hall 4 or on our own booth in hall 27/C29 (esports and entertainment). At microsoft
you might see the presentation about &lt;a href="http://www.coding4fun.de"&gt;Coding4Fun.de&lt;/a&gt; and
ClubSite4Fun and GameDev4Fun, which contains the &lt;a href="http://www.RocketCommander.com"&gt;Rocket
Commander&lt;/a&gt; and Flower Commander too. I haven't finished the website for &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt; yet,
but hopefully I will finish most of it this night.
&lt;/p&gt;
&lt;p&gt;
Thanks to &lt;b&gt;Polynapping &lt;/b&gt;I still have some extra time these days, but it isn't
easy with the CeBIT and staying awake for longer than 10 hours most of the time. I
usually sleep after the fair in the evening for 1.5 hours and before going to it again
1.5-3.0 hours. Also every 4 hours 20 minutes of sleep in the night. Most people ask
me if I feel tired all day and here is the answer: No! I'm even more awake most of
the time because I feel refreshed after napping or sleeping for a short while.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Back to the CeBIT: On the right you can also see a picture of me in the new &lt;a href="http://www.volkswagen.de/vwcms_publish/vwcms/master_public/virtualmaster/de3/modelle/eos.html"&gt;Volkswagen
car "Eos"&lt;/a&gt;. Tomorrow I will make some more pictures. 
&lt;/p&gt;
&lt;p&gt;
I will post another blog entry later today when the new Rocket Commander website is
finished. 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;The XBox 360 Controller&lt;br&gt;
&lt;img src="images/xBox360Controller.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
and Rocket Commander working together now :)&lt;br&gt;
&lt;a href="images/RocketCommander/RocketCommanderScreenshot0115.jpg"&gt;&lt;img src="images/RocketCommander/RocketCommanderScreenshot0115Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
That's me in the new Volkswagen car "Eos" on the CeBIT 2006:&lt;br&gt;
&lt;a href="images/Cebit2006_benny_in_eos.jpg"&gt;&lt;img src="images/Cebit2006_benny_in_eos_small.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=62b6e84f-838f-408a-8ad3-94993576a05d" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,62b6e84f-838f-408a-8ad3-94993576a05d.aspx</comments>
      <category>All;Game Development;Other;Polynapping;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=08787c5a-9cf8-4a08-8e0e-6bef6e8047c3</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,08787c5a-9cf8-4a08-8e0e-6bef6e8047c3.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,08787c5a-9cf8-4a08-8e0e-6bef6e8047c3.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=08787c5a-9cf8-4a08-8e0e-6bef6e8047c3</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://www.cebit.de" target="cebit">
          <img src="http://www.cebit.de/img/logo_tradeshow.gif" border="0" height="80" width="180" />
        </a>
        <br />
exDream entertainment will be at the CeBIT again this year. You can find us at the <a href="http://www.cebit.de" target="cebit"><img src="general/dreieck.png" border="0" height="13" width="7" /> CeBIT
2006</a> in Hannover:<b> Hall 27/C29 </b>(Digital Media by nordmedia). The CeBit starts
at <b>2006-03-09 </b>and ends<b> 2006-03-15</b>. 
<p><b>Polynapping</b>: I think I will adjust my polynapping schedule for this week to
stay awake for 8 hours over the day. I have several meetings and I don't think it
would be cool to fall asleep there ^^ I would bet the CeBIT is also not very polynapping-friendly.
Instead of sleeping 6 times 20 minutes I will sleep now only 4 times 20 minutes (evening
and night) and before I go to work I sleep 3 hours straight. This will keep me awake
for 8 hours (at least it worked today :-) ), then 4 polynapps follow and the same
thing starts over the next day. Thats now twice as much sleep as before (4 hours instead
of 2-3), but still only half the amount normal people sleep. 
</p><p><b>Coop Commander</b>: Looks quite good, the game physics and ship control are finished
now and it is quite fun to shoot around and see everything exloding. There are still
2 major issues left: Good enemy unit AI (they move pretty stupid right now, either
straight ahead or on a collision path) and multiplayer syncronization. Dunno if I
can make it this week, but I should have some time at nights with my new schedule
to keep working on that.
</p><img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=08787c5a-9cf8-4a08-8e0e-6bef6e8047c3" /></body>
      <title>CeBIT 2006 in Hannover</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,08787c5a-9cf8-4a08-8e0e-6bef6e8047c3.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/03/06/CeBIT2006InHannover.aspx</link>
      <pubDate>Mon, 06 Mar 2006 15:04:32 GMT</pubDate>
      <description>&lt;a href="http://www.cebit.de" target="cebit"&gt;&lt;img src="http://www.cebit.de/img/logo_tradeshow.gif" border="0" height="80" width="180"&gt;&lt;/a&gt;
&lt;br&gt;
exDream entertainment will be at the CeBIT again this year. You can find us at the &lt;a href="http://www.cebit.de" target="cebit"&gt;&lt;img src="general/dreieck.png" border="0" height="13" width="7"&gt;&amp;nbsp;CeBIT
2006&lt;/a&gt; in Hannover:&lt;b&gt; Hall 27/C29 &lt;/b&gt;(Digital Media by nordmedia). The CeBit starts
at &lt;b&gt;2006-03-09 &lt;/b&gt;and ends&lt;b&gt; 2006-03-15&lt;/b&gt;. 
&lt;p&gt;
&lt;b&gt;Polynapping&lt;/b&gt;: I think I will adjust my polynapping schedule for this week to
stay awake for 8 hours over the day. I have several meetings and I don't think it
would be cool to fall asleep there ^^ I would bet the CeBIT is also not very polynapping-friendly.
Instead of sleeping 6 times 20 minutes I will sleep now only 4 times 20 minutes (evening
and night) and before I go to work I sleep 3 hours straight. This will keep me awake
for 8 hours (at least it worked today :-) ), then 4 polynapps follow and the same
thing starts over the next day. Thats now twice as much sleep as before (4 hours instead
of 2-3), but still only half the amount normal people sleep. 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Coop Commander&lt;/b&gt;: Looks quite good, the game physics and ship control are finished
now and it is quite fun to shoot around and see everything exloding. There are still
2 major issues left: Good enemy unit AI (they move pretty stupid right now, either
straight ahead or on a collision path) and multiplayer syncronization. Dunno if I
can make it this week, but I should have some time at nights with my new schedule
to keep working on that.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=08787c5a-9cf8-4a08-8e0e-6bef6e8047c3" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,08787c5a-9cf8-4a08-8e0e-6bef6e8047c3.aspx</comments>
      <category>All;Game Development;Other;Polynapping;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=00a41de2-716f-4482-adc5-65e672df0b08</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,00a41de2-716f-4482-adc5-65e672df0b08.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,00a41de2-716f-4482-adc5-65e672df0b08.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=00a41de2-716f-4482-adc5-65e672df0b08</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
Ok, I have a lot on my mind right now, hopefully I will get to most of it ^^ 
<p>
First of all: Here is a new screenshot of Coop Commander. I've implemented laser effects
for the ships and improved some of the effects. Today I will finish up the game physic
and damage system and tomorrow some multiplayer code will hopefully bring this game
to life. While it may not be realistic to release the game together with Rocket Commander,
at least not in its final version, I still plan to finish most of the issues till
thursday, when Rocket Commander is released. Maybe I will just release an alpha version
and then go from there. 
</p><p>
I also registered the domain <a href="http://www.CoopCommander.com">Coop Commander</a> today,
maybe this will make me think more seriously about Coop Commander ^^ I will start
coding the website when the game is released. 
</p><p><a href="http://www.ArenaWars.net"><img src="images/ArenaWarsBoardsMini.jpg" /></a><br />
As some Arena Wars players have noticed the Arena Wars boards had a lot of troubles
the last couple of month (lots of spam, hacks, etc.). I installed a fresh new shiny
version of the boards and copied a spam-free-version (couple of months old) of the
board over it. Updating to the newest sql, phpBB, etc. versions was a lot of work.
Those open source guys just don't know how to make an easy installer. The most annoying
part was php, which is incredible incompatible (versions 4 and 5). First the site
worked, but the board didn't, then the board was updated and worked, but the site
wasn't compatible to that again. After modifying a lot of php files finally I got
it working, but php is no fun at all. 
</p><p>
There are also new discussion boards for Rocket Commander and its Mods. Hopefully
they will find some use since Microsoft isn't planing to implement any boards on its
german Coding4Fun site, where Rocket Commander will be hosted. 
</p><p><img src="images/SleepScheduleMini.jpg" /><br /><b>Polynapping</b>: What happend? Well, it went ok for 2-3 weeks and I overslept only
a few times, but never more than 2-3 hours per day and max. 1-2 times per week. Well
it happens, especially if you stay awake for too long. That can really mess up your
polynapping sleeping schedule. Then last week I crashed after a party and slept for
nearly 8 hours. Must have something to do with the huge amount of alcohol I drunk
(again: not good for polynapping) ^^ 
</p><p>
Then I went for a biphasic sleeping pattern (2*1.5-3 hours of sleep per day) for a
couple of days and that didn't work out. I slept monophasic (thats normal 7-8 hours
of sleep) for few days and then decided this wednesday I had to go back to polyphasic
sleep. More time, more fun and hell, I know what to expect now.
</p><p><a href="http://www.cebit.de"><img src="http://www.cebit.de/img/logo_tradeshow.gif" /></a><br />
Next week will be very hard for me because of the <a href="http://www.cebit.de">CeBIT</a> fair
(exDream will be there on several booths, I will post some info about that next week).
Sleeping somewhere else isn't an easy thing for me, I still have some troubles getting
to sleep as it is. That is also the main reason polynapping over a long period of
time wasn't succesful for most testers. It is hard to get to sleep every 4 hours.
Not only physically, but especially socially. 
</p><p>
The last nap I took (only 20 minutes) was incredible refreshing, maybe I sometimes
sleep to long (30-40 minutes since I don't know if I fall asleep right away or stay
awake for 10-15 more minutes). <a href="http://www.stevepavlina.com/blog/2006/02/polyphasic-sleep-20/">Steve
Pavlina posts here</a> that 20 Minutes worked best for him too and he also gives a
lot of tips and information about polynapping. He even was interviewed by the NY Times.
I guess he is currently the most famous polynapper. 
</p><p>
I nearly forgot to mention that <a href="http://www.frederic-schneider.de/">Frederic
Schneider</a> wrote a nice article about me on <a href="http://www.gameports.net/cms/Kommentare-zu_Der-Erfolg-eines-Deutschen_966.html">GamePorts
(in german)</a>. It is about <a href="http://www.RocketCommander.com">Rocket Commander</a> and
my current project <a href="http://www.CoopCommander.com">Coop Commander</a>. Check
it out here: <a href="http://www.gameports.net/cms/Kommentare-zu_Der-Erfolg-eines-Deutschen_966.html">http://www.gameports.net/cms/Kommentare-zu_Der-Erfolg-eines-Deutschen_966.html</a></p></td>
              <td valign="top">
                <font size="-2">
                  <center>Coop Commander: The new ion cannon effect.<br /><a href="images/CoopCommander/CoopCommanderScreenshot0022.jpg"><img src="images/CoopCommander/CoopCommanderScreenshot0022Small.jpg" border="0" /></a><br /><br />
ArenaWars.net Boards back up again.<br /><a href="http://www.Arenawars.net"><img src="images/ArenaWarsBoards.jpg" border="0" /></a><br /><br />
German article about me on GamePorts.net:<br /><a href="http://www.gameports.net/cms/Kommentare-zu_Der-Erfolg-eines-Deutschen_966.html"><img src="images/GamePortsArticle.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=00a41de2-716f-4482-adc5-65e672df0b08" />
      </body>
      <title>Coop Commander, New Arena Wars boards and Polynapping Update</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,00a41de2-716f-4482-adc5-65e672df0b08.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/03/04/CoopCommanderNewArenaWarsBoardsAndPolynappingUpdate.aspx</link>
      <pubDate>Sat, 04 Mar 2006 17:40:59 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Ok, I have a lot on my mind right now, hopefully I will get to most of it ^^ 
&lt;p&gt;
First of all: Here is a new screenshot of Coop Commander. I've implemented laser effects
for the ships and improved some of the effects. Today I will finish up the game physic
and damage system and tomorrow some multiplayer code will hopefully bring this game
to life. While it may not be realistic to release the game together with Rocket Commander,
at least not in its final version, I still plan to finish most of the issues till
thursday, when Rocket Commander is released. Maybe I will just release an alpha version
and then go from there. 
&lt;/p&gt;
&lt;p&gt;
I also registered the domain &lt;a href="http://www.CoopCommander.com"&gt;Coop Commander&lt;/a&gt; today,
maybe this will make me think more seriously about Coop Commander ^^ I will start
coding the website when the game is released. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ArenaWars.net"&gt;&lt;img src="images/ArenaWarsBoardsMini.jpg"&gt;&lt;/a&gt;
&lt;br&gt;
As some Arena Wars players have noticed the Arena Wars boards had a lot of troubles
the last couple of month (lots of spam, hacks, etc.). I installed a fresh new shiny
version of the boards and copied a spam-free-version (couple of months old) of the
board over it. Updating to the newest sql, phpBB, etc. versions was a lot of work.
Those open source guys just don't know how to make an easy installer. The most annoying
part was php, which is incredible incompatible (versions 4 and 5). First the site
worked, but the board didn't, then the board was updated and worked, but the site
wasn't compatible to that again. After modifying a lot of php files finally I got
it working, but php is no fun at all. 
&lt;/p&gt;
&lt;p&gt;
There are also new discussion boards for Rocket Commander and its Mods. Hopefully
they will find some use since Microsoft isn't planing to implement any boards on its
german Coding4Fun site, where Rocket Commander will be hosted. 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/SleepScheduleMini.jpg"&gt;
&lt;br&gt;
&lt;b&gt;Polynapping&lt;/b&gt;: What happend? Well, it went ok for 2-3 weeks and I overslept only
a few times, but never more than 2-3 hours per day and max. 1-2 times per week. Well
it happens, especially if you stay awake for too long. That can really mess up your
polynapping sleeping schedule. Then last week I crashed after a party and slept for
nearly 8 hours. Must have something to do with the huge amount of alcohol I drunk
(again: not good for polynapping) ^^ 
&lt;/p&gt;
&lt;p&gt;
Then I went for a biphasic sleeping pattern (2*1.5-3 hours of sleep per day) for a
couple of days and that didn't work out. I slept monophasic (thats normal 7-8 hours
of sleep) for few days and then decided this wednesday I had to go back to polyphasic
sleep. More time, more fun and hell, I know what to expect now.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cebit.de"&gt;&lt;img src="http://www.cebit.de/img/logo_tradeshow.gif"&gt;&lt;/a&gt;
&lt;br&gt;
Next week will be very hard for me because of the &lt;a href="http://www.cebit.de"&gt;CeBIT&lt;/a&gt; fair
(exDream will be there on several booths, I will post some info about that next week).
Sleeping somewhere else isn't an easy thing for me, I still have some troubles getting
to sleep as it is. That is also the main reason polynapping over a long period of
time wasn't succesful for most testers. It is hard to get to sleep every 4 hours.
Not only physically, but especially socially. 
&lt;/p&gt;
&lt;p&gt;
The last nap I took (only 20 minutes) was incredible refreshing, maybe I sometimes
sleep to long (30-40 minutes since I don't know if I fall asleep right away or stay
awake for 10-15 more minutes). &lt;a href="http://www.stevepavlina.com/blog/2006/02/polyphasic-sleep-20/"&gt;Steve
Pavlina posts here&lt;/a&gt; that 20 Minutes worked best for him too and he also gives a
lot of tips and information about polynapping. He even was interviewed by the NY Times.
I guess he is currently the most famous polynapper. 
&lt;/p&gt;
&lt;p&gt;
I nearly forgot to mention that &lt;a href="http://www.frederic-schneider.de/"&gt;Frederic
Schneider&lt;/a&gt; wrote a nice article about me on &lt;a href="http://www.gameports.net/cms/Kommentare-zu_Der-Erfolg-eines-Deutschen_966.html"&gt;GamePorts
(in german)&lt;/a&gt;. It is about &lt;a href="http://www.RocketCommander.com"&gt;Rocket Commander&lt;/a&gt; and
my current project &lt;a href="http://www.CoopCommander.com"&gt;Coop Commander&lt;/a&gt;. Check
it out here: &lt;a href="http://www.gameports.net/cms/Kommentare-zu_Der-Erfolg-eines-Deutschen_966.html"&gt;http://www.gameports.net/cms/Kommentare-zu_Der-Erfolg-eines-Deutschen_966.html&lt;/a&gt; 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Coop Commander: The new ion cannon effect.&lt;br&gt;
&lt;a href="images/CoopCommander/CoopCommanderScreenshot0022.jpg"&gt;&lt;img src="images/CoopCommander/CoopCommanderScreenshot0022Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
ArenaWars.net Boards back up again.&lt;br&gt;
&lt;a href="http://www.Arenawars.net"&gt;&lt;img src="images/ArenaWarsBoards.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
German article about me on GamePorts.net:&lt;br&gt;
&lt;a href="http://www.gameports.net/cms/Kommentare-zu_Der-Erfolg-eines-Deutschen_966.html"&gt;&lt;img src="images/GamePortsArticle.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=00a41de2-716f-4482-adc5-65e672df0b08" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,00a41de2-716f-4482-adc5-65e672df0b08.aspx</comments>
      <category>All;Game Development;Other;Polynapping;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=222cf88a-fe34-42db-8ee7-4cfc0a13fb11</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,222cf88a-fe34-42db-8ee7-4cfc0a13fb11.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,222cf88a-fe34-42db-8ee7-4cfc0a13fb11.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=222cf88a-fe34-42db-8ee7-4cfc0a13fb11</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
Hey everyone. Sorry for not posting anything in the last week. The main reason is
the fact that I have too much work to do and not much time for developing Coop Commander
(it is still a secondonary project for me, but it looks quite good at the moment).
Instead of doing the same mistakes this week again I will pause the development of
Coop Commander until this weekend. 
<p>
There were 2 main problems last week that kept me from posting any updates or screenshots.
I wanted to finish the multiplayer stuff, which worked ok in the beginning (chat,
lobby, simple in game messages, no problems here, worked after 2 days of coding),
but later everything was screwed. The system was far to simple and there was no way
to syncronize everything without rewriting a lot of game code. The other problem was
the effect manager. Just adding few effects was no big deal, but finetuning every
single effect and finding out each position for each unit where to spawn effects,
units, smoke, etc. was a long process. 
</p><p>
Last weekend I just finished the effects stuff and next weekend I will hopefully finish
all multiplayer issues (the game isn't very syncron right now ^^). It does not really
matter because there are still over 1.5 weeks left till Rocket Commander is released.
By then Coop Commander should be working stable. Maybe we will also add more missions
and more enemy ships. 
</p><p>
So what is the problem with all this multiplayer code? I can tell you: 
</p><ul><li>
No Time to implement any complicated network system 
</li><li>
No Engine to use, I've got sockets, thats it. 
</li><li>
Directly sending all game data causes too much bandwidth. The server should be able
to handle thousands of users with less than 1mbit. 
</li><li>
RTS game tick based approach too indirect and jerky. Let me explain: Directly implementing
a game tick based approach like in RTS games would be a lot of work and while keeping
the network bandwidth low, the gameplay would be no fun at all. In RTS games the player
can't control anything directly. When he orders a unit to move, the sound may play
instantly, but the unit will not move for a couple of 100 ms (usually 1-2 game ticks,
which is 200-400ms). While this is perfectly fine for RTS games with a lot of units,
in the case of Coop Commander the player only controls 1 unit and directly sees what
is going on. This makes this approach unusable. 
</li><li>
Client-side prediction is both too much work and very sucky for laggy situations.
It is also not supported by RC and would be quite a lot of work to implement. 
</li><li>
Shooters usually use UDP and send out a lot of data, which makes them require a server
for each game in contrast to MMORPGs, RTS or RPGs, which usually only require 1 master
server, which either handles all the players directly or let the clients host their
own games. 
</li><li>
I'm crazy enough to try something new 
</li></ul>
So I wrote a concept of a new network architecture called <b>Half'n'Half Server-Client
Model</b> and I implemented some unit tests to try it out. Some new problems did occur
I hadn't thought of and testing and fixing all those problems could take some additional
time. Since I don't want to be a total jerkoff and tell you how great this new network
game architecture is while there is no proof that it does actually work, I will wait
until I have implemented a basic version of this <b>Half'n'Half Server-Client Model</b> into
Coop Commander and played around with it. 
<p>
The basic idea is to split the network code to the server and the clients. The server
manages all important data (live or die, spawning of units, etc.), while the client
manages all the complicated and bandwidth-demanding data himself and only sends results
to the server. This includes player collisions, doing damage, controlling the ship,
etc. The server can still reject messages that make no sense and most important game
actions like collecting items, powerups or killing units will not actually happen
until the server confirms it. 
</p><p>
This architecture targets very bad networks (lag situations above 500ms, up to 1000-2000ms)
while making the game still "enjoyable" enough for the player and it minimizes the
bandwidth for all players and the server to an absolute minimum (around max. 100 bytes/sec,
that's it). 
</p><p>
For now, just enjoy the screenshots ^^ There will be no beta because the game itself
is online-only and will update itself as long as I have fun developing it. You should
be able to download it from <a href="http://www.RocketCommander.com">www.RocketCommander.com</a> around
9. March 2006. 
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>The calm before the storm:<br />
The multiplayer game screen with 2 players:<br /><a href="images/CoopCommander/CoopCommanderScreenshot0013.jpg"><img src="images/CoopCommander/CoopCommanderScreenshot0013Small.jpg" border="0" /></a><br /><br />
The is a <b>Carrier</b> on the left side and there a lot of<br />
fire balls in the scene comming from the <b>Bombers</b> on<br />
the right side. The other player <b>TestPC</b> is also visible.<br /><a href="images/CoopCommander/CoopCommanderScreenshot0015.jpg"><img src="images/CoopCommander/CoopCommanderScreenshot0015Small.jpg" border="0" /></a><br /><br />
A little deeper in the first mission a lot of <b>Mine Layers</b><br />
put these mine field into place and the <b>Carrier</b><br />
spawns new units all the time. Not much chance for<br />
the <b>Lizard</b> (my ship) on its own ^^<br /><a href="images/CoopCommander/CoopCommanderScreenshot0021.jpg"><img src="images/CoopCommander/CoopCommanderScreenshot0021Small.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=222cf88a-fe34-42db-8ee7-4cfc0a13fb11" />
      </body>
      <title>Coop Commander - More screenshots</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,222cf88a-fe34-42db-8ee7-4cfc0a13fb11.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/02/27/CoopCommanderMoreScreenshots.aspx</link>
      <pubDate>Mon, 27 Feb 2006 16:43:06 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Hey everyone. Sorry for not posting anything in the last week. The main reason is
the fact that I have too much work to do and not much time for developing Coop Commander
(it is still a secondonary project for me, but it looks quite good at the moment).
Instead of doing the same mistakes this week again I will pause the development of
Coop Commander until this weekend. 
&lt;p&gt;
There were 2 main problems last week that kept me from posting any updates or screenshots.
I wanted to finish the multiplayer stuff, which worked ok in the beginning (chat,
lobby, simple in game messages, no problems here, worked after 2 days of coding),
but later everything was screwed. The system was far to simple and there was no way
to syncronize everything without rewriting a lot of game code. The other problem was
the effect manager. Just adding few effects was no big deal, but finetuning every
single effect and finding out each position for each unit where to spawn effects,
units, smoke, etc. was a long process. 
&lt;/p&gt;
&lt;p&gt;
Last weekend I just finished the effects stuff and next weekend I will hopefully finish
all multiplayer issues (the game isn't very syncron right now ^^). It does not really
matter because there are still over 1.5 weeks left till Rocket Commander is released.
By then Coop Commander should be working stable. Maybe we will also add more missions
and more enemy ships. 
&lt;/p&gt;
&lt;p&gt;
So what is the problem with all this multiplayer code? I can tell you: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
No Time to implement any complicated network system 
&lt;/li&gt;
&lt;li&gt;
No Engine to use, I've got sockets, thats it. 
&lt;/li&gt;
&lt;li&gt;
Directly sending all game data causes too much bandwidth. The server should be able
to handle thousands of users with less than 1mbit. 
&lt;/li&gt;
&lt;li&gt;
RTS game tick based approach too indirect and jerky. Let me explain: Directly implementing
a game tick based approach like in RTS games would be a lot of work and while keeping
the network bandwidth low, the gameplay would be no fun at all. In RTS games the player
can't control anything directly. When he orders a unit to move, the sound may play
instantly, but the unit will not move for a couple of 100 ms (usually 1-2 game ticks,
which is 200-400ms). While this is perfectly fine for RTS games with a lot of units,
in the case of Coop Commander the player only controls 1 unit and directly sees what
is going on. This makes this approach unusable. 
&lt;/li&gt;
&lt;li&gt;
Client-side prediction is both too much work and very sucky for laggy situations.
It is also not supported by RC and would be quite a lot of work to implement. 
&lt;/li&gt;
&lt;li&gt;
Shooters usually use UDP and send out a lot of data, which makes them require a server
for each game in contrast to MMORPGs, RTS or RPGs, which usually only require 1 master
server, which either handles all the players directly or let the clients host their
own games. 
&lt;/li&gt;
&lt;li&gt;
I'm crazy enough to try something new 
&lt;/li&gt;
&lt;/ul&gt;
So I wrote a concept of a new network architecture called &lt;b&gt;Half'n'Half Server-Client
Model&lt;/b&gt; and I implemented some unit tests to try it out. Some new problems did occur
I hadn't thought of and testing and fixing all those problems could take some additional
time. Since I don't want to be a total jerkoff and tell you how great this new network
game architecture is while there is no proof that it does actually work, I will wait
until I have implemented a basic version of this &lt;b&gt;Half'n'Half Server-Client Model&lt;/b&gt; into
Coop Commander and played around with it. 
&lt;p&gt;
The basic idea is to split the network code to the server and the clients. The server
manages all important data (live or die, spawning of units, etc.), while the client
manages all the complicated and bandwidth-demanding data himself and only sends results
to the server. This includes player collisions, doing damage, controlling the ship,
etc. The server can still reject messages that make no sense and most important game
actions like collecting items, powerups or killing units will not actually happen
until the server confirms it. 
&lt;/p&gt;
&lt;p&gt;
This architecture targets very bad networks (lag situations above 500ms, up to 1000-2000ms)
while making the game still "enjoyable" enough for the player and it minimizes the
bandwidth for all players and the server to an absolute minimum (around max. 100 bytes/sec,
that's it). 
&lt;/p&gt;
&lt;p&gt;
For now, just enjoy the screenshots ^^ There will be no beta because the game itself
is online-only and will update itself as long as I have fun developing it. You should
be able to download it from &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt; around
9. March 2006. 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;The calm before the storm:&lt;br&gt;
The multiplayer game screen with 2 players:&lt;br&gt;
&lt;a href="images/CoopCommander/CoopCommanderScreenshot0013.jpg"&gt;&lt;img src="images/CoopCommander/CoopCommanderScreenshot0013Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
The is a &lt;b&gt;Carrier&lt;/b&gt; on the left side and there a lot of&lt;br&gt;
fire balls in the scene comming from the &lt;b&gt;Bombers&lt;/b&gt; on&lt;br&gt;
the right side. The other player &lt;b&gt;TestPC&lt;/b&gt; is also visible.&lt;br&gt;
&lt;a href="images/CoopCommander/CoopCommanderScreenshot0015.jpg"&gt;&lt;img src="images/CoopCommander/CoopCommanderScreenshot0015Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
A little deeper in the first mission a lot of &lt;b&gt;Mine Layers&lt;/b&gt;
&lt;br&gt;
put these mine field into place and the &lt;b&gt;Carrier&lt;/b&gt;
&lt;br&gt;
spawns new units all the time. Not much chance for&lt;br&gt;
the &lt;b&gt;Lizard&lt;/b&gt; (my ship) on its own ^^&lt;br&gt;
&lt;a href="images/CoopCommander/CoopCommanderScreenshot0021.jpg"&gt;&lt;img src="images/CoopCommander/CoopCommanderScreenshot0021Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=222cf88a-fe34-42db-8ee7-4cfc0a13fb11" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,222cf88a-fe34-42db-8ee7-4cfc0a13fb11.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=8c7b3bfd-3bbb-4e88-936d-84e045dbafa2</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,8c7b3bfd-3bbb-4e88-936d-84e045dbafa2.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,8c7b3bfd-3bbb-4e88-936d-84e045dbafa2.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8c7b3bfd-3bbb-4e88-936d-84e045dbafa2</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
This is a very early screen of <b>Coop Commander</b>. The modeler is complaining that
I show it on my blog because most of the textures are still missing (all the ships
in the backgroud ^^). But I think it looks promising. The Effect system and all basic
units are implemented and some of the game logic is working too. Basically it is just
a bunch of unit tests right now, not a full game. 
<p>
Today I started with the Multiplayer coding. I hope I can finish the Game Server by
tomorrow. Usually this takes a couple of weeks (chat lobby, player management, game
lobby, game server), but I will try to minimize the features and do it as quickly
as possible (I still want <b>Coop Commander</b> to be finished in roufly 1 week).
By the end of the week the game should be playable. Next week we plan some final balancing
and finetuning of the effects and units. 
</p><p>
The game will be released together with <b>Rocket Commander</b> in 2-3 weeks, stay
tuned! 
</p><p><b>Polynapping</b>: Little note to self: I worked way to much the last 2 days and
missed a couple of naps and then was too excited to sleep sometimes. Then last night
I overslept for 3 hours and can't even remember turning off the alarm clock. I guess
I have to pay more attention keeping my polynapping schedule. Also working too much,
like I do at the moment, isn't that good for polynapping, the body needs some rest.
Relaxing in 1-2 phases is a good thing. I will report back next week how I'm doing
with my Polynapping. 
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>Sneak preview of Coop Commander:<br /><a href="images/RocketCommander/CoopCommander0001.jpg"><img src="images/RocketCommander/CoopCommander0001Small.jpg" border="0" /></a></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=8c7b3bfd-3bbb-4e88-936d-84e045dbafa2" />
      </body>
      <title>Coop Commander - First sneak preview</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,8c7b3bfd-3bbb-4e88-936d-84e045dbafa2.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/02/16/CoopCommanderFirstSneakPreview.aspx</link>
      <pubDate>Thu, 16 Feb 2006 22:27:07 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
This is a very early screen of &lt;b&gt;Coop Commander&lt;/b&gt;. The modeler is complaining that
I show it on my blog because most of the textures are still missing (all the ships
in the backgroud ^^). But I think it looks promising. The Effect system and all basic
units are implemented and some of the game logic is working too. Basically it is just
a bunch of unit tests right now, not a full game. 
&lt;p&gt;
Today I started with the Multiplayer coding. I hope I can finish the Game Server by
tomorrow. Usually this takes a couple of weeks (chat lobby, player management, game
lobby, game server), but I will try to minimize the features and do it as quickly
as possible (I still want &lt;b&gt;Coop Commander&lt;/b&gt; to be finished in roufly 1 week).
By the end of the week the game should be playable. Next week we plan some final balancing
and finetuning of the effects and units. 
&lt;/p&gt;
&lt;p&gt;
The game will be released together with &lt;b&gt;Rocket Commander&lt;/b&gt; in 2-3 weeks, stay
tuned! 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Polynapping&lt;/b&gt;: Little note to self: I worked way to much the last 2 days and
missed a couple of naps and then was too excited to sleep sometimes. Then last night
I overslept for 3 hours and can't even remember turning off the alarm clock. I guess
I have to pay more attention keeping my polynapping schedule. Also working too much,
like I do at the moment, isn't that good for polynapping, the body needs some rest.
Relaxing in 1-2 phases is a good thing. I will report back next week how I'm doing
with my Polynapping. 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Sneak preview of Coop Commander:&lt;br&gt;
&lt;a href="images/RocketCommander/CoopCommander0001.jpg"&gt;&lt;img src="images/RocketCommander/CoopCommander0001Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=8c7b3bfd-3bbb-4e88-936d-84e045dbafa2" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,8c7b3bfd-3bbb-4e88-936d-84e045dbafa2.aspx</comments>
      <category>All;Game Development;Polynapping;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=4a1f09be-6a48-4f88-9434-ce0b238ccc79</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,4a1f09be-6a48-4f88-9434-ce0b238ccc79.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,4a1f09be-6a48-4f88-9434-ce0b238ccc79.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4a1f09be-6a48-4f88-9434-ce0b238ccc79</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
Last week I've finished up the <a href="http://www.RocketCommander.com">Rocket Commander</a> Game
Programming Video Tutorials. They will be released on the german Coding4Fun Site together
with the Launch of Rocket Commander. I guess that will be at the end of this month
or in the beginning of march. Anyway, for the last Tutorial I made a cool Mod (Game
Modification) called <b>Flower Commander</b>. You can see a screenshot of that game
in action on the left side. It took less than 1 day of work. The gameplay is somehow
similar to the original game. However the graphics are very different. 
<p>
This week is the last one for my interns (little shoutout to Christoph <span id="_user_DR.WAII@web.de">Rienäcker </span>and
Enrico Cieslik) and we thought we could do something cool. My current projects are
mostly finished. For example today I finished the 3ds max exporter and importer for
my engine, now I hope I don't have to do c++ for a long time. Maybe next week I can
teleport myself back to reality with some <b>boo</b> coding and finishing my <a href="PermaLink.aspx?guid=803399c1-5030-4c27-a31b-b1a088982ca8">Visual
Studio Boo Language Extension</a> ...
</p><p>
Since I have so much time every day (22 hours thanks to polynapping), it is time to
do something. We plan to make another Mod called <b>Coop Commander</b> and it will
be finished by the end of this week. Basically it is a multiplayer cooperative shoot'n'up
with rpg elements. Kinda Diablo2 in Space ^^ I will post some screenshots from time
to time. It uses the basic engine of Rocket Commander and will be freely available
like the original game. This are the basic game principles: Similar to Rocket Commander
you fly through the space and try to accomplish each mission. There are 6 different
kind of enemy units in the game and you can choose from 3 units, which all get stronger
over the time and have completly different abilities (rpg elements). The game will
be balanced for up to 3-4 players. You can also play it with just 2 players, but it
will be hard. Singleplayer is considered to be impossible, you have to meet with other
players to be able to fight off all enemy unit types (each unit class has it weaknesses).
</p><p>
Obviously <b>Coop Commander</b> will not be able to compete with any AAA title, but
we would like to see if this idea works out and maybe it is a lot of fun to play with
your friends some challenging missions. Additional elements, more beta testing, more
levels and enemies can be added later. I like the idea of finishing the game in 1
week, but it will be a lot of work (there is no effect system, no unit system and
no multiplayer in Rocket Commander and that need to be added). 
</p><p><b>Polynapping</b>, the second week: Nothing special to report. The last couple of
days I slept regulary every 4 hours for 20-30 minutes (never more) and I'm very awake
after few minutes when staying up. Going to bed has been easier too, but I still can't
go to sleep immediatly (takes up to 5-10 minutes). Another strange thing is the fact
I can't remember any dreams, no lucid dreams, no day dreams, nothing. Sometimes I
feel like I have slept for several hours and then I look on the clock and it was just
25 minutes. I'm very awake at day and night and neither myself nor anyone else seem
to notice anything different about me except the fact that I have go to sleep every
4 hours. But that is only annoying at work (sleeping there is hard because of noise,
driving home and back is a pain in the ass). 
</p><p>
Thanks for all the emails and concerns other people have with this. I'm not telling
anyone to try this for yourself and I was not expecting for this to work. I just was
curious and I think it is a very cool alternative sleeping pattern, especially if
you are in need of time or want to experiment around. Maybe I will keep doing this
for a couple of months and then switch to a biphasic sleep pattern and go back to
polynapping from time to time. I'm not going to post much more about polynapping because
I think most of the blogs I've posted last week cover all the interessting stuff and
I agree with most of it. 
</p></td>
              <td valign="top">
                <font size="-2">
                  <center>Rocket Commander in action:<br /><a href="pics/RocketCommander8.jpg"><img src="pics/RocketCommander8Small.jpg" border="0" /></a><p>
Flower Commander main menu:<br /><a href="pics/FlowerCommander1.jpg"><img src="pics/FlowerCommander1Small.jpg" border="0" /></a></p><p>
Flower Commander in action:<br /><a href="pics/FlowerCommander2.jpg"><img src="pics/FlowerCommander2Small.jpg" border="0" /></a></p></center>
                </font>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=4a1f09be-6a48-4f88-9434-ce0b238ccc79" />
      </body>
      <title>More Commanders</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,4a1f09be-6a48-4f88-9434-ce0b238ccc79.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2006/02/14/MoreCommanders.aspx</link>
      <pubDate>Tue, 14 Feb 2006 03:15:25 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Last week I've finished up the &lt;a href="http://www.RocketCommander.com"&gt;Rocket Commander&lt;/a&gt; Game
Programming Video Tutorials. They will be released on the german Coding4Fun Site together
with the Launch of Rocket Commander. I guess that will be at the end of this month
or in the beginning of march. Anyway, for the last Tutorial I made a cool Mod (Game
Modification) called &lt;b&gt;Flower Commander&lt;/b&gt;. You can see a screenshot of that game
in action on the left side. It took less than 1 day of work. The gameplay is somehow
similar to the original game. However the graphics are very different. 
&lt;p&gt;
This week is the last one for my interns (little shoutout to Christoph &lt;span id="_user_DR.WAII@web.de"&gt;Rienäcker &lt;/span&gt;and
Enrico Cieslik) and we thought we could do something cool. My current projects are
mostly finished. For example today I finished the 3ds max exporter and importer for
my engine, now I hope I don't have to do c++ for a long time. Maybe next week I can
teleport myself back to reality with some &lt;b&gt;boo&lt;/b&gt; coding and finishing my &lt;a href="PermaLink.aspx?guid=803399c1-5030-4c27-a31b-b1a088982ca8"&gt;Visual
Studio Boo Language Extension&lt;/a&gt; ...
&lt;/p&gt;
&lt;p&gt;
Since I have so much time every day (22 hours thanks to polynapping), it is time to
do something. We plan to make another Mod called &lt;b&gt;Coop Commander&lt;/b&gt; and it will
be finished by the end of this week. Basically it is a multiplayer cooperative shoot'n'up
with rpg elements. Kinda Diablo2 in Space ^^ I will post some screenshots from time
to time. It uses the basic engine of Rocket Commander and will be freely available
like the original game. This are the basic game principles: Similar to Rocket Commander
you fly through the space and try to accomplish each mission. There are 6 different
kind of enemy units in the game and you can choose from 3 units, which all get stronger
over the time and have completly different abilities (rpg elements). The game will
be balanced for up to 3-4 players. You can also play it with just 2 players, but it
will be hard. Singleplayer is considered to be impossible, you have to meet with other
players to be able to fight off all enemy unit types (each unit class has it weaknesses).
&lt;/p&gt;
&lt;p&gt;
Obviously &lt;b&gt;Coop Commander&lt;/b&gt; will not be able to compete with any AAA title, but
we would like to see if this idea works out and maybe it is a lot of fun to play with
your friends some challenging missions. Additional elements, more beta testing, more
levels and enemies can be added later. I like the idea of finishing the game in 1
week, but it will be a lot of work (there is no effect system, no unit system and
no multiplayer in Rocket Commander and that need to be added). 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Polynapping&lt;/b&gt;, the second week: Nothing special to report. The last couple of
days I slept regulary every 4 hours for 20-30 minutes (never more) and I'm very awake
after few minutes when staying up. Going to bed has been easier too, but I still can't
go to sleep immediatly (takes up to 5-10 minutes). Another strange thing is the fact
I can't remember any dreams, no lucid dreams, no day dreams, nothing. Sometimes I
feel like I have slept for several hours and then I look on the clock and it was just
25 minutes. I'm very awake at day and night and neither myself nor anyone else seem
to notice anything different about me except the fact that I have go to sleep every
4 hours. But that is only annoying at work (sleeping there is hard because of noise,
driving home and back is a pain in the ass). 
&lt;/p&gt;
&lt;p&gt;
Thanks for all the emails and concerns other people have with this. I'm not telling
anyone to try this for yourself and I was not expecting for this to work. I just was
curious and I think it is a very cool alternative sleeping pattern, especially if
you are in need of time or want to experiment around. Maybe I will keep doing this
for a couple of months and then switch to a biphasic sleep pattern and go back to
polynapping from time to time. I'm not going to post much more about polynapping because
I think most of the blogs I've posted last week cover all the interessting stuff and
I agree with most of it. 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;font size="-2"&gt;
&lt;center&gt;Rocket Commander in action:&lt;br&gt;
&lt;a href="pics/RocketCommander8.jpg"&gt;&lt;img src="pics/RocketCommander8Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;p&gt;
Flower Commander main menu:&lt;br&gt;
&lt;a href="pics/FlowerCommander1.jpg"&gt;&lt;img src="pics/FlowerCommander1Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Flower Commander in action:&lt;br&gt;
&lt;a href="pics/FlowerCommander2.jpg"&gt;&lt;img src="pics/FlowerCommander2Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/center&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=4a1f09be-6a48-4f88-9434-ce0b238ccc79" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,4a1f09be-6a48-4f88-9434-ce0b238ccc79.aspx</comments>
      <category>All;Game Development;Other;Polynapping;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=604d0402-daf8-445e-a125-af0436ec1e7b</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,604d0402-daf8-445e-a125-af0436ec1e7b.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,604d0402-daf8-445e-a125-af0436ec1e7b.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=604d0402-daf8-445e-a125-af0436ec1e7b</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
Merry Christmas everyone. Instead of sleeping or preparing mentally for christmas
(well, you know, all that hugging and eating), I wrote a special Rocket Commander
Christmas Edition. I got also many requests of people wanting to join the beta, which
was internal and closed a week ago. 
<p>
So to make the time more painful until Rocket Commander is released, here is a nice
little video of it. Just 40 seconds long and it shows only the very beginning of a
level, but it is already 10 MB big and compressing it any more doesn't really make
sense for such a high speed game. Anyways, enjoy the video (tip: right click and choose
save as (rename it to some .wmv file) if your browser wants to directly play the file,
which may cause a lot of waiting): <a href="http://www.RocketCommander.com/RocketCommanderPreviewHigh.wmv">RocketCommanderPreviewHigh.wmv
(10 MB)</a></p><p>
I will post more stuff about this year, my experiences and some more stuff next week.
Stay tuned.
</p></td>
              <td valign="top">
                <a href="http://www.RocketCommander.com/RocketCommanderPreviewHigh.wmv">
                  <img src="images/RocketCommander/VideoPreview.jpg" border="0" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=604d0402-daf8-445e-a125-af0436ec1e7b" />
      </body>
      <title>Merry Christmas and a Rocket Commander Video</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,604d0402-daf8-445e-a125-af0436ec1e7b.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2005/12/24/MerryChristmasAndARocketCommanderVideo.aspx</link>
      <pubDate>Sat, 24 Dec 2005 13:11:48 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Merry Christmas everyone. Instead of sleeping or preparing mentally for christmas
(well, you know, all that hugging and eating), I wrote a special Rocket Commander
Christmas Edition. I got also many requests of people wanting to join the beta, which
was internal and closed a week ago. 
&lt;p&gt;
So to make the time more painful until Rocket Commander is released, here is a nice
little video of it. Just 40 seconds long and it shows only the very beginning of a
level, but it is already 10 MB big and compressing it any more doesn't really make
sense for such a high speed game. Anyways, enjoy the video (tip: right click and choose
save as (rename it to some .wmv file) if your browser wants to directly play the file,
which may cause a lot of waiting): &lt;a href="http://www.RocketCommander.com/RocketCommanderPreviewHigh.wmv"&gt;RocketCommanderPreviewHigh.wmv
(10 MB)&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I will post more stuff about this year, my experiences and some more stuff next week.
Stay tuned.
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;a href="http://www.RocketCommander.com/RocketCommanderPreviewHigh.wmv"&gt;&lt;img src="images/RocketCommander/VideoPreview.jpg" border="0"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=604d0402-daf8-445e-a125-af0436ec1e7b" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,604d0402-daf8-445e-a125-af0436ec1e7b.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=2811ff76-f35a-4a8c-add1-9a7adff54180</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,2811ff76-f35a-4a8c-add1-9a7adff54180.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,2811ff76-f35a-4a8c-add1-9a7adff54180.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2811ff76-f35a-4a8c-add1-9a7adff54180</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
The rocket commander website does support few new features now (hour, day, week lists
and top 100 for all lists). Btw: Thanks to all beta testers who reported bugs. 
<p>
Monday of this week the <a href="http://msdn.microsoft.com/directx/sdk/">DirectX December
2005 SDK</a> did came out (with updated Managed DirectX for .NET 2.0 stuff and even
a technical preview of DirectX 10, but this does require Vista to run). 
</p><p>
Today I tried to port my NormalMapCompressor tool to Managed DirectX for .NET 2.0
(December 2005 Edition). If you want to port your DirectX code to .NET 2.0, this post
could be helpful :) If you ask why even bother porting, here is the answer: For easier
debugging (using Visual Studio 2005 with .NET 1.1 DirectX causes a lot of annoying
Loader Lock errors when trying to debug, etc.)! Also I like to refactor my code from
time to time and make it more clean if I continue working on it, this is what happens
if you port to Managed DirectX for .NET 2.0.<br />
Please also see <a href="http://www.thezbuffer.com/articles/291.aspx">this post from
ZMan about DirectX for .NET 2.0 changes</a> (he already wrote about it for the October
2005 edition). 
</p><p>
I will only mention things that happend in this little project (NormalMapCompressor),
I'm sure porting Rocket Commander over will take a couple of more refactorings. 
</p><p></p><ul><li>
The DXHelp class doesn't exist anymore. For using DXHelp.GetTypeSize(typeof(YourVertexStruct))
you have to use the VertexInformation class now:<br /><b>VertexInformation.GetDeclarationVertexSize(YourVertexStruct.VertexDeclaration,
0);</b> and obviously you have to define the VertexDeclaration in your vertex class
now (but I had that done anyways).</li><li>
TextureLoader doesn't exist anymore either, I've used it to get image information.<br />
For that you can now use <b>Texture.GetImageInformationFromFile</b><br />
(was <b>TextureLoader.ImageInformationFromFile(filename)</b> before).</li><li>
Many methods now expect the device as the first parameter instead of the last (more
consistent method parameters now). Some examples: Mesh.FromFile, Mesh.Clone or the
Mesh constructors.</li><li>
LockVertexBuffer and many other Mesh methods are simplified now and use generics and
the GraphicBuffer class now. For example the following code:<br /><b>TangentVertex[] verts =<br />
(TangentVertex[])someMesh.LockVertexBuffer(<br />
typeof(TangentVertex),<br />
LockFlags.None,<br />
new int[1] { someMesh.NumberVertices });</b><br />
gets converted to:<br /><b>TangentVertex[] verts = someMesh.LockVertexBuffer<tangentvertex>
(LockFlags.None).<br />
ReadArray(someMesh.NumberVertices);
</tangentvertex></b><br />
If you want to write to the <b>GraphicBuffer</b> just use Write(.), thats also much
easier.</li><li><b>PresentParameters.Windowed</b> is now called <b>PresentParameters.IsWindowed</b></li><li>
For some strange reason the device has to be created with an IntPtr instead of a form
or control, <a href="http://www.thezbuffer.com/articles/292.aspx">ZMan also pointed
that out here</a>. Just write form.Handle or control.Handle now.</li><li>
Device <b>GetDeviceCaps</b> becomes <b>GetDeviceCapabilities</b>, also all other Caps
became Capabilities.</li><li>
Matrix methods got a lot longer names, say hello to <b>Matrix.PerspectiveFieldOfViewLeftHanded</b> and <b>Matrix.LookAtLeftHanded</b> (instead
of <b>Matrix.PerspectiveFovLH</b> and <b>Matrix.LookAtLH</b>). There are a lot more.</li><li>
Material does not have the <b>.Ambient</b> property anymore, just <b>.AmbientColor</b> now,
which is the ColorValue. This pretty much sucks because I use Color's all over the
place and have to convert them to ColorValue now, wtf? Same for Diffuse, Specular
and even SpecularSharpness got renamed to Power (I still think SpecularSharpness is
a way better name). I don't agree with ZMan who says "nice to see this confusing mess
tidied up".<br /><b> Material mat = new Material();<br />
mat.Ambient = darkCol;<br />
mat.Diffuse = lightCol;<br />
mat.Specular = lightCol;<br />
mat.SpecularSharpness = 16.0f;</b><br />
becomes<br /><b> Material mat = new Material();<br />
mat.AmbientColor = ColorValue.FromColor(darkCol);<br />
mat.DiffuseColor = ColorValue.FromColor(lightCol);<br />
mat.SpecularColor = ColorValue.FromColor(lightCol);<br />
mat.Power = 16.0f;</b></li><li><b>Light.Type</b> becomes <b>Light.LightType</b>, I also don't like that change (Light.Type
says it all, doesn't it?), but who cares.</li><li><b>TextureLoader.FromFile(device, filename)</b> and <b>TextureLoader.FromCubeFile(device,
filename)</b> are now <b>new Texture(device, filename)</b> and <b>new CubeTexture(device,
filename)</b>, much cleaner. Why not remove Effect.FromFile and similar methods too?</li><li><b>Effect.FromFile</b> does require an EffectPool now (I just created an empty one,
I only use 1 effect in NormalMapCompressor). Also the paramerters have changed a bit.</li></ul><p>
And now the only thing I couldn't resolve yet. If anyone has ANY tips or tricks to
do this, please tell me!<br />
I could not find out how to do <b>TextureLoader.Save</b> or any texture save functionality
at all. I need this to save the generated textures as dds files (compressed of course),
saving bmp files is no problem (just locking the texture data and building a bitmap
with it, then saving that bitmap). I already tried to contact specialists like <a href="http://blogs.msdn.com/tmiller/">Tom
Miller</a> or <a href="http://www.thezbuffer.com/">ZMan</a>, but no answer yet ^^ 
</p><p>
When that problem is resolved I will release the new version of the NormalMapCompressor.
</p></td>
              <td valign="top">
                <a href="http://www.RocketCommander.com">
                  <img src="images/RocketCommander/RocketCommanderBeta2Web2.jpg" border="0" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=2811ff76-f35a-4a8c-add1-9a7adff54180" />
      </body>
      <title>Moving to Managed DirectX for .NET 2.0</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,2811ff76-f35a-4a8c-add1-9a7adff54180.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2005/12/14/MovingToManagedDirectXForNET20.aspx</link>
      <pubDate>Wed, 14 Dec 2005 07:26:07 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
The rocket commander website does support few new features now (hour, day, week lists
and top 100 for all lists). Btw: Thanks to all beta testers who reported bugs. 
&lt;p&gt;
Monday of this week the &lt;a href="http://msdn.microsoft.com/directx/sdk/"&gt;DirectX December
2005 SDK&lt;/a&gt; did came out (with updated Managed DirectX for .NET 2.0 stuff and even
a technical preview of DirectX 10, but this does require Vista to run). 
&lt;/p&gt;
&lt;p&gt;
Today I tried to port my NormalMapCompressor tool to Managed DirectX for .NET 2.0
(December 2005 Edition). If you want to port your DirectX code to .NET 2.0, this post
could be helpful :) If you ask why even bother porting, here is the answer: For easier
debugging (using Visual Studio 2005 with .NET 1.1 DirectX causes a lot of annoying
Loader Lock errors when trying to debug, etc.)! Also I like to refactor my code from
time to time and make it more clean if I continue working on it, this is what happens
if you port to Managed DirectX for .NET 2.0.&lt;br&gt;
Please also see &lt;a href="http://www.thezbuffer.com/articles/291.aspx"&gt;this post from
ZMan about DirectX for .NET 2.0 changes&lt;/a&gt; (he already wrote about it for the October
2005 edition). 
&lt;/p&gt;
&lt;p&gt;
I will only mention things that happend in this little project (NormalMapCompressor),
I'm sure porting Rocket Commander over will take a couple of more refactorings. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The DXHelp class doesn't exist anymore. For using DXHelp.GetTypeSize(typeof(YourVertexStruct))
you have to use the VertexInformation class now:&lt;br&gt;
&lt;b&gt;VertexInformation.GetDeclarationVertexSize(YourVertexStruct.VertexDeclaration,
0);&lt;/b&gt; and obviously you have to define the VertexDeclaration in your vertex class
now (but I had that done anyways).&lt;/li&gt;
&lt;li&gt;
TextureLoader doesn't exist anymore either, I've used it to get image information.&lt;br&gt;
For that you can now use &lt;b&gt;Texture.GetImageInformationFromFile&lt;/b&gt;
&lt;br&gt;
(was &lt;b&gt;TextureLoader.ImageInformationFromFile(filename)&lt;/b&gt; before).&lt;/li&gt;
&lt;li&gt;
Many methods now expect the device as the first parameter instead of the last (more
consistent method parameters now). Some examples: Mesh.FromFile, Mesh.Clone or the
Mesh constructors.&lt;/li&gt;
&lt;li&gt;
LockVertexBuffer and many other Mesh methods are simplified now and use generics and
the GraphicBuffer class now. For example the following code:&lt;br&gt;
&lt;b&gt;TangentVertex[] verts =&lt;br&gt;
(TangentVertex[])someMesh.LockVertexBuffer(&lt;br&gt;
typeof(TangentVertex),&lt;br&gt;
LockFlags.None,&lt;br&gt;
new int[1] { someMesh.NumberVertices });&lt;/b&gt;
&lt;br&gt;
gets converted to:&lt;br&gt;
&lt;b&gt;TangentVertex[] verts = someMesh.LockVertexBuffer&lt;tangentvertex&gt;
(LockFlags.None).&lt;br&gt;
ReadArray(someMesh.NumberVertices);
&lt;/tangentvertex&gt;
&lt;/b&gt;
&lt;br&gt;
If you want to write to the &lt;b&gt;GraphicBuffer&lt;/b&gt; just use Write(.), thats also much
easier.&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;PresentParameters.Windowed&lt;/b&gt; is now called &lt;b&gt;PresentParameters.IsWindowed&lt;/b&gt;
&lt;/li&gt;
&lt;li&gt;
For some strange reason the device has to be created with an IntPtr instead of a form
or control, &lt;a href="http://www.thezbuffer.com/articles/292.aspx"&gt;ZMan also pointed
that out here&lt;/a&gt;. Just write form.Handle or control.Handle now.&lt;/li&gt;
&lt;li&gt;
Device &lt;b&gt;GetDeviceCaps&lt;/b&gt; becomes &lt;b&gt;GetDeviceCapabilities&lt;/b&gt;, also all other Caps
became Capabilities.&lt;/li&gt;
&lt;li&gt;
Matrix methods got a lot longer names, say hello to &lt;b&gt;Matrix.PerspectiveFieldOfViewLeftHanded&lt;/b&gt; and &lt;b&gt;Matrix.LookAtLeftHanded&lt;/b&gt; (instead
of &lt;b&gt;Matrix.PerspectiveFovLH&lt;/b&gt; and &lt;b&gt;Matrix.LookAtLH&lt;/b&gt;). There are a lot more.&lt;/li&gt;
&lt;li&gt;
Material does not have the &lt;b&gt;.Ambient&lt;/b&gt; property anymore, just &lt;b&gt;.AmbientColor&lt;/b&gt; now,
which is the ColorValue. This pretty much sucks because I use Color's all over the
place and have to convert them to ColorValue now, wtf? Same for Diffuse, Specular
and even SpecularSharpness got renamed to Power (I still think SpecularSharpness is
a way better name). I don't agree with ZMan who says "nice to see this confusing mess
tidied up".&lt;br&gt;
&lt;b&gt; Material mat = new Material();&lt;br&gt;
mat.Ambient = darkCol;&lt;br&gt;
mat.Diffuse = lightCol;&lt;br&gt;
mat.Specular = lightCol;&lt;br&gt;
mat.SpecularSharpness = 16.0f;&lt;/b&gt;
&lt;br&gt;
becomes&lt;br&gt;
&lt;b&gt; Material mat = new Material();&lt;br&gt;
mat.AmbientColor = ColorValue.FromColor(darkCol);&lt;br&gt;
mat.DiffuseColor = ColorValue.FromColor(lightCol);&lt;br&gt;
mat.SpecularColor = ColorValue.FromColor(lightCol);&lt;br&gt;
mat.Power = 16.0f;&lt;/b&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Light.Type&lt;/b&gt; becomes &lt;b&gt;Light.LightType&lt;/b&gt;, I also don't like that change (Light.Type
says it all, doesn't it?), but who cares.&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;TextureLoader.FromFile(device, filename)&lt;/b&gt; and &lt;b&gt;TextureLoader.FromCubeFile(device,
filename)&lt;/b&gt; are now &lt;b&gt;new Texture(device, filename)&lt;/b&gt; and &lt;b&gt;new CubeTexture(device,
filename)&lt;/b&gt;, much cleaner. Why not remove Effect.FromFile and similar methods too?&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Effect.FromFile&lt;/b&gt; does require an EffectPool now (I just created an empty one,
I only use 1 effect in NormalMapCompressor). Also the paramerters have changed a bit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
And now the only thing I couldn't resolve yet. If anyone has ANY tips or tricks to
do this, please tell me!&lt;br&gt;
I could not find out how to do &lt;b&gt;TextureLoader.Save&lt;/b&gt; or any texture save functionality
at all. I need this to save the generated textures as dds files (compressed of course),
saving bmp files is no problem (just locking the texture data and building a bitmap
with it, then saving that bitmap). I already tried to contact specialists like &lt;a href="http://blogs.msdn.com/tmiller/"&gt;Tom
Miller&lt;/a&gt; or &lt;a href="http://www.thezbuffer.com/"&gt;ZMan&lt;/a&gt;, but no answer yet ^^ 
&lt;/p&gt;
&lt;p&gt;
When that problem is resolved I will release the new version of the NormalMapCompressor.
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;a href="http://www.RocketCommander.com"&gt;&lt;img src="images/RocketCommander/RocketCommanderBeta2Web2.jpg" border="0"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=2811ff76-f35a-4a8c-add1-9a7adff54180" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,2811ff76-f35a-4a8c-add1-9a7adff54180.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=9f37c733-2979-40d7-8a40-1a775cc3f332</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,9f37c733-2979-40d7-8a40-1a775cc3f332.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,9f37c733-2979-40d7-8a40-1a775cc3f332.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9f37c733-2979-40d7-8a40-1a775cc3f332</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
I've improved the Beta a bit, added a couple of levels and the online highscore. The
cool thing is it took only half a day to implement the webservice for Rocket Commander,
then implement that into the game and finally create the whole website and database
for it. Last time (with .Net 1.1) this took a couple of days. There are really some
great improvements made for webservices, creating aspx websites and using webservices. 
<p>
Anyway, I hope the beta testers will enjoy the new version and try to compete about
archiving the best highscore on <a href="http://www.RocketCommander.com">www.RocketCommander.com</a>.
Let's see who got the biggest balls, erm, skill :D
</p></td>
              <td valign="top">
                <a href="http://www.RocketCommander.com">
                  <img src="images/RocketCommander/RocketCommanderBeta2Website.jpg" border="0" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=9f37c733-2979-40d7-8a40-1a775cc3f332" />
      </body>
      <title>Rocket Commander Beta 2</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,9f37c733-2979-40d7-8a40-1a775cc3f332.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2005/12/12/RocketCommanderBeta2.aspx</link>
      <pubDate>Mon, 12 Dec 2005 08:25:23 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
I've improved the Beta a bit, added a couple of levels and the online highscore. The
cool thing is it took only half a day to implement the webservice for Rocket Commander,
then implement that into the game and finally create the whole website and database
for it. Last time (with .Net 1.1) this took a couple of days. There are really some
great improvements made for webservices, creating aspx websites and using webservices. 
&lt;p&gt;
Anyway, I hope the beta testers will enjoy the new version and try to compete about
archiving the best highscore on &lt;a href="http://www.RocketCommander.com"&gt;www.RocketCommander.com&lt;/a&gt;.
Let's see who got the biggest balls, erm, skill :D
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;a href="http://www.RocketCommander.com"&gt;&lt;img src="images/RocketCommander/RocketCommanderBeta2Website.jpg" border="0"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=9f37c733-2979-40d7-8a40-1a775cc3f332" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,9f37c733-2979-40d7-8a40-1a775cc3f332.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=5683dc07-3594-4e68-a46a-2bfba4e17d9d</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,5683dc07-3594-4e68-a46a-2bfba4e17d9d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,5683dc07-3594-4e68-a46a-2bfba4e17d9d.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5683dc07-3594-4e68-a46a-2bfba4e17d9d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
The internal Beta-Test for Rocket Commander started this week. I'm happy to hear everyone
is enjoying the game. Even I'm surprised that the game is more fun than I thought
2 weeks ago. Sorry for not posting a new screen last week, you will get 2 nice screens
this week instead :) 
<p>
The website for the game and online highscores will be finished up this week too.
A couple of minor bug fixes did drive me a bit mad today, like copying a 1 week old
level file into the beta instead of the real updated one, omg ^^ 
</p><p>
Don't ask me when the game and sourcecode are available for the public, I just don't
know yet. You may have to wait till January/Feburary until <a href="http://msdn.microsoft.com/vstudio/">VS
2005</a> is released here in germany (since the game and sourcecode is included with
the product, cool ehh?). 
</p><p>
More on the <a href="http://www.RocketCommander.com">Rocket Commander website</a> in
a couple of days when everyone is trying to archive the highest highscore.
</p></td>
              <td valign="top">
                <a href="images/RocketCommander/RocketCommanderScreenshot0103.jpg">
                  <img src="images/RocketCommander/RocketCommanderScreenshot0103Small.jpg" border="0" />
                </a>
                <p>
                  <a href="images/RocketCommander/RocketCommanderScreenshot0115.jpg">
                    <img src="images/RocketCommander/RocketCommanderScreenshot0115Small.jpg" border="0" />
                  </a>
                </p>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=5683dc07-3594-4e68-a46a-2bfba4e17d9d" />
      </body>
      <title>Rocket Commander Beta-Test</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,5683dc07-3594-4e68-a46a-2bfba4e17d9d.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2005/12/08/RocketCommanderBetaTest.aspx</link>
      <pubDate>Thu, 08 Dec 2005 21:21:49 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
The internal Beta-Test for Rocket Commander started this week. I'm happy to hear everyone
is enjoying the game. Even I'm surprised that the game is more fun than I thought
2 weeks ago. Sorry for not posting a new screen last week, you will get 2 nice screens
this week instead :) 
&lt;p&gt;
The website for the game and online highscores will be finished up this week too.
A couple of minor bug fixes did drive me a bit mad today, like copying a 1 week old
level file into the beta instead of the real updated one, omg ^^ 
&lt;/p&gt;
&lt;p&gt;
Don't ask me when the game and sourcecode are available for the public, I just don't
know yet. You may have to wait till January/Feburary until &lt;a href="http://msdn.microsoft.com/vstudio/"&gt;VS
2005&lt;/a&gt; is released here in germany (since the game and sourcecode is included with
the product, cool ehh?). 
&lt;/p&gt;
&lt;p&gt;
More on the &lt;a href="http://www.RocketCommander.com"&gt;Rocket Commander website&lt;/a&gt; in
a couple of days when everyone is trying to archive the highest highscore.
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;a href="images/RocketCommander/RocketCommanderScreenshot0103.jpg"&gt;&lt;img src="images/RocketCommander/RocketCommanderScreenshot0103Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;p&gt;
&lt;a href="images/RocketCommander/RocketCommanderScreenshot0115.jpg"&gt;&lt;img src="images/RocketCommander/RocketCommanderScreenshot0115Small.jpg" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=5683dc07-3594-4e68-a46a-2bfba4e17d9d" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,5683dc07-3594-4e68-a46a-2bfba4e17d9d.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=4e1ae904-76ad-427b-8811-9b0290a3b4c0</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,4e1ae904-76ad-427b-8811-9b0290a3b4c0.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,4e1ae904-76ad-427b-8811-9b0290a3b4c0.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4e1ae904-76ad-427b-8811-9b0290a3b4c0</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0">
          <tbody>
            <tr>
              <td valign="top">
About Rocket Commander: The game is nearly finished. I will post a new screenshot
in a couple of days. The internal beta testing will start this week too. 
<p>
Today we are going to the german developer price (german: Deutscher Entwicklerpreis).<br />
Last year we won 2 prices for Arena Wars :)<br />
I'm excited to see who will win some prices this year.<br />
Hope to see some developer guys there.
</p></td>
              <td valign="top">
                <a href="http://www.deutscher-entwicklerpreis.de">
                  <img src="images/entwicklerpreis.jpg" />
                  <br />
http://www.deutscher-entwicklerpreis.de</a>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=4e1ae904-76ad-427b-8811-9b0290a3b4c0" />
      </body>
      <title>German developer price: Deutscher Entwicklerpreis 2005</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,4e1ae904-76ad-427b-8811-9b0290a3b4c0.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2005/11/30/GermanDeveloperPriceDeutscherEntwicklerpreis2005.aspx</link>
      <pubDate>Wed, 30 Nov 2005 14:07:13 GMT</pubDate>
      <description>&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
About Rocket Commander: The game is nearly finished. I will post a new screenshot
in a couple of days. The internal beta testing will start this week too. 
&lt;p&gt;
Today we are going to the german developer price (german: Deutscher Entwicklerpreis).&lt;br&gt;
Last year we won 2 prices for Arena Wars :)&lt;br&gt;
I'm excited to see who will win some prices this year.&lt;br&gt;
Hope to see some developer guys there.
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;a href="http://www.deutscher-entwicklerpreis.de"&gt;&lt;img src="images/entwicklerpreis.jpg"&gt;
&lt;br&gt;
http://www.deutscher-entwicklerpreis.de&lt;/a&gt;&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=4e1ae904-76ad-427b-8811-9b0290a3b4c0" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,4e1ae904-76ad-427b-8811-9b0290a3b4c0.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=b06f6503-a6e0-4009-b2a1-3f11c3653ae5</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,b06f6503-a6e0-4009-b2a1-3f11c3653ae5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,b06f6503-a6e0-4009-b2a1-3f11c3653ae5.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b06f6503-a6e0-4009-b2a1-3f11c3653ae5</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
The problem with many asteroids in a scene is finally solved. I spend most of the
time optimizing the game loop, rendering and physics. I should have more time now
to test and play the game and add some fun to it. 
<p>
The game is now capable of calculating and updating over 10 000 asteroids (each over
1200 polygons) per frame while maintaining a reasonable framerate, which was not possible
a week ago (I got many asteroids, but updating them was very slow and rendering wasn't
very fast either). Usually a scene consists of 2-5k asteroids and runs pretty fast
(over 100 fps with all shaders on, up to 200 fps without post screen effects). Physics
aren't perfect yet, but the basic stuff works. I might need to speed a bit more time
on player collisions for more accurate collision checks. 
</p><p>
Since the graphics isn't so much different from last week and some new graphical stuff
isn't finished yet (items, final sky, on screen layout), I present you today the main
menu screen. Pretty boring, but I didn't say there will always be fancy screens every
time I post stuff here. I looks much better in action because the background is an
automatically updated asteroid field in realtime while the menu is in the foreground. 
</p><p>
Other things like sounds and music do work now too. I said that 2 weeks ago already,
but now all sound effects are included and Boje did a nice music track for the game. 
</p><p>
The game itself is missing too. Flying around works nice, but most of the game elements
(menu, items, game dynamics, etc.) are still missing. For the level design I had some
nice ideas too, which I will try out this week (required for the optimizations above
anyway). 
</p><p>
Most of the game should be finished by next week. I will only do an update to DirectX
9 December 2005 as soon as it is available.
</p></td>
              <td valign="top">
                <a href="images/RocketCommander/RocketCommanderScreenshot0031.jpg">
                  <img src="images/RocketCommander/RocketCommanderScreenshot0031Small.jpg" border="0" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=b06f6503-a6e0-4009-b2a1-3f11c3653ae5" />
      </body>
      <title>Rocket Commander: Week 3</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,b06f6503-a6e0-4009-b2a1-3f11c3653ae5.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2005/11/24/RocketCommanderWeek3.aspx</link>
      <pubDate>Thu, 24 Nov 2005 01:43:28 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
The problem with many asteroids in a scene is finally solved. I spend most of the
time optimizing the game loop, rendering and physics. I should have more time now
to test and play the game and add some fun to it. 
&lt;p&gt;
The game is now capable of calculating and updating over 10 000 asteroids (each over
1200 polygons) per frame while maintaining a reasonable framerate, which was not possible
a week ago (I got many asteroids, but updating them was very slow and rendering wasn't
very fast either). Usually a scene consists of 2-5k asteroids and runs pretty fast
(over 100 fps with all shaders on, up to 200 fps without post screen effects). Physics
aren't perfect yet, but the basic stuff works. I might need to speed a bit more time
on player collisions for more accurate collision checks. 
&lt;/p&gt;
&lt;p&gt;
Since the graphics isn't so much different from last week and some new graphical stuff
isn't finished yet (items, final sky, on screen layout), I present you today the main
menu screen. Pretty boring, but I didn't say there will always be fancy screens every
time I post stuff here. I looks much better in action because the background is an
automatically updated asteroid field in realtime while the menu is in the foreground. 
&lt;/p&gt;
&lt;p&gt;
Other things like sounds and music do work now too. I said that 2 weeks ago already,
but now all sound effects are included and Boje did a nice music track for the game. 
&lt;/p&gt;
&lt;p&gt;
The game itself is missing too. Flying around works nice, but most of the game elements
(menu, items, game dynamics, etc.) are still missing. For the level design I had some
nice ideas too, which I will try out this week (required for the optimizations above
anyway). 
&lt;/p&gt;
&lt;p&gt;
Most of the game should be finished by next week. I will only do an update to DirectX
9 December 2005 as soon as it is available.
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;a href="images/RocketCommander/RocketCommanderScreenshot0031.jpg"&gt;&lt;img src="images/RocketCommander/RocketCommanderScreenshot0031Small.jpg" border="0"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=b06f6503-a6e0-4009-b2a1-3f11c3653ae5" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,b06f6503-a6e0-4009-b2a1-3f11c3653ae5.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=d6d01236-4aab-4649-825e-275939cabcff</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,d6d01236-4aab-4649-825e-275939cabcff.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,d6d01236-4aab-4649-825e-275939cabcff.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d6d01236-4aab-4649-825e-275939cabcff</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
Alrighty, the second week passed and most of the graphical effects are implemented
now. There will be some updates to the background sky and some additional asteroid
types next week. Other than that not much more effects will be added yet. You can
see the new radial blur effect (it won't be that strong all the time, only with speed
boost item) and a nice post screen glow/bloom effect in the screenshot. There are
currently around 10000 asteroids in the scene (clipped if not visible) and rendering
is very fast (up to 13-20 mio visible polys/sec) with help of shader instancing :) 
<p>
I've got still 2 major problems left: The first one is the performance of the physics
calculations. For 10000 asteroids to check every one each frame if they collide with
any other asteroid is computually very expensive. Even the visibility test gets very
slow if a lot of asteroids are checked. I have to implement some clever checks to
optimize this. The other one is a polygon based collision check for supporting not
only round asteroids (that shouldn't be too hard, but it is a still a bit of work). 
</p><p>
The game itself is missing too. Flying around works nice, but most of the game elements
(menu, items, game dynamics, etc.) are still missing. For the level design I had some
nice ideas too, which I will try out this week (required for the optimizations above
anyway). 
</p><p>
To be continued .. (next week)
</p></td>
              <td valign="top">
                <a href="images/RocketCommander/RocketCommanderScreenshot0024.jpg">
                  <img src="images/RocketCommander/RocketCommanderScreenshot0024Small.jpg" border="0" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=d6d01236-4aab-4649-825e-275939cabcff" />
      </body>
      <title>Rocket Commander: Week 2</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,d6d01236-4aab-4649-825e-275939cabcff.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2005/11/15/RocketCommanderWeek2.aspx</link>
      <pubDate>Tue, 15 Nov 2005 02:44:33 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Alrighty, the second week passed and most of the graphical effects are implemented
now. There will be some updates to the background sky and some additional asteroid
types next week. Other than that not much more effects will be added yet. You can
see the new radial blur effect (it won't be that strong all the time, only with speed
boost item) and a nice post screen glow/bloom effect in the screenshot. There are
currently around 10000 asteroids in the scene (clipped if not visible) and rendering
is very fast (up to 13-20 mio visible polys/sec) with help of shader instancing :) 
&lt;p&gt;
I've got still 2 major problems left: The first one is the performance of the physics
calculations. For 10000 asteroids to check every one each frame if they collide with
any other asteroid is computually very expensive. Even the visibility test gets very
slow if a lot of asteroids are checked. I have to implement some clever checks to
optimize this. The other one is a polygon based collision check for supporting not
only round asteroids (that shouldn't be too hard, but it is a still a bit of work). 
&lt;p&gt;
The game itself is missing too. Flying around works nice, but most of the game elements
(menu, items, game dynamics, etc.) are still missing. For the level design I had some
nice ideas too, which I will try out this week (required for the optimizations above
anyway). 
&lt;p&gt;
To be continued .. (next week)
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;a href="images/RocketCommander/RocketCommanderScreenshot0024.jpg"&gt;&lt;img src="images/RocketCommander/RocketCommanderScreenshot0024Small.jpg" border="0"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=d6d01236-4aab-4649-825e-275939cabcff" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,d6d01236-4aab-4649-825e-275939cabcff.aspx</comments>
      <category>All;Game Development;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=6948e9f9-a9db-477c-b340-f4ef8d28fe29</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,6948e9f9-a9db-477c-b340-f4ef8d28fe29.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,6948e9f9-a9db-477c-b340-f4ef8d28fe29.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6948e9f9-a9db-477c-b340-f4ef8d28fe29</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" cellspacing="5">
          <tbody>
            <tr>
              <td valign="top">
Well, a week isn't really over yet, but since most of the planed work for this week
is finished, I'm going to post a screen now. Unlike my posts for Lost Squadron I think
it is much better to have weekly steps since you can see more changes in a week. 
<p>
You can see on the screen the basic framework for the engine, it supports parallax
shaders, cube maps (for the space background), music, sound and all other basic graphic
elements. The lens flare isn't finished yet and most of the models are not fixed yet
(there is an evil bug in 3DS Max 8 preventing us to export correct normal maps, somehow
the tangent calculation inside of 3DS Max 8 to bake normal maps is not working as
it was in 3DS Max 7). 
</p><p>
This is still a very early screen (at least it is realtime and 3d ^^ please don't
think anything is final art yet) and you won't get a feeling for the game yet. Hopefully
next week this will look much better. Currently missing are also: 
</p><ul><li>
Some simple physics for all game elements (asteroids, rocket)</li><li>
Main menu, Highscores, logos, texts, etc.</li><li>
Post screen effects (motion blur, glow/bloom effects, hdr stuff).</li><li>
Level design .. hmm, havn't got a clue how to solve that yet.</li><li>
The game itself, items, fun and so on ...</li><li>
The website too :)</li></ul><p>
See ya next week ^^
</p></td>
              <td valign="top">
                <a href="images/RocketCommander/RocketCommanderScreenshot0004.jpg">
                  <img src="images/RocketCommander/RocketCommanderScreenshot0004Small.jpg" border="0" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=6948e9f9-a9db-477c-b340-f4ef8d28fe29" />
      </body>
      <title>Rocket Commander: Week 1</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,6948e9f9-a9db-477c-b340-f4ef8d28fe29.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2005/11/07/RocketCommanderWeek1.aspx</link>
      <pubDate>Mon, 07 Nov 2005 04:00:02 GMT</pubDate>
      <description>&lt;table border="0" cellspacing="5"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
Well, a week isn't really over yet, but since most of the planed work for this week
is finished, I'm going to post a screen now. Unlike my posts for Lost Squadron I think
it is much better to have weekly steps since you can see more changes in a week. 
&lt;p&gt;
You can see on the screen the basic framework for the engine, it supports parallax
shaders, cube maps (for the space background), music, sound and all other basic graphic
elements. The lens flare isn't finished yet and most of the models are not fixed yet
(there is an evil bug in 3DS Max 8 preventing us to export correct normal maps, somehow
the tangent calculation inside of 3DS Max 8 to bake normal maps is not working as
it was in 3DS Max 7). 
&lt;/p&gt;
&lt;p&gt;
This is still a very early screen (at least it is realtime and 3d ^^ please don't
think anything is final art yet) and you won't get a feeling for the game yet. Hopefully
next week this will look much better. Currently missing are also: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Some simple physics for all game elements (asteroids, rocket)&lt;/li&gt;
&lt;li&gt;
Main menu, Highscores, logos, texts, etc.&lt;/li&gt;
&lt;li&gt;
Post screen effects (motion blur, glow/bloom effects, hdr stuff).&lt;/li&gt;
&lt;li&gt;
Level design .. hmm, havn't got a clue how to solve that yet.&lt;/li&gt;
&lt;li&gt;
The game itself, items, fun and so on ...&lt;/li&gt;
&lt;li&gt;
The website too :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
See ya next week ^^
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;a href="images/RocketCommander/RocketCommanderScreenshot0004.jpg"&gt;&lt;img src="images/RocketCommander/RocketCommanderScreenshot0004Small.jpg" border="0"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=6948e9f9-a9db-477c-b340-f4ef8d28fe29" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,6948e9f9-a9db-477c-b340-f4ef8d28fe29.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
    <item>
      <trackback:ping>http://exdream.no-ip.info/blog/Trackback.aspx?guid=329a139b-43de-4741-a101-4d1c2fd463fe</trackback:ping>
      <pingback:server>http://exdream.no-ip.info/blog/pingback.aspx</pingback:server>
      <pingback:target>http://exdream.no-ip.info/blog/PermaLink,guid,329a139b-43de-4741-a101-4d1c2fd463fe.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://exdream.no-ip.info/blog/CommentView,guid,329a139b-43de-4741-a101-4d1c2fd463fe.aspx</wfw:comment>
      <wfw:commentRss>http://exdream.no-ip.info/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=329a139b-43de-4741-a101-4d1c2fd463fe</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <table border="0" width="810">
          <tr>
            <td valign="top">
              <table border="0" width="800">
                <tbody>
                  <tr>
                    <td valign="top">
It's time for another cool game: <a href="http://www.RocketCommander.com">Rocket Commander</a>!<p>
The cool thing about this game is the fact, that Microsoft will ship it with Visual
Studio 2005 (german, release: feb 2006) and hopefully push it a little to make it
more known :)
</p><p>
The full source code and game will also be available freely and can be used to learn
.NET 2.0 and DirectX (using all the newest tricks with c# 2.0 and Managed DirectX
for .NET 2.0). I will develop the game this month, dunno yet when the official online
release will be, we will see (we may have to wait till 2006).
</p></td>
                    <td valign="top">
                      <a href="http://www.RocketCommander.com">
                        <img src="http://www.RocketCommander.com/RocketCommanderPreview.jpg" border="0" height="220" width="260" />
                      </a>
                    </td>
                  </tr>
                </tbody>
              </table>
              <p>
I will post screens and code tricks every week for this project and hopefully get
some attention for this little fun game. The idea is pretty old, I've told this game
idea a lot of people in the last 1.5 years, but I wasn't able to convince anyone that
this is a really cool special and unusual game. Now I told some Microsoft guys the
same idea (<a href="http://blogs.msdn.com/dirkpr/">Dirk Primbs</a> and <a href="http://www.microsoft.com/germany/msdn/kontakt/partner.mspx">Lars
Lippert</a>) they were really amazed and think this idea would be great (I thought
they were kidding me at first).
</p>
              <p>
This is the basic game idea: Rocket Commander is a little beginner friendly casual
3D game. The player finds himself inside a rocket flying through a city, an asteriod
field or other levels. The basic task is not to kill enemies or to solve any quests
like in many other games, but to finish a level by flying through it without colliding
with anything. Additionally there are special items, which can be collected to increase
the health of the rocket, add additional fuel, increase the speed for a short time
and give more lifes.
</p>
              <p>
Everything will be presented in a nice space enviroment using a lot of cool shaders
(parallax mapping, glow effects, motion blur, hdr lighting, etc.) and a lot of cool
effects and graphic tricks. It is still a casual simple game, which is hopefully a
lot of fun to play. Since the source code is free, players are encouraged to modify
it or add extensions, but this is a topic for a later time.
</p>
              <br />
Another topic: 3D Studio Max 8 (3dsMax8) was released a little longer than a month
ago and we are currently in the progress of writing an exporter for our in-game models
(has nothing to do with Rocket Commander, which will just use simple .x files, which
can be exchanged by the user). I posted the following stuff it the Autodesk Sparks
board (but there isn't anything going on there, 2 views per day?):<p></p><p>
I'm having very ugly problems with IGame and 3dsMax8. Every single exporter I tested
(and recompiled using max8 sdk) using IGame crashes in 3dsMax8 while it was working
on 3dsMax7. I've tested: IGameExporter (sample directory), creating a plugin with
the vs wizzard (in vs2002, 2003 and 2005, no difference except a bunch of header file
errors, which can be fixed easily) and using other IGame exporters. 
</p><p>
This is what happens in every single one of the exporters using IGame I debugged,
I've used IGameExporter.cpp to explain the problem: 
</p><p>
IGameExporter.cpp line 2482: 
<table border="1"><tbody><tr><td><b>igameVersion = GetIGameVersion();</b></td></tr></tbody></table>
igameVersion returns always 0 in 3dsMax8, in 3dsMax7 the exact same code produces
igameVersion == 1073741824 
</p><p>
that's strange, but the following line still is valid: IGameExporter.cpp line 2498: 
<table border="1"><tbody><tr><td><b>pIgame = GetIGameInterface();</b></td></tr></tbody></table></p><p>
and finally when calling InitialiseIGame (no matter with what parameters or in what
order) everything crashes: IGameExporter.cpp line 2504: 
<table border="1"><tbody><tr><td><b>pIgame-&gt;InitialiseIGame(exportSelected);</b></td></tr></tbody></table></p><p>
Everything after that gets never executed. If commenting out that line, every other
call with pIgame crashes (pIgame, which is of type IGameScene, is not null, it got
a valid pointer value). 
</p><p>
Now the solution to all this crap: Just copy over the IGame.dll (version 7.0.0.64)
from 3dsMax7 to 3dsMax8 (just save the IGame.dll version 8.0.0.92) and now everything
works fine. But I guess new features of IGame 2.0 (now called 3dxi - Date Exchange
Interface or something) wont work this way ^^ A fix from Autodesk would be nice anyway. 
</p><p>
There are still some things missing in 3dsMax7 (e.g. the IGameFx class), which can
be annoying, but at least 3dsMax8 does not crash all the time. Let's hope they do
a 3dsMax8 SP1 sometime soon. We also found out, that it is easier to develop for 3dsMax7
and then just use the plugin in 3dsMax8 too with the IGame.dll copied over from 3dsMax7.
This also works nicely with other plugins like the Panda Exporter (for .x files) and
other IGame exporters (which all crash in 3dsMax8). At least Microsoft isn't the only
company which screws up with their managed DirectX releases, all the managed dll hell
(wtf? I thought there is no dll hell anymore in .NET) and the still missing working
MDX for .NET 2.0 final.
</p><p>
Investing a bit more resources would be nice to support important things like Managed
DirectX (well, there is just <a href="http://blogs.msdn.com/tmiller/">Tom Miller</a> from
Microsoft) or plugins for 3DSMax (more or less just <a href="http://www.cmpevents.com/GD05/a.asp?option=G&amp;V=3&amp;id=228402">Neil
Hazzard</a> from Discreet). They are both great guys and they do a hell of a nice
job managing such big tasks, but still: It would be nice if the companies would hire
more people for this things. It's not like nobody is using Managed DirectX or never
going to write a plugin for 3dsMax (which again is a hard job with c++, a write only
language ^^).
</p><p>
Enough rambling, back to work ...
</p></td>
          </tr>
        </table>
        <img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=329a139b-43de-4741-a101-4d1c2fd463fe" />
      </body>
      <title>New Project: Rocket Commander</title>
      <guid isPermaLink="false">http://exdream.no-ip.info/blog/PermaLink,guid,329a139b-43de-4741-a101-4d1c2fd463fe.aspx</guid>
      <link>http://exdream.no-ip.info/blog/2005/11/03/NewProjectRocketCommander.aspx</link>
      <pubDate>Thu, 03 Nov 2005 17:15:12 GMT</pubDate>
      <description>&lt;table border="0" width="810"&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;table border="0" width="800"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
It's time for another cool game: &lt;a href="http://www.RocketCommander.com"&gt;Rocket Commander&lt;/a&gt;!&lt;p&gt;
The cool thing about this game is the fact, that Microsoft will ship it with Visual
Studio 2005 (german, release: feb 2006) and hopefully push it a little to make it
more known :)
&lt;/p&gt;
&lt;p&gt;
The full source code and game will also be available freely and can be used to learn
.NET 2.0 and DirectX (using all the newest tricks with c# 2.0 and Managed DirectX
for .NET 2.0). I will develop the game this month, dunno yet when the official online
release will be, we will see (we may have to wait till 2006).
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;a href="http://www.RocketCommander.com"&gt;&lt;img src="http://www.RocketCommander.com/RocketCommanderPreview.jpg" border="0" height="220" width="260"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
I will post screens and code tricks every week for this project and hopefully get
some attention for this little fun game. The idea is pretty old, I've told this game
idea a lot of people in the last 1.5 years, but I wasn't able to convince anyone that
this is a really cool special and unusual game. Now I told some Microsoft guys the
same idea (&lt;a href="http://blogs.msdn.com/dirkpr/"&gt;Dirk Primbs&lt;/a&gt; and &lt;a href="http://www.microsoft.com/germany/msdn/kontakt/partner.mspx"&gt;Lars
Lippert&lt;/a&gt;) they were really amazed and think this idea would be great (I thought
they were kidding me at first).
&lt;/p&gt;
&lt;p&gt;
This is the basic game idea: Rocket Commander is a little beginner friendly casual
3D game. The player finds himself inside a rocket flying through a city, an asteriod
field or other levels. The basic task is not to kill enemies or to solve any quests
like in many other games, but to finish a level by flying through it without colliding
with anything. Additionally there are special items, which can be collected to increase
the health of the rocket, add additional fuel, increase the speed for a short time
and give more lifes.
&lt;/p&gt;
&lt;p&gt;
Everything will be presented in a nice space enviroment using a lot of cool shaders
(parallax mapping, glow effects, motion blur, hdr lighting, etc.) and a lot of cool
effects and graphic tricks. It is still a casual simple game, which is hopefully a
lot of fun to play. Since the source code is free, players are encouraged to modify
it or add extensions, but this is a topic for a later time.
&lt;/p&gt;
&lt;br&gt;
Another topic: 3D Studio Max 8 (3dsMax8) was released a little longer than a month
ago and we are currently in the progress of writing an exporter for our in-game models
(has nothing to do with Rocket Commander, which will just use simple .x files, which
can be exchanged by the user). I posted the following stuff it the Autodesk Sparks
board (but there isn't anything going on there, 2 views per day?):&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I'm having very ugly problems with IGame and 3dsMax8. Every single exporter I tested
(and recompiled using max8 sdk) using IGame crashes in 3dsMax8 while it was working
on 3dsMax7. I've tested: IGameExporter (sample directory), creating a plugin with
the vs wizzard (in vs2002, 2003 and 2005, no difference except a bunch of header file
errors, which can be fixed easily) and using other IGame exporters. 
&lt;/p&gt;
&lt;p&gt;
This is what happens in every single one of the exporters using IGame I debugged,
I've used IGameExporter.cpp to explain the problem: 
&lt;/p&gt;
&lt;p&gt;
IGameExporter.cpp line 2482: 
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;b&gt;igameVersion = GetIGameVersion();&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
igameVersion returns always 0 in 3dsMax8, in 3dsMax7 the exact same code produces
igameVersion == 1073741824 
&lt;/p&gt;
&lt;p&gt;
that's strange, but the following line still is valid: IGameExporter.cpp line 2498: 
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;b&gt;pIgame = GetIGameInterface();&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
and finally when calling InitialiseIGame (no matter with what parameters or in what
order) everything crashes: IGameExporter.cpp line 2504: 
&lt;table border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;b&gt;pIgame-&amp;gt;InitialiseIGame(exportSelected);&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
Everything after that gets never executed. If commenting out that line, every other
call with pIgame crashes (pIgame, which is of type IGameScene, is not null, it got
a valid pointer value). 
&lt;/p&gt;
&lt;p&gt;
Now the solution to all this crap: Just copy over the IGame.dll (version 7.0.0.64)
from 3dsMax7 to 3dsMax8 (just save the IGame.dll version 8.0.0.92) and now everything
works fine. But I guess new features of IGame 2.0 (now called 3dxi - Date Exchange
Interface or something) wont work this way ^^ A fix from Autodesk would be nice anyway. 
&lt;/p&gt;
&lt;p&gt;
There are still some things missing in 3dsMax7 (e.g. the IGameFx class), which can
be annoying, but at least 3dsMax8 does not crash all the time. Let's hope they do
a 3dsMax8 SP1 sometime soon. We also found out, that it is easier to develop for 3dsMax7
and then just use the plugin in 3dsMax8 too with the IGame.dll copied over from 3dsMax7.
This also works nicely with other plugins like the Panda Exporter (for .x files) and
other IGame exporters (which all crash in 3dsMax8). At least Microsoft isn't the only
company which screws up with their managed DirectX releases, all the managed dll hell
(wtf? I thought there is no dll hell anymore in .NET) and the still missing working
MDX for .NET 2.0 final.
&lt;/p&gt;
&lt;p&gt;
Investing a bit more resources would be nice to support important things like Managed
DirectX (well, there is just &lt;a href="http://blogs.msdn.com/tmiller/"&gt;Tom Miller&lt;/a&gt; from
Microsoft) or plugins for 3DSMax (more or less just &lt;a href="http://www.cmpevents.com/GD05/a.asp?option=G&amp;amp;V=3&amp;amp;id=228402"&gt;Neil
Hazzard&lt;/a&gt; from Discreet). They are both great guys and they do a hell of a nice
job managing such big tasks, but still: It would be nice if the companies would hire
more people for this things. It's not like nobody is using Managed DirectX or never
going to write a plugin for 3dsMax (which again is a hard job with c++, a write only
language ^^).
&lt;/p&gt;
&lt;p&gt;
Enough rambling, back to work ...
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;img width="0" height="0" src="http://exdream.no-ip.info/blog/aggbug.ashx?id=329a139b-43de-4741-a101-4d1c2fd463fe" /&gt;</description>
      <comments>http://exdream.no-ip.info/blog/CommentView,guid,329a139b-43de-4741-a101-4d1c2fd463fe.aspx</comments>
      <category>All;Game Development;Other;Programming;Rocket Commander</category>
    </item>
  </channel>
</rss>