<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
 
 <title>Zolomon.com</title>
 
 <link href="http://zolomon.github.com" />
 <updated>2012-02-23T16:25:19-08:00</updated>
 <id>http://zolomon.github.com</id>
 <author>
   <name>Bengt Ericsson</name>
   <email>me@zolomon.com</email>
 </author>

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/zolomon" /><feedburner:info uri="zolomon" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
   <title>Setting up Jekyll on Windows 7</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/iC0S2n8Gdnw/setting-up-jekyll-on-windows-7" />
   <updated>2012-02-23T00:00:00-08:00</updated>
   <id>hhttp://zolomon.github.com/tutorial/2012/02/23/setting-up-jekyll-on-windows-7</id>
   <content type="html">&lt;h1 id='how_i_installed_jekyll_on_windows_7'&gt;How I installed Jekyll on Windows 7&lt;/h1&gt;

&lt;h2 id='step_1_install_ruby_with_the_rubyinstaller'&gt;Step 1: Install &lt;a href='http://www.rubyinstaller.org/downloads/'&gt;Ruby with the RubyInstaller&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Download and install Ruby (I chose &lt;a href='http://rubyforge.org/frs/download.php/75848/rubyinstaller-1.9.3-p125.exe'&gt;rubyinstaller-1.9.3-p125.exe&lt;/a&gt;). Then &lt;a href='https://github.com/downloads/oneclick/rubyinstaller/DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe'&gt;download and unzip the DevKit&lt;/a&gt; version of Ruby from the same page.&lt;/p&gt;

&lt;h3 id='how_to_install_the_devkit'&gt;How to &lt;a href='https://github.com/oneclick/rubyinstaller/wiki/Development-Kit'&gt;install the DevKit&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;While installation is (in general) simple, please ensure you carefully follow each step below.&lt;/p&gt;

&lt;h4 id='1_preparation'&gt;1. Preparation&lt;/h4&gt;

&lt;p&gt;If you previously installed the legacy DevKit devkit-3.4.5r3-20091110.7z, its artifacts were extracted into each Ruby installation and need to be manually removed. Remove the gcc.bat, make.bat, and sh.bat stub batch files in &lt;code&gt;&amp;lt;RUBY_INSTALL_DIR&amp;gt;\bin&lt;/code&gt; and the &lt;code&gt;&amp;lt;RUBY_INSTALL_DIR&amp;gt;\devkit&lt;/code&gt; subdirectory for each Ruby installation using the legacy DevKit. If you previously installed one of the legacy self-extracting DevKit’s, follow the SFX DevKit upgrade instructions.&lt;/p&gt;

&lt;h4 id='2_download_files'&gt;2. Download Files&lt;/h4&gt;

&lt;p&gt;The current DevKit is available at the RubyInstaller download page with older versions available at the archives page. As backup, check our GitHub downloads page.&lt;/p&gt;

&lt;h4 id='3_extract_files'&gt;3. Extract Files&lt;/h4&gt;

&lt;p&gt;Left double-click the self-extracting executable (SFX) downloaded from Step 2 and choose a directory (without spaces) to install the DevKit artifacts into. For example, &lt;code&gt;C:\DevKit&lt;/code&gt;. NOTE: the SFX is really a 7-Zip archive with a bit of embedded magic. If you already have 7-Zip installed, you can simply right-click it and extract it’s contents as you would a normal 7z archive. In the instructions that follow, the directory that you selected is identified as &lt;code&gt;&amp;lt;DEVKIT_INSTALL_DIR&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h4 id='4_run_installation_scripts'&gt;4. Run Installation Scripts&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;cd &amp;lt;DEVKIT_INSTALL_DIR&amp;gt;&lt;/code&gt; from Step 3 above. ruby dk.rb init to generate the &lt;code&gt;config.yml&lt;/code&gt; file to be used later in this Step. Your installed Rubies will be listed there (only those installed by a RubyInstaller package are detected at present). edit the generated config.yml file to include installed Rubies not automagically discovered or remove Rubies you do not want to use the DevKit with.&lt;/p&gt;

&lt;p&gt;&lt;span&gt;optional&lt;/span&gt; &lt;code&gt;ruby dk.rb review&lt;/code&gt; to review the list of Rubies to be enhanced to use the DevKit and verify the changes you made to it are correct. finally, &lt;code&gt;ruby dk.rb install&lt;/code&gt; to DevKit enhance your installed Rubies. This step installs (or updates) an &lt;code&gt;operating_system.rb&lt;/code&gt; file into the relevant directory needed to implement a RubyGems pre_install hook and a &lt;code&gt;devkit.rb&lt;/code&gt; helper library file into &lt;code&gt;&amp;lt;RUBY_INSTALL_DIR&amp;gt;\lib\ruby\site_ruby&lt;/code&gt;. NOTE: you may need to use the &lt;code&gt;--force&lt;/code&gt; option to update (with backup of the originals) the above mentioned files as discussed at the SFX DevKit upgrade FAQ entry.&lt;/p&gt;

&lt;h4 id='5_test_installation'&gt;5. Test Installation&lt;/h4&gt;

&lt;p&gt;Confirm your Ruby environment is correctly using the DevKit by running gem install rdiscount &amp;#8211;platform=ruby. RDiscount should install correctly and you should see Temporarily enhancing PATH to include DevKit&amp;#8230; in the screen messages.&lt;/p&gt;

&lt;p&gt;Next run &lt;code&gt;ruby -rubygems -e &amp;quot;require &amp;#39;rdiscount&amp;#39;; puts RDiscount.new(&amp;#39;**Hello RubyInstaller**&amp;#39;).to_html&amp;quot;&lt;/code&gt; to confirm that the rdiscount gem is working.&lt;/p&gt;

&lt;h2 id='installing_jekyll'&gt;Installing &lt;a href=''&gt;Jekyll&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Install Jekyll using &lt;code&gt;gem install jekyll&lt;/code&gt; in your command prompt.&lt;/p&gt;

&lt;h2 id='clone_jekyll_bootstrap'&gt;Clone &lt;a href='jekyllbootstrap.com'&gt;Jekyll Bootstrap&lt;/a&gt;!&lt;/h2&gt;

&lt;p&gt;Go to the Jekyll Bootstrap website and follow the instructions there, then you&amp;#8217;re done!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/iC0S2n8Gdnw" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/tutorial/2012/02/23/setting-up-jekyll-on-windows-7</feedburner:origLink></entry>
 
 <entry>
   <title>Music genres I had never even heard of</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/OMsQNrF4QBQ/music-genres-i-had-never-even-heard-of" />
   <updated>2012-02-23T00:00:00-08:00</updated>
   <id>hhttp://zolomon.github.com/2012/02/23/music-genres-i-had-never-even-heard-of</id>
   <content type="html">&lt;h1 id='wikipedia_i_love_you'&gt;Wikipedia, I Love You&lt;/h1&gt;

&lt;p&gt;Today while procrastinating from my calculus studies, I found &lt;a href='http://en.wikipedia.org/wiki/List_of_electronic_music_genres'&gt;this short list of electronic music genres&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A list of all the music genres I had always dreamed of. Now I have it, and now I have a lot of new material to consume! Yay!&lt;/p&gt;

&lt;p&gt;Thank you Wikipedia, this is why I donated 100 SEK to you last year. I will most likely do it again, just for the sake of this list.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/OMsQNrF4QBQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/2012/02/23/music-genres-i-had-never-even-heard-of</feedburner:origLink></entry>
 
 <entry>
   <title>Learning from Ludum Dare</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/wTvwdh8IJjg/learning-from-ludum-dare" />
   <updated>2011-08-22T00:00:00-07:00</updated>
   <id>hhttp://zolomon.github.com/2011/08/22/learning-from-ludum-dare</id>
   <content type="html">&lt;p&gt;You have probably not heard about the indie game developer competition called &lt;a href="http://www.ludumdare.com"&gt;Ludum Dare&lt;/a&gt;. It's a rapid game creation community where you compete against each other to complete a game within 48 hours and then rate the games produced during the weekend. After two weeks a winner will be named based on who got the most votes.&lt;/p&gt;

&lt;p&gt;The difference, on the 21st occurrence of Ludum Dare, was that the creator of &lt;a href="http://www.minecraft.com"&gt;MineCraft&lt;/a&gt;, &lt;a href="http://twitter.com/#!/notch"&gt;@notch&lt;/a&gt; (Markus Persson), decided to join the tournament as he's done a few times before. Enter Publicity.&lt;/p&gt;

&lt;/p&gt;Here is a timelapse of  &lt;a href="http://twitter.com/#!/notch"&gt;@notch&lt;/a&gt; programming &lt;a href="http://www.ludumdare.com/compo/2011/08/22/i-made-a-dungeon-crawler/"&gt;Metagun&lt;/a&gt; for a previous competition:&lt;/p&gt;

&lt;iframe width="420" height="345" src="http://www.youtube.com/embed/ZV-AFnCkRLY" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;h3&gt;A list of games by &lt;a href="http://twitter.com/#!/notch"&gt;@notch&lt;/a&gt; for Ludum Dare:&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;LD21 - &lt;a href="http://www.ludumdare.com/compo/2011/08/22/i-made-a-dungeon-crawler/"&gt;Prelude of Chambered&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;LD18 - &lt;a href="http://www.ludumdare.com/compo/2010/08/22/metagun-complete/"&gt;Metagun&lt;/a&gt;&lt;/li&gt;  
  &lt;li&gt;LD16 - &lt;a href="http://www.ludumdare.com/compo/2009/12/13/help-me-test-the-europa-arcology-incident/"&gt;The Europa Arcology Incident&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;LD14 - &lt;a href="http://www.ludumdare.com/compo/2009/04/19/bunny-press-is-done/"&gt;Bunny Press&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The source code for these games are available on the website, such is the requirement of Ludum Dare - and there is much to learn from each one of them!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/wTvwdh8IJjg" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/2011/08/22/learning-from-ludum-dare</feedburner:origLink></entry>
 
 <entry>
   <title>Game Programming Gems, Table of Contents</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/S9F_ugKi_qE/game-programming-gems-table-of-contents" />
   <updated>2011-05-28T00:00:00-07:00</updated>
   <id>hhttp://zolomon.github.com/2011/05/28/game-programming-gems-table-of-contents</id>
   <content type="html">&lt;h1 style="background-color: #f2f2f2"&gt;Game Programming Gems 1&lt;/h1&gt;
&lt;h2&gt;SECTION 1 PROGRAMMING TECHNIQUES&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;1.0&lt;/td&gt;&lt;td&gt;The Magic of Data-Driven Design&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Object-Oriented Programming and Design Techniques&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;Fast Math Using Template Metaprogramming&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;An Automatic Singleton Utility&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Using the STL in Game Programming&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;A Generic Function-Binding Interface&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;A Generic Handle-Based Resource Manager&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Resource and Memory Management&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Fast Data Load Trick&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Frame-Based Memory Allocation&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Simple, Fast Bit Arrays&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.11&lt;/td&gt;&lt;td&gt;A Network Protocol for Online Games&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.12&lt;/td&gt;&lt;td&gt;Squeezing More Out of Assert&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.13&lt;/td&gt;&lt;td&gt;Stats: Real-Time Statistics and In-Game Debugging&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.14&lt;/td&gt;&lt;td&gt;Real-Time In-Game Profiling&lt;/td&gt;&lt;tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATHEMATICS&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;2.0&lt;/td&gt;&lt;td&gt;Predictable Random Numbers&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Interpolation Methods&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Integrating the Equations of Rigid Body Motion&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Polynomial Approximations to Trigonometric Functions&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Using Implicit Euler Integration for Numerical Stability&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Wavelets: Theory and Compression&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Interactive Simulation of Water Surfaces&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;td&gt;Quaternions for Game Programming&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.8&lt;/td&gt;&lt;td&gt;Matrix-Quaternion Conversions&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.9&lt;/td&gt;&lt;td&gt;Interpolating Quaternions&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.10&lt;/td&gt;&lt;td&gt;The Shortest Arc Quaternion&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 ARTIFICIAL INTELLIGENCE&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td&gt;3.0&lt;/td&gt;&lt;td&gt;Designing a General Robust AI Engine&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;A Finite-State Machine Class&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Game Trees&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;The Basics of A* for Path Planning&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;A* Aesthetic Optimizations&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;A* Speed Optimizations&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Simplified 3D Movement and Pathfinding Using Navigation Meshes&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Flocking: A Simple Technique for Simulating Group Behavior&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Fuzzy Logic for Video Games&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.9&lt;/td&gt;&lt;td&gt;A Neural-Net Primer&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 POLYGONOL TECHNIQUES&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td&gt;4.0&lt;/td&gt;&lt;td&gt;Optimizing Vertex Submissions for OpenGL&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Tweaking A Vertex's Projected Depth Value&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;The Vector Camera&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Camera Control Techniques&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;A Fast Cylinder-Frustum Intersection Test&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;3D Collision Detection&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Multi-Resolution Maps for Interaction Detection&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;Computing the Distance into a Sector&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Object Occlusion Culling&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.9&lt;/td&gt;&lt;td&gt;Never Let 'Em See You Pop - Issues in Geometric Level of Detail Selection&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.10&lt;/td&gt;&lt;td&gt;Octree Construction&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.11&lt;/td&gt;&lt;td&gt;Loose Octrees&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.12&lt;/td&gt;&lt;td&gt;View-Independent Progressive Meshing&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.13&lt;/td&gt;&lt;td&gt;Interpolated 3D Keyframe Animation&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.14&lt;/td&gt;&lt;td&gt;A Fast and Simple Skinning Techniques&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.15&lt;/td&gt;&lt;td&gt;Filling the Gaps - Advanced Animation Using Stitching and Skinning&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.16&lt;/td&gt;&lt;td&gt;Real-Time Realistic Terrain Generation&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.17&lt;/td&gt;&lt;td&gt;Fractal Terrain Generation - Fault Formation&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.18&lt;/td&gt;&lt;td&gt;Fractal Terrain Generation - Midpoint Displacement&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.19&lt;/td&gt;&lt;td&gt;Fractal Terrain Generation - Particle Deposition&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 5 PIXEL EFFECTS&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td&gt;5.0&lt;/td&gt;&lt;td&gt;2D Lens Flare&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Using 3D Hardware for 2D Sprite Effects&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Motif-Based Static Lighting&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Simulated Real-Time Lighting Using Vertex Color Interpolation&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Attenuation Maps&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Advanced Texturing Using Texture Coordinate Generation&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;Hardware Bump Mapping&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;Ground-Plane Shadows&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Real-Time Shadows on Complex Objects&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.9&lt;/td&gt;&lt;td&gt;Improving Environment-Mapped Reflection Using Glossy Prefiltering and the Fresnel Term&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.10&lt;/td&gt;&lt;td&gt;Convincing-Looking Glass for Games&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.11&lt;/td&gt;&lt;td&gt;Refraction Mapping for Liquids in Containers&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 6 APPENDIX&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td&gt;6.0&lt;/td&gt;&lt;td&gt;The Matrix Utility Library&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;The Text Utility Library&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;About the CD-ROM&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;table&gt;
  Index
&lt;/table&gt;

&lt;h1 style="background-color: #f2f2f2"&gt;Game Programming Gems 2&lt;/h1&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Preface&lt;/td&gt;&lt;td&gt; (xxi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Cover Image&lt;/td&gt;&lt;td&gt; (xxv)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Author Bios&lt;/td&gt;&lt;td&gt; (xxvii)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;SECTION 1 GENERAL PROGRAMMING (1)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction: General Programming&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Optimization for C++ Games&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;Inline Functions Versus Macros&lt;/td&gt;&lt;td&gt;(16)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Programming with Abstract Interfaces&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Exporting C++ Classes from DLLs&lt;/td&gt;&lt;td&gt;(28)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;Protect Yourself from DLL Hell and Missing OS Functions&lt;/td&gt;&lt;td&gt;(33)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;Dynamic Type Information&lt;/td&gt;&lt;td&gt;(38)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;A Property Class for Generic C++ Member Access&lt;/td&gt;&lt;td&gt;(46)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;A Game Entity Factory&lt;/td&gt;&lt;td&gt;(51)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Adding Deprecation Facilities to C++&lt;/td&gt;&lt;td&gt; (62)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;A Drop-in Debug Memory Manager&lt;/td&gt;&lt;td&gt;(66)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.11&lt;/td&gt;&lt;td&gt;A Built-in Game Profiling Module&lt;/td&gt;&lt;td&gt;(74)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.12&lt;/td&gt;&lt;td&gt;Linear Programming Model for Windows-based Games&lt;/td&gt;&lt;td&gt;(80)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.13&lt;/td&gt;&lt;td&gt;Stack Winding&lt;/td&gt;&lt;td&gt;(85)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.14&lt;/td&gt;&lt;td&gt;Self-Modifying Code&lt;/td&gt;&lt;td&gt;(91)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.15&lt;/td&gt;&lt;td&gt;File Management Using Resource Files&lt;/td&gt;&lt;td&gt;(100)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.16&lt;/td&gt;&lt;td&gt;Game input Recording and Playback&lt;/td&gt;&lt;td&gt;(105)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.17&lt;/td&gt;&lt;td&gt;A Flexible Text Parsing System&lt;/td&gt;&lt;td&gt;(112)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.18&lt;/td&gt;&lt;td&gt;A Generic Tweaker&lt;/td&gt;&lt;td&gt;(118)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.19&lt;/td&gt;&lt;td&gt;Genuine Random Number Generation&lt;/td&gt;&lt;td&gt;(127)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.20&lt;/td&gt;&lt;td&gt;Using Bloom Filters to improve Computational Performance&lt;/td&gt;&lt;td&gt;(133)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.21&lt;/td&gt;&lt;td&gt;3ds max Skin Exporter and Animation Toolkit&lt;/td&gt;&lt;td&gt;(141)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.22&lt;/td&gt;&lt;td&gt;Using Web Cameras in Video Games&lt;/td&gt;&lt;td&gt;(153)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATHEMATICS (163)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction: Mathematics&lt;/td&gt; &lt;td&gt;(165)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Floating-Point Tricks: Improving Performance with IEEE Floating Point&lt;/td&gt;&lt;td&gt;(167)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Vector and Plane Tricks&lt;/td&gt;&lt;td&gt;(182)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Fast, Robust Intersection of 3D Line Segments&lt;/td&gt;&lt;td&gt;(191)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Inverse Trajectory Determination&lt;/td&gt;&lt;td&gt;(205)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;The Parallel Transport Frame&lt;/td&gt;&lt;td&gt;(215)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Smooth C2 Quaternion-based Flythrough Paths&lt;/td&gt;&lt;td&gt;(220)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;td&gt;Recursive Dimensional CLustering: A Fast Algorithm for Collision Detection&lt;/td&gt;&lt;td&gt;(228)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.8&lt;/td&gt;&lt;td&gt;Programming Fractals&lt;/td&gt;&lt;td&gt;(239)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 ARTIFICIAL INTELLIGENCE (247)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction: Artificial Intelligence&lt;/td&gt;&lt;td&gt;(249)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;Strategies for Optimizing AI&lt;/td&gt;&lt;td&gt;(251)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Micro-Threads for Game Object AI&lt;/td&gt;&lt;td&gt;(258)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Managing AI with Micro-Threads&lt;/td&gt;&lt;td&gt;(265)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;An Architecture for RTS Command Queuing&lt;/td&gt;&lt;td&gt;(273)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;A High-Performance Tile-Based Line-of-Sight and Search System&lt;/td&gt;&lt;td&gt;(279)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Influence Mapping&lt;/td&gt;&lt;td&gt;(287)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Strategic Assessment Techniques&lt;/td&gt;&lt;td&gt;(298)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Terrain Reasoning for 3D Action Games&lt;/td&gt;&lt;td&gt;(307)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.9&lt;/td&gt;&lt;td&gt;Expanded Geometry for Points-of-Visibility Pathfinding&lt;/td&gt;&lt;td&gt;(317)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.10&lt;/td&gt;&lt;td&gt;Optimizing Points-of-Visibility Pathfinding&lt;/td&gt;&lt;td&gt;(324)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.11&lt;/td&gt;&lt;td&gt;Flocking with Teeth: Predators and Prey&lt;/td&gt;&lt;td&gt;(330)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.12&lt;/td&gt;&lt;td&gt;A Generic Fuzzy State Machine in C++&lt;/td&gt;&lt;td&gt; (337)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.13&lt;/td&gt;&lt;td&gt;Imploding Combinatorial Explosion in a Fuzzy System&lt;/td&gt;&lt;td&gt;(342)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.14&lt;/td&gt;&lt;td&gt;Using a Neutral Network in a Game: A Concrete Example&lt;/td&gt;&lt;td&gt;(351)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 GEOMETRY MANAGEMENT (359)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction: Geometry Management&lt;/td&gt;&lt;td&gt;(361)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Comparison of VIPM Methods&lt;/td&gt;&lt;td&gt;(363)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Simplified Terrain Using Interlocking Tiles&lt;/td&gt;&lt;td&gt;(377)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Sphere Trees for Fast Visibility Culling, Ray Tracing and Range Searching&lt;/td&gt;&lt;td&gt;(384)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Compressed Axis-Aligned Bounding Box Trees&lt;/td&gt;&lt;td&gt;(388)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Direct Access Quadtree Lookup&lt;/td&gt;&lt;td&gt;(394)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Approximating Fish Tank Refractions&lt;/td&gt;&lt;td&gt;(402)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;Rendering Print Resolution Screenshots&lt;/td&gt;&lt;td&gt;(406)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Applying Decals to Arbitrary Surfaces&lt;/td&gt;&lt;td&gt;(411)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.9&lt;/td&gt;&lt;td&gt;Rendering Distans Scenery with Skyboxes&lt;/td&gt;&lt;td&gt;(416)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.10&lt;/td&gt;&lt;td&gt;Self-Shadowing Characters&lt;/td&gt;&lt;td&gt;(421)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.11&lt;/td&gt;&lt;td&gt;Classic Super Mario 64 Third-Person Control and Animation&lt;/td&gt;&lt;td&gt;(425)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 5 GRAPHICS DISPLAY (433)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction: Graphics Display&lt;/td&gt;&lt;td&gt;(435)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Cartoon Rendering: Real-Time Silhouette Edge Detection and Rendering&lt;/td&gt;&lt;td&gt;(436)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Cartoon Rendering Using Texture Mapping and Programmable Vertex Shaders&lt;/td&gt;&lt;td&gt;(444)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Dynamix Per-Pixel Lighting Technique&lt;/td&gt;&lt;td&gt;(452)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Generating Procedural Clouds using 3D Hardware&lt;/td&gt;&lt;td&gt;(463)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Texture Masking for Faster Lens Flare&lt;/td&gt;&lt;td&gt;(474)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;Practical Priority Buffer Shadows&lt;/td&gt;&lt;td&gt;(481)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;Impostors: Adding Clutter&lt;/td&gt;&lt;td&gt;(488)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Operations for Hardware-Accelerated Procedural Texture Animation&lt;/td&gt;&lt;td&gt;(497)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h1 style="background-color: #f2f2f2"&gt;Game Programming Gems 3&lt;/h1&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Foreword&lt;/td&gt;&lt;td&gt;(xi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Preface&lt;/td&gt;&lt;td&gt; (xv)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Acknowledgments&lt;/td&gt;&lt;td&gt; (xix)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Cover Image&lt;/td&gt;&lt;td&gt; (xxi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Contributor Bios&lt;/td&gt;&lt;td&gt; (xxiii)&lt;/td&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 1 GENERAL PROGRAMMING (1)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt; &lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt; 
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Scheduling Game Events&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;An Object-Composition Game Framework&lt;/td&gt;&lt;td&gt;(15)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Finding Redeeming Value in C-Style Macros&lt;/td&gt;&lt;td&gt;(26)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Platform-Independent, Function-Binding Code Generator&lt;/td&gt;&lt;td&gt;(38)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;Handle-Based Smart Pointers&lt;/td&gt;&lt;td&gt;(44)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;Custom STL Allocators&lt;/td&gt;&lt;td&gt;(49)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Save Me Now&lt;/td&gt;&lt;td&gt; (59)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Autolists Design Pattern&lt;/td&gt;&lt;td&gt;(64)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Floating-Point Exception Handling&lt;/td&gt;&lt;td&gt;(69)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Programming a Game Design-Compliant Engine Using UML&lt;/td&gt;&lt;td&gt;(73)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.11&lt;/td&gt;&lt;td&gt;Using Lex and Yacc To Parse Custom Data Files&lt;/td&gt;&lt;td&gt;(83)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.12&lt;/td&gt;&lt;td&gt;Developing Games for a World Market&lt;/td&gt;&lt;td&gt;(92)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.13&lt;/td&gt;&lt;td&gt;Real-Time Input and UI in 3D Games&lt;/td&gt;&lt;td&gt;(109)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.14&lt;/td&gt;&lt;td&gt;Natural Selection: The Evolution of Pie Menus&lt;/td&gt;&lt;td&gt;(117)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.15&lt;/td&gt;&lt;td&gt;Lightweight, Policy-Based Logging&lt;/td&gt;&lt;td&gt;(129)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.16&lt;/td&gt;&lt;td&gt;Journaling Services&lt;/td&gt;&lt;td&gt;(136)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.17&lt;/td&gt;&lt;td&gt;Real-Time Hierarchical Profiling&lt;/td&gt;&lt;td&gt;(146)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATHEMATICS (153)  &lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt; &lt;td&gt;(155)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Fast Base-2 Functions for Logarithms and Random Number Generation&lt;/td&gt;&lt;td&gt;(157)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Using Vector Fractions for Exact Geometry&lt;/td&gt;&lt;td&gt;(160)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;More Approximations to Trigonometric Functions&lt;/td&gt;&lt;td&gt;(170)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Quaternion Compression&lt;/td&gt;&lt;td&gt;(187)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Constrained Inverse Kinematics&lt;/td&gt;&lt;td&gt;(192)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Cellular Automata for Physical Modeling&lt;/td&gt;&lt;td&gt;(200)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;td&gt;Coping with Friction in Dynamic Simulations&lt;/td&gt;&lt;td&gt;(215)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 ARTIFICIAL INTELLIGENCE (227)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(229)&lt;/td&gt;&lt;/tr&gt;  
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;Optimized Machine Learning with GoCap&lt;/td&gt;&lt;td&gt;(231)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Area Navigation: Expanding the Path-Finding Paradigm&lt;/td&gt;&lt;td&gt;(240)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Function Pointer-Based, Embedded Finite-State Machines&lt;/td&gt;&lt;td&gt;(256)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;Terrain Analysis in an RTS-The Hidden Giant&lt;/td&gt;&lt;td&gt;(268)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;An Extensible Trigger System for AI Agents, Objects, and Quests&lt;/td&gt;&lt;td&gt;(285)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Tactical Path-Finding with A&lt;/td&gt;&lt;td&gt; (294)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;A Fast Approach to Navigation Meshes&lt;/td&gt;&lt;td&gt;(307)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Choosing a Relationship Between Path-Finding and Collision&lt;/td&gt;&lt;td&gt;(321)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 GRAPHICS (333)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(335)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;T-Junction Elimination and Retriangulation&lt;/td&gt;&lt;td&gt;(338)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Fast Heightfield Normal Calculation&lt;/td&gt;&lt;td&gt;(344)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Fast Patch Normals&lt;/td&gt;&lt;td&gt;(349)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Fast and Simple Occlusion Culling&lt;/td&gt;&lt;td&gt;(353)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Triangle Strip Creation, Optimizations, and Rendering&lt;/td&gt;&lt;td&gt;(359)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Computing Optimized Shadow Volumes for Complex Data Sets&lt;/td&gt;&lt;td&gt;(367)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;Subdivision Surfaces for Character Animation&lt;/td&gt;&lt;td&gt;(372)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Improved Deformation of Bones&lt;/td&gt;&lt;td&gt;(384)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.9&lt;/td&gt;&lt;td&gt;A Framework for Realistic Character Locomotion&lt;/td&gt;&lt;td&gt;(394)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.10&lt;/td&gt;&lt;td&gt;A Programmable Vertex Shader Compiler&lt;/td&gt;&lt;td&gt;(404)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.11&lt;/td&gt;&lt;td&gt;Billboard Beams&lt;/td&gt;&lt;td&gt;(413)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.12&lt;/td&gt;&lt;td&gt;3D Tricks for Isometric Engines&lt;/td&gt;&lt;td&gt;(417)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.13&lt;/td&gt;&lt;td&gt;Curvature Simulation Using Normal Maps&lt;/td&gt;&lt;td&gt;(424)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.14&lt;/td&gt;&lt;td&gt;Methods for Dynamic, Photorealistic Terrain Lighting&lt;/td&gt;&lt;td&gt;(433)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.15&lt;/td&gt;&lt;td&gt;Cube Map Lighting Techniques&lt;/td&gt;&lt;td&gt;(444)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.16&lt;/td&gt;&lt;td&gt;Procedural Texturing&lt;/td&gt;&lt;td&gt;(452)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.17&lt;/td&gt;&lt;td&gt;Unique Textures&lt;/td&gt;&lt;td&gt;(459)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.18&lt;/td&gt;&lt;td&gt;Textures as Lookup Tables for Per-Pixel Lighting Computations&lt;/td&gt;&lt;td&gt;(467)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.19&lt;/td&gt;&lt;td&gt;Rendering with Handcrafted Shading Models&lt;/td&gt;&lt;td&gt;(477)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;SECTION 5 NETWORK AND MULTIPLAYER (485)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(487)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Minimizing Latency in Real-Time Strategy Games&lt;/td&gt;&lt;td&gt;(488)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Real-Time Strategy Network Protocol&lt;/td&gt;&lt;td&gt;(496)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;A Flexible Simulation Architecture for Massively Multiplayer Games&lt;/td&gt;&lt;td&gt;(506)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Scaling Multiplayer Servers&lt;/td&gt;&lt;td&gt;(520)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Template-Based Object Serialization&lt;/td&gt;&lt;td&gt;(534)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;Secure Sockets&lt;/td&gt;&lt;td&gt;(546)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;A Network Monitoring and Simulation Tool&lt;/td&gt;&lt;td&gt;(557)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Creating Multiplayer Games with DirectPlay 8.1&lt;/td&gt;&lt;td&gt;(561)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.9&lt;/td&gt;&lt;td&gt;Wireless Gaming Using the Java Micro Edition&lt;/td&gt;&lt;td&gt;(573)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;SECTION 6 AUDIO (583)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(585)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;Audio Compression with Ogg Vorbis&lt;/td&gt;&lt;td&gt;(587)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;Creating a Compelling 3D Audio Environment&lt;/td&gt;&lt;td&gt;(595)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Obstruction Using Axis-Aligned Bounding Boxes&lt;/td&gt;&lt;td&gt;(600)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.4&lt;/td&gt;&lt;td&gt;Using the Biquad Resonant Filter&lt;/td&gt;&lt;td&gt;(606)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.5&lt;/td&gt;&lt;td&gt;Linear Predictive Coding for Voice Compression and Effects&lt;/td&gt;&lt;td&gt;(613)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.6&lt;/td&gt;&lt;td&gt;The Stochastic Synthesis of Complex Sounds&lt;/td&gt;&lt;td&gt;(622)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.7&lt;/td&gt;&lt;td&gt;Real-Time Modular Audio Processing for Games&lt;/td&gt;&lt;td&gt;(630)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Appendix: About the CD-ROM&lt;/td&gt;&lt;td&gt;(639)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Contents&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h1 style="background-color: #f2f2f2"&gt;Game Programming Gems 4&lt;/h1&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Foreword&lt;/td&gt;&lt;td&gt;(xi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Preface&lt;/td&gt;&lt;td&gt;(xv)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Acknowledgments&lt;/td&gt;&lt;td&gt;(xvii)&lt;/td&gt;&lt;/tr&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Cover Image&lt;/td&gt;&lt;td&gt;(xix)&lt;/td&gt;&lt;/tr&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Contributor Bios&lt;/td&gt;&lt;td&gt;(xxi)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;


&lt;h2&gt;SECTION 1 GENERAL PROGRAMMING (1)&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;  

  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;The Science of Debugging Games&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;An HTML-Based Logging and Debugging System&lt;/td&gt;&lt;td&gt;(19)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;The Clock: Keeping Your Finger on the Pulse of the Game&lt;/td&gt;&lt;td&gt;(27)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Designing and Maintaining Large Cross-Platform Libraries&lt;/td&gt;&lt;td&gt;(35)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;Fight Memory Fragmentation with Templated Freelists&lt;/td&gt;&lt;td&gt;(43)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;A Generic Tree Container in C++&lt;/td&gt;&lt;td&gt;(51)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;The Beauty of Weak References and Null Objects&lt;/td&gt;&lt;td&gt;(61)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;A System for Managing Game Entities&lt;/td&gt;&lt;td&gt;(69)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Address-Space Managed Dynamic Arrays for Windows and the Xbox&lt;/td&gt;&lt;td&gt;(85)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Critically Damped Ease-In/Ease-Out Smoothing&lt;/td&gt;&lt;td&gt;(95)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.11&lt;/td&gt;&lt;td&gt;A Flexible, On-the-Fly Object Manager&lt;/td&gt;&lt;td&gt;(103)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.12&lt;/td&gt;&lt;td&gt;Using Custom RTTI Properties to Stream and Edit Objects&lt;/td&gt;&lt;td&gt;(111)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.13&lt;/td&gt;&lt;td&gt;Using XML without Sacrificing Speed&lt;/td&gt;&lt;td&gt;(125)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATHEMATICS (137)&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(139)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Zobrist Hash Using the Mersenne Twister&lt;/td&gt;&lt;td&gt;(141)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Extracting Frustum and Camera Information&lt;/td&gt;&lt;td&gt;(147)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Solving Accuracy Problems in Large World Coordinates&lt;/td&gt;&lt;td&gt;(157)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Nonuniform Splines&lt;/td&gt;&lt;td&gt;(171)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Using the Covariance Matrix for Better-Fitting Bounding Objects&lt;/td&gt;&lt;td&gt;(183)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;The Jacobian Transpose Method for Inverse Kinematics&lt;/td&gt;&lt;td&gt;(193)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 PHYSICS (205)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(207)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;Ten Fingers of Death: Algorithms for Combat Killing&lt;/td&gt;&lt;td&gt;(209)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Vehicle Physics Simulation for CPU-Limited Systems&lt;/td&gt;&lt;td&gt;(221)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Writing a Verlet-Based Physics Engine&lt;/td&gt;&lt;td&gt;(231)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;Constraints in Rigid Body Dynamics&lt;/td&gt;&lt;td&gt;(241)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;Fast Contact Reduction for Dynamics Simulation&lt;/td&gt;&lt;td&gt;(253)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Interactive Water Surfaces&lt;/td&gt;&lt;td&gt;(265)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Fast Deformations with Multilayered Physics&lt;/td&gt;&lt;td&gt;(275)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Modal Analysis for Fast, Stable Deformation&lt;/td&gt;&lt;td&gt;(287)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 ARTIFICIAL INTELLIGENCE (299)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(301)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Third-Person Camera Navigation&lt;/td&gt;&lt;td&gt;(303)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Narrative Combat: Using AI to Enhance Tension in an Action Game&lt;/td&gt;&lt;td&gt;315&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;NPC Decision Making: Dealing with Randomness&lt;/td&gt;&lt;td&gt;(325)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;An Object-Oriented Utility-Based Decision Architecture&lt;/td&gt;&lt;td&gt;(337)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;A Distributed-Reasoning Voting Architecture&lt;/td&gt;&lt;td&gt;(345)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Attractors and Repulsors&lt;/td&gt;&lt;td&gt;(355)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;Advanced Wall Building for RTS Games&lt;/td&gt;&lt;td&gt;(365)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Artificial Neural Networks on Programmable Graphics Hardware&lt;/td&gt;&lt;td&gt;(373)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 5 GRAPHICS (379)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(381)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Poster Quality Screenshots&lt;/td&gt;&lt;td&gt;(383)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;GPU Shadow Volume Construction for Nonclosed Meshes&lt;/td&gt;&lt;td&gt;(393)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Perspective Shadow Maps&lt;/td&gt;&lt;td&gt;(399)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Combined Depth and ID-Based Shadow Buffers&lt;/td&gt;&lt;td&gt;(411)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Carving Static Shadows into Geometry&lt;/td&gt;&lt;td&gt;(427)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Techniques to Apply Team Colors to 3D Models&lt;/td&gt;&lt;td&gt;(451)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.9&lt;/td&gt;&lt;td&gt;Fast Sepia Tone Conversion&lt;/td&gt;&lt;td&gt;(461)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.10&lt;/td&gt;&lt;td&gt;Dynamic Gamma Using Sampled Scene Luminance&lt;/td&gt;&lt;td&gt;(465)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.11&lt;/td&gt;&lt;td&gt;Heat and Haze Post-Processing Effects&lt;/td&gt;&lt;td&gt;(477)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.13&lt;/td&gt;&lt;td&gt;Motion Capture Data Compression&lt;/td&gt;&lt;td&gt;(497)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.14&lt;/td&gt;&lt;td&gt;Fast Collision Detection for 3D Bones-Based Articulated Characters&lt;/td&gt;&lt;td&gt;(503)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.15&lt;/td&gt;&lt;td&gt;Terrain Occlusion Culling with Horizons&lt;/td&gt;&lt;td&gt;(515)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 6 NETWORK AND MULTIPLAYER (529)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(531)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;General Lobby Design and Development&lt;/td&gt;&lt;td&gt;(533)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;Thousands of Clients per Server&lt;/td&gt;&lt;td&gt;(541)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Efficient MMP Game State Storage&lt;/td&gt;&lt;td&gt;(555)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.4&lt;/td&gt;&lt;td&gt;Practical Application of Parallel-State Machines in a Client-Server Environment&lt;/td&gt;&lt;td&gt;(563)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.5&lt;/td&gt;&lt;td&gt;Bit Packing: A Network Compression Technique&lt;/td&gt;&lt;td&gt;(571)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.6&lt;/td&gt;&lt;td&gt;Time and Consistency Management for Multiserver-Based MMORPGs&lt;/td&gt;&lt;td&gt;(579)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 7 AUDIO (591)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(593)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.1&lt;/td&gt;&lt;td&gt;A Brief Introduction to OpenAL&lt;/td&gt;&lt;td&gt;(595)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.2&lt;/td&gt;&lt;td&gt;A Simple Real-Time Lip-Synching System&lt;/td&gt;&lt;td&gt;(607)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.3&lt;/td&gt;&lt;td&gt;Dynamic Variables and Audio Programming&lt;/td&gt;&lt;td&gt;(613)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.4&lt;/td&gt;&lt;td&gt;Creating an Audio Scripting System&lt;/td&gt;&lt;td&gt;(621)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.5&lt;/td&gt;&lt;td&gt;Implementing an Environmental Audio Solution Using EAX and ZoomFX&lt;/td&gt;&lt;td&gt;(633)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.6&lt;/td&gt;&lt;td&gt;Controlling Real-Time Sound Synthesis from Game Physics&lt;/td&gt;&lt;td&gt;(649)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;APPENDIX: ABOUT THE CD-ROM&lt;/td&gt;&lt;td&gt;(657)&lt;/td&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;INDEX&lt;/td&gt; &lt;td&gt;(659)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h1 style="background-color: #f2f2f2"&gt;Game Programming Gems 5&lt;/h1&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Foreword&lt;/td&gt;&lt;td&gt;(xi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Preface&lt;/td&gt;&lt;td&gt;(xv)&lt;/td&gt;&lt;/tr&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Cover Image&lt;/td&gt;&lt;td&gt;(xix)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Contributor Bios&lt;/td&gt;&lt;td&gt;(xxi)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 1 GENERAL PROGRAMMING (1)&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Context-Sensitive HUDs for Editors&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;Parsing Text Data in Games&lt;/td&gt;&lt;td&gt;(17)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Component Based Object Management&lt;/td&gt;&lt;td&gt;(25)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Using Templates for Reflection in C++&lt;/td&gt;&lt;td&gt;(39)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;Sphere Trees for Speedy BSPs&lt;/td&gt;&lt;td&gt;(55)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;Improved Frustum Culling&lt;/td&gt;&lt;td&gt;(65)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Generic Pager&lt;/td&gt;&lt;td&gt;(79)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Large-Scale Stack-Based State Machines&lt;/td&gt;&lt;td&gt;(93)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;CSG Construction Using BSP Trees&lt;/td&gt;&lt;td&gt;(103)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Building Lua into Games&lt;/td&gt;&lt;td&gt;(115)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.11&lt;/td&gt;&lt;td&gt;Improving Freelists with Policy Based Design&lt;/td&gt;&lt;td&gt;(129)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.12&lt;/td&gt;&lt;td&gt;A Real-Time Remote Debug Message Logger&lt;/td&gt;&lt;td&gt;(143)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.13&lt;/td&gt;&lt;td&gt;A Transparent Class Saving and Loading Trick&lt;/td&gt;&lt;td&gt;(149)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.14&lt;/td&gt;&lt;td&gt;An Effective Cache-Oblivious Implementation of the ABT Tree&lt;/td&gt;&lt;td&gt;(159)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.15&lt;/td&gt;&lt;td&gt;Visual Design of State Machines&lt;/td&gt;&lt;td&gt;(169)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.16&lt;/td&gt;&lt;td&gt;A Generic Component Library&lt;/td&gt;&lt;td&gt;(177)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.17&lt;/td&gt;&lt;td&gt;Choose Your Path-A Menu System&lt;/td&gt;&lt;td&gt;(189)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 2 MATHEMATICS (197)&lt;/h2&gt;
&lt;table&gt;
  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(199)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Using Geometric Algebra for Computer Graphics&lt;/td&gt;&lt;td&gt;(201)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Minimal Acceleration Hermite Curves&lt;/td&gt;&lt;td&gt;(225)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Spline-Based Time Control for Animation&lt;/td&gt;&lt;td&gt;(233)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Faster Quaternion Interpolation Using Approximations&lt;/td&gt;&lt;td&gt;(247)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Minimax Numerical Approximation&lt;/td&gt;&lt;td&gt;(269)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Oblique View Frustums for Mirrors and Portals&lt;/td&gt;&lt;td&gt;(281)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 3 ARTIFICIAL INTELLIGENCE (295)&lt;/h2&gt;
&lt;table&gt;
  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(297)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;Automatic Cover Finding with Navigation Meshes&lt;/td&gt;&lt;td&gt;(299)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Fast Target Ranking Using an Artificial Potential Field&lt;/td&gt;&lt;td&gt;(307)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Using Lanchester Attrition Models to Predict the Results of Combat&lt;/td&gt;&lt;td&gt;(317)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;Implementing Practical Planning for Game AI&lt;/td&gt;&lt;td&gt;(329)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;Optimizing a Decision Tree Query Algorithm for Multithreaded Architectures&lt;/td&gt;&lt;td&gt;(345)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Parallel AI Development with PVM&lt;/td&gt;&lt;td&gt;(353)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Beyond A&lt;/td&gt;&lt;td&gt; (367)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Advanced Pathfinding with Minimal Replanning Cost: Dynamic A Star (D*)&lt;/td&gt;&lt;td&gt;(383)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 4 PHYSICS (391)&lt;/h2&gt;
&lt;table&gt;
  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(393)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Back of the Envelope Aerodynamics for Game Physics&lt;/td&gt;&lt;td&gt;(395)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Dynamic Grass Simulation and Other Natural Effects&lt;/td&gt;&lt;td&gt;(411)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Realistic Cloth Animation Using the Mass-Spring Model&lt;/td&gt;&lt;td&gt;(421)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Practical Animation of Soft Bodies for Game Development: The Pressurized Soft-Body Model&lt;/td&gt;&lt;td&gt;(435)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Adding Life to Ragdoll Simulation Using Feedback Control Systems&lt;/td&gt;&lt;td&gt;(449)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Designing a Prescripted Physics System&lt;/td&gt;&lt;td&gt;(457)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;Prescripted Physics: Techniques and Applications&lt;/td&gt;&lt;td&gt;(473)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Realistic Camera Movement in a 3D Car Simulator&lt;/td&gt;&lt;td&gt;(483)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 5 GRAPHICS (495)&lt;/h2&gt;
&lt;table&gt;
  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(497)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Realistic Cloud Rendering on Modern GPUs&lt;/td&gt;&lt;td&gt;(499)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Let It Snow, Let It Snow, Let It Snow (and Rain&lt;/td&gt;&lt;td&gt; (507)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Widgets: Rendering Fast and Persistent Foliage&lt;/td&gt;&lt;td&gt;(515)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;2.5 Dimensional Impostors for Realistic Trees and Forests&lt;/td&gt;&lt;td&gt;(527)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Gridless Controllable Fire&lt;/td&gt;&lt;td&gt;(539)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;Powerful Explosion Effects Using Billboard Particles&lt;/td&gt;&lt;td&gt;(551)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;A Simple Method for Rendering Gemstones&lt;/td&gt;&lt;td&gt;(561)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Volumetric Post-Processing&lt;/td&gt;&lt;td&gt;(571)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.9&lt;/td&gt;&lt;td&gt;Procedural Level Generation&lt;/td&gt;&lt;td&gt;(579)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.10&lt;/td&gt;&lt;td&gt;Recombinant Shaders&lt;/td&gt;&lt;td&gt;(589)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 6 NETWORK AND MULTIPLAYER (599)&lt;/h2&gt;
&lt;table&gt;
  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(601)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;Keeping a Massively Multiplayer Online Game Massive, Online, and Persistent&lt;/td&gt;&lt;td&gt;(603)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;Implementing a Seamless World Server&lt;/td&gt;&lt;td&gt;(611)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Designing a Vulgarity Filtering System&lt;/td&gt;&lt;td&gt;(621)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.4&lt;/td&gt;&lt;td&gt;Fast and Efficient Implementation of a Remote Procedure Call System&lt;/td&gt;&lt;td&gt;(627)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.5&lt;/td&gt;&lt;td&gt;Overcoming Network Address Translation in Peer-to-Peer Communications&lt;/td&gt;&lt;td&gt;(643)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.6&lt;/td&gt;&lt;td&gt;A Reliable Messaging Protocol&lt;/td&gt;&lt;td&gt;(665)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.7&lt;/td&gt;&lt;td&gt;Safe Random Number Systems&lt;/td&gt;&lt;td&gt;(673)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.8&lt;/td&gt;&lt;td&gt;Secure by Design&lt;/td&gt;&lt;td&gt;(681)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 7 AUDIO (693)&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(695)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.1&lt;/td&gt;&lt;td&gt;Multithreaded Audio Programming Techniques&lt;/td&gt;&lt;td&gt;(697)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.2&lt;/td&gt;&lt;td&gt;Sound Management by Group&lt;/td&gt;&lt;td&gt;(713)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.3&lt;/td&gt;&lt;td&gt;Using 3D Surfaces as Audio Emitters&lt;/td&gt;&lt;td&gt;(721)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.4&lt;/td&gt;&lt;td&gt;Fast Environmental Reverb Based on Feedback Delay Networks&lt;/td&gt;&lt;td&gt;(729)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.5&lt;/td&gt;&lt;td&gt;Introduction to Single-Speaker Speech Recognition&lt;/td&gt;&lt;td&gt;(741)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the CD-ROM&lt;/td&gt;&lt;td&gt;(751)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Index&lt;/td&gt;&lt;td&gt;(753)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h1 style="background-color: #f2f2f2"&gt;Game Programming Gems 6&lt;/h1&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Foreword&lt;/td&gt;&lt;td&gt;(xi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Preface&lt;/td&gt;&lt;td&gt;(xv)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Cover Image&lt;/td&gt;&lt;td&gt;(xxi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Contributor Bios&lt;/td&gt;&lt;td&gt;(xxiii)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 1 GENERAL PROGRAMMING (1)&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Lock-Free Algorithms&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;Utilizing Multicore Processors with OpenMP&lt;/td&gt;&lt;td&gt;(17)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Computer Vision in Games Using the OpenCV Library&lt;/td&gt;&lt;td&gt;(25)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Geographic Grid Registration of Game Objects&lt;/td&gt;&lt;td&gt;(39)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;BSP Techniques&lt;/td&gt;&lt;td&gt;(49)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;Closest-String Matching Algorithm&lt;/td&gt;&lt;td&gt;(69)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Using CppUnit To Implement Unit Testing&lt;/td&gt;&lt;td&gt;(79)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Fingerprinting Pre-Release Builds To Deter and Detect Piracy&lt;/td&gt;&lt;td&gt;(97)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Faster File Loading with Access-Based File Reordering&lt;/td&gt;&lt;td&gt;(103)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Stay in the Game: Asset Hotloading for Fast Iteration&lt;/td&gt;&lt;td&gt;(109)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATHEMATICS AND PHYSICS (117) &lt;/h2&gt; 
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(119)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Floating-Point Tricks&lt;/td&gt;&lt;td&gt;(121)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;GPU Computation in Projective Space Using Homogeneous Coordinates&lt;/td&gt;&lt;td&gt;(137)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Solving Systems of Linear Equations Using the Cross Product&lt;/td&gt;&lt;td&gt;(149)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Sequence Indexing for Game Development&lt;/td&gt;&lt;td&gt;(161)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Exact Buoyancy for Polyhedra&lt;/td&gt;&lt;td&gt;(175)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Real-Time Particle-Based Fluid Simulation with Rigid Body Interaction&lt;/td&gt;&lt;td&gt;(189)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 ARTIFICIAL INTELLIGENCE (207)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(209)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;Applying Model-Based Decision-Making Methods to Games: Applying the Locust AI Engine to QuakeŽ III&lt;/td&gt;&lt;td&gt;(211)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Achieving Coordination with Autonomous NPCs&lt;/td&gt;&lt;td&gt;(223)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Behavior-Based Robotic Architectures for Games&lt;/td&gt;&lt;td&gt;(235)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;Constructing a Goal-Oriented Robot for Unreal Tournament Using Fuzzy Sensors, Finite-State Machines, and Extended Behavior Networks&lt;/td&gt;&lt;td&gt;(245)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;A Goal-Oriented Unreal Bot: Building a Game Agent with Goal-Oriented Behavior and Simple Personality Using Extended Behavior Networks&lt;/td&gt;&lt;td&gt;(259)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Short-Term Memory Modeling Using a Support Vector Machine&lt;/td&gt;&lt;td&gt;(273)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Using the Quantified Judgment Model for Engagement Analysis&lt;/td&gt;&lt;td&gt;(283)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Designing a Multilayer, Pluggable AI Engine&lt;/td&gt;&lt;td&gt;(291)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.9&lt;/td&gt;&lt;td&gt;A Fuzzy-Control Approach to Managing Scene Complexity&lt;/td&gt;&lt;td&gt;(307)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 SCRIPTING AND DATA-DRIVEN SYSTEMS (317)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(319)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Scripting Language Survey&lt;/td&gt;&lt;td&gt;(323)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Binding C/C++ Objects to Lua&lt;/td&gt;&lt;td&gt;(341)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Programming Advanced Control Mechanisms with Lua Coroutines&lt;/td&gt;&lt;td&gt;(357)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Managing High-Level Script Execution Within Multithreaded Environments&lt;/td&gt;&lt;td&gt;(371)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Exposing Actor Properties Using Nonintrusive Proxies&lt;/td&gt;&lt;td&gt;(383)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Game Object Component System&lt;/td&gt;&lt;td&gt;(393)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 5 GRAPHICS (405)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(407)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Synthesis of Realistic Idle Motion for Interactive Characters&lt;/td&gt;&lt;td&gt;(409)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Spatial Partitioning Using an Adaptive Binary Tree&lt;/td&gt;&lt;td&gt;(423)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Enhanced Object Culling with (Almost) Oriented Bounding Boxes&lt;/td&gt;&lt;td&gt;(437)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Skin Splitting for Optimal Rendering&lt;/td&gt;&lt;td&gt;(449)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;GPU Terrain Rendering&lt;/td&gt;&lt;td&gt;(461)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;Interactive Fluid Dynamics and Rendering on the GPU&lt;/td&gt;&lt;td&gt;(473)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;Fast Per-Pixel Lighting with Many Lights&lt;/td&gt;&lt;td&gt;(489)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Rendering Road Signs Sharply&lt;/td&gt;&lt;td&gt;(501)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.9&lt;/td&gt;&lt;td&gt;Practical Sky Rendering for Games&lt;/td&gt;&lt;td&gt;(517)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.10&lt;/td&gt;&lt;td&gt;High Dynamic Range Rendering Using OpenGL Frame Buffer Objects&lt;/td&gt;&lt;td&gt;(529)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;SECTION 6 AUDIO (537)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(539)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;Real-Time Sound Generation from Deformable Meshes&lt;/td&gt;&lt;td&gt;(541)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;A Lightweight Generator for Real-Time Sound Effects&lt;/td&gt;&lt;td&gt;(549)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Real-Time Mixing Busses&lt;/td&gt;&lt;td&gt;(555)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.4&lt;/td&gt;&lt;td&gt;Potentially Audible Sets&lt;/td&gt;&lt;td&gt;(561)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.5&lt;/td&gt;&lt;td&gt;A Cheap Doppler Effect&lt;/td&gt;&lt;td&gt;(573)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.6&lt;/td&gt;&lt;td&gt;Faking Real-Time DSP Effects&lt;/td&gt;&lt;td&gt;(583)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 7 NETWORK AND MULTIPLAYER (589)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(591)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.1&lt;/td&gt;&lt;td&gt;Dynamically Adaptive Streaming of 3D Data for Animated Characters&lt;/td&gt;&lt;td&gt;(593)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.2&lt;/td&gt;&lt;td&gt;Complex Systems-Based High-Level Architecture for Massively Multiplayer Games&lt;/td&gt;&lt;td&gt;(607)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.3&lt;/td&gt;&lt;td&gt;Generating Globally Unique Identifiers for Game Objects&lt;/td&gt;&lt;td&gt;(623)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.4&lt;/td&gt;&lt;td&gt;Massively Multiplayer Online Prototype Utilizing Second Life for Game Concept Prototyping&lt;/td&gt;&lt;td&gt;(629)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.5&lt;/td&gt;&lt;td&gt;Reliable Peer-to-Peer Gaming Connections Penetrating NAT&lt;/td&gt;&lt;td&gt;(641)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the CD-ROM&lt;/td&gt;&lt;td&gt;(651)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Index&lt;/td&gt;&lt;td&gt;(653)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h1 style="background-color: #f2f2f2"&gt;Game Programming Gems 7&lt;/h1&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Preface&lt;/td&gt;&lt;td&gt;(ix)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Cover Image&lt;/td&gt;&lt;td&gt;(xiii)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Acknowledgements&lt;/td&gt;&lt;td&gt;(xv)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Contributor Bios&lt;/td&gt;&lt;td&gt;(xvii)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 1 GENERAL PROGRAMMING (1)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Efficient Cache Replacement Using the Age and Cost Metrics&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;High Performance Heap Allocator&lt;/td&gt;&lt;td&gt;(15)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Optical Flow for Video Games Played with Webcams&lt;/td&gt;&lt;td&gt;(25)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Design and Implementation of a Multi-Platform Threading Engine&lt;/td&gt;&lt;td&gt;(35)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;For Bees and Gamers: How to Handle Hexagonal Tiles&lt;/td&gt;&lt;td&gt;(47)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;A Sketch-Based Interface to Real-Time Strategy Games Based on a Cellular Automaton&lt;/td&gt;&lt;td&gt;(59)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Foot Navigation Technique for First-Person Shooting Games&lt;/td&gt;&lt;td&gt;(69)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Deferred Function Call Invocation System&lt;/td&gt;&lt;td&gt;(81)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Multithread Job and Dependancy System&lt;/td&gt;&lt;td&gt;(87)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Advanced Debugging Techniques&lt;/td&gt;&lt;td&gt;(97)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATH AND PHYSICS (107)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(10&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Random Number Generation&lt;/td&gt;&lt;td&gt;(113)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Fast Generic Ray Queries for Games&lt;/td&gt;&lt;td&gt;(127)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Fast Rigid-Body Collision Detection using Farthest Feature Maps&lt;/td&gt;&lt;td&gt;(143)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Using Projective Space to Improve Precision of Geometric Computations&lt;/td&gt;&lt;td&gt;(153)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;XenoCollide: Complex Collision Made Simple&lt;/td&gt;&lt;td&gt;(165)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Efficient COllision Detection Using Transformation Semantics&lt;/td&gt;&lt;td&gt;(179)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;td&gt;Trigonemtric Splines&lt;/td&gt;&lt;td&gt;(191)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.8&lt;/td&gt;&lt;td&gt;Using Gaussian Randomness to Realistically Vary Projectile Paths&lt;/td&gt;&lt;td&gt;(199)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 AI (205)&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(20&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;Creating Interesting Agents with Behavior Cloning&lt;/td&gt;&lt;td&gt;(209)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Designing a Realistic and Unified Agent-Sesning Model&lt;/td&gt;&lt;td&gt;(217)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Managing AI Algorithmic Complexity: Generic Programming Apprach&lt;/td&gt;&lt;td&gt;(229)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;All About Attitude: Building Blocks for Opinion, Reputation, and NPC Personalities&lt;/td&gt;&lt;td&gt;(249)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;Understanding Intelligence in Games using Player Traces and Interactive Player Graphs&lt;/td&gt;&lt;td&gt;(265)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Goal-Oriented Plan Merging&lt;/td&gt;&lt;td&gt;(281)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Beyond A*: IDA* and Fringe Search&lt;/td&gt;&lt;td&gt;(289)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 AUDIO (295)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(297)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Audio Signal Processing Using Programmable Graphics Hardware&lt;/td&gt;&lt;td&gt;(299)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;MultiStream - The Art of Writing a Next-Gen Audio Engine&lt;/td&gt;&lt;td&gt;(305)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Listen Carefully, You Probably Won't Hear This Again&lt;/td&gt;&lt;td&gt;(321)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Real-Time Audio Effects Applied&lt;/td&gt;&lt;td&gt;(331)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Context-Driven, Layered Mixing&lt;/td&gt;&lt;td&gt;(341)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 5 GRAPHICS (349)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(351)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Advanced Particle Deposition&lt;/td&gt;&lt;td&gt;(353)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Reducing Cumulative Errors in Skeletal Animations&lt;/td&gt;&lt;td&gt;(365)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;An Alternative Model for Shading of Diffuse Light for Rough Materials&lt;/td&gt;&lt;td&gt;(373)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;High-Performance Subdivision Surfaces&lt;/td&gt;&lt;td&gt;(381)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Animating Relief Impostors Using Radial Basis Functions Textures&lt;/td&gt;&lt;td&gt;(401)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;Clipmapping on SM1.1 and Higher&lt;/td&gt;&lt;td&gt;(413)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;An Advanced Decal System&lt;/td&gt;&lt;td&gt;(423)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Mapping Large Textures for Outdoor Terrain Rendering&lt;/td&gt;&lt;td&gt;(435)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.9&lt;/td&gt;&lt;td&gt;Art-Based Rendering with Graftal Impostors&lt;/td&gt;&lt;td&gt;(447)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.10&lt;/td&gt;&lt;td&gt;Cheap Talk: Dynamic Real-Time Lipsync&lt;/td&gt;&lt;td&gt;(455)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 6 NETWORKING AND MULTIPLAYER (463)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(465)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;High-Level Abstraction of Game World Synchronization&lt;/td&gt;&lt;td&gt;(467)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;Authentication for Online Games&lt;/td&gt;&lt;td&gt;(481)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Game Network Debugging with Smart Packet Sniffers&lt;/td&gt;&lt;td&gt;(491)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 7 SCRIPTING AND DATA-DRIVEN SYSTEMS (499)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(50)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.1&lt;/td&gt;&lt;td&gt;Automatic Lua Binding System&lt;/td&gt;&lt;td&gt;(503)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.2&lt;/td&gt;&lt;td&gt;Serializing C++ Objects into a Database Using Introspection&lt;/td&gt;&lt;td&gt;(517)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.3&lt;/td&gt;&lt;td&gt;Dataports&lt;/td&gt;&lt;td&gt;(535)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.4&lt;/td&gt;&lt;td&gt;Support Your Local Artist: Adding Shaders to Your Engine&lt;/td&gt;&lt;td&gt;(541)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.5&lt;/td&gt;&lt;td&gt;Dance with Python's AST&lt;/td&gt;&lt;td&gt;(555)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the CD-ROM&lt;/td&gt;&lt;td&gt;(561)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Index&lt;/td&gt;&lt;td&gt;(563)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h1 style="background-color: #f2f2f2"&gt;Game Programming Gems 8&lt;/h1&gt;
&lt;h2&gt;Section 1 Graphics (1)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(1)&lt;/td&gt;&lt;tr&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Fast Font Rendering with Instancing&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;Principles and Practice of Screen Space Ambient Occlusion&lt;/td&gt;&lt;td&gt;(12)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Multi-Resolution Deferred Shading&lt;/td&gt;&lt;td&gt;(32)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;View Frustum Culling of Catmull-Clark Patches in DirectX 11&lt;/td&gt;&lt;td&gt;(39)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;Ambient Occlusion Using DirectX Compute Shader&lt;/td&gt;&lt;td&gt;(50)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;Eye-View Pixel Anti-Aliasing for Irregular Shadow Mapping&lt;/td&gt;&lt;td&gt;(74)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Overlapped Execution on Programmable Graphics Hardware&lt;/td&gt;&lt;td&gt;(90)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Techniques for Effective Vertex and Fragment Shading on the SPUs&lt;/td&gt;&lt;td&gt;(101)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;Section 2 Physics and Animation (119)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(119)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;A Versatile and Interactive Anatomical Human Face Model&lt;/td&gt;&lt;td&gt;(121)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Curved Paths for Seamless Character Animation&lt;/td&gt;&lt;td&gt;(132)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Non-Iterative, Closed-Form, Inverse Kinematic Chain Solver (NCF IK)&lt;/td&gt;&lt;td&gt; (141)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Particle Swam Optimization for Game Programming&lt;/td&gt;&lt;td&gt;(152)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Improved Numerical Integration with Analytical Techniques&lt;/td&gt;&lt;td&gt;(168)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;What a Drag: Modelling Realistic Three-Dimensional Air and Fluid Resistance&lt;/td&gt;&lt;td&gt;(183)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;td&gt;Application of Quasi-Fluid Dynamics for Arbitrary Closed Meshes&lt;/td&gt;&lt;td&gt;(194)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.8&lt;/td&gt;&lt;td&gt;Approximate Convex Decomposition for Real-Time Collision Detection&lt;/td&gt;&lt;td&gt;(202)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;Section 3 AI (211)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(211)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;AI Level of Detail for Really Large Worlds&lt;/td&gt;&lt;td&gt;(213)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;A Pattern-Based Approach to Modular AI for Games&lt;/td&gt;&lt;td&gt;(232)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Automated Navigation Mesh Generation Using Advanced Growth-Based Techniques&lt;/td&gt;&lt;td&gt;(244)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;A Practical Spatial Architecture for Animal and Agent Navigation&lt;/td&gt;&lt;td&gt;(256)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;Applying Control Theory to Game AI and Physics&lt;/td&gt;&lt;td&gt;(264)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Adaptive Tactic Selection in First-Person Shooter (FPS) Games&lt;/td&gt;&lt;td&gt;(279)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Embracing Chaos Theory: Generating Apparent Unpredictability through Deterministic Systems&lt;/td&gt;&lt;td&gt;(288)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Needs-Based AI&lt;/td&gt;&lt;td&gt;(302)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.9&lt;/td&gt;&lt;td&gt;A Framework for Emotional Digital Actors&lt;/td&gt;&lt;td&gt;(312)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.10&lt;/td&gt;&lt;td&gt;Scalable Dialog Authoring&lt;/td&gt;&lt;td&gt;(323)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.11&lt;/td&gt;&lt;td&gt;Graph-Based Data Mining for Player Trace Analysis in MMORPGs&lt;/td&gt;&lt;td&gt;(335)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;Section 4 General Programming (353)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(353)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Fast-IsA&lt;/td&gt;&lt;td&gt;(355)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Registered Variables&lt;/td&gt;&lt;td&gt;(363)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Efficient and Scalable Multi-Core Programming&lt;/td&gt;&lt;td&gt;(373)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Game Optimization through the Lens of Memory and Data Access&lt;/td&gt;&lt;td&gt;(385)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Stack Allocation&lt;/td&gt;&lt;td&gt;(393)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Design and Implementation of an In-Game Memory Profiler&lt;/td&gt;&lt;td&gt;(402)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;A More Informative Error Log Generator&lt;/td&gt;&lt;td&gt;(409)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Code Coverage for QA&lt;/td&gt;&lt;td&gt;(416)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.9&lt;/td&gt;&lt;td&gt;Domain-Specific Languages in Game Engines&lt;/td&gt;&lt;td&gt;(428)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.10&lt;/td&gt;&lt;td&gt;A Flexible User Interface Layout system for Divergent Environments&lt;/td&gt;&lt;td&gt;(442)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.11&lt;/td&gt;&lt;td&gt;Road Creation for Projectable Terrain Meshes&lt;/td&gt;&lt;td&gt;(453)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.12&lt;/td&gt;&lt;td&gt;Developing for Digital Drawing Tables&lt;/td&gt;&lt;td&gt;(462)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.13&lt;/td&gt;&lt;td&gt;Creating a Multi-Threaded Actor-Based Architecture using Intel® Threading Building Blocks&lt;/td&gt;&lt;td&gt;(473)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;Section 5 Networking and Multiplayer (485)  &lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(485)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Secure Channel Communication&lt;/td&gt;&lt;td&gt;(487)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Social Networks in Games: Playing with Your Facebook Friends&lt;/td&gt;&lt;td&gt;(498)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Asynchronous I/O for Scalable Game Servers&lt;/td&gt;&lt;td&gt;(506)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Introduction to 3D Streaming Technology in Massively Multiplayer Online Games&lt;/td&gt;&lt;td&gt;(514)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;Section 6 Audio (539)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(539)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;A Practical DSP Radio Effect&lt;/td&gt;&lt;td&gt;(542)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;Empowering Your Audio Teams with a Great Engine&lt;/td&gt;&lt;td&gt;(553)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Real-Time Sound Synthesis for Rigid Bodies&lt;/td&gt;&lt;td&gt;(563)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;Section 7 General Purpose Computing on GPUs (573)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(573)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.1&lt;/td&gt;&lt;td&gt;Using Heterogenous Parallel Architecture with OpenCL&lt;/td&gt;&lt;td&gt;(575)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.2&lt;/td&gt;&lt;td&gt;PhysX CPU Rigid Bodies in Batman: Arkham Asylum&lt;/td&gt;&lt;td&gt;(590)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.3&lt;/td&gt;&lt;td&gt;Fast GPU Fluid Simulation in PhysX&lt;/td&gt;&lt;td&gt;(602)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Index&lt;/td&gt;&lt;td&gt;(616)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h1 style="background-color: #f2f2f2"&gt;Best of Game Programming Gems&lt;/h1&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Acknowledgments&lt;/td&gt;&lt;td&gt;(ix)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Authors&lt;/td&gt;&lt;td&gt;(xi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(xxv)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 1 GENERAL INFORMATION (1)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;The Science of Debugging Games&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;Finding Redeeming Value in C-Style Macros&lt;/td&gt;&lt;td&gt;(17)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Inline Functions vs Macros&lt;/td&gt;&lt;td&gt;(29)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Squeezing More Out of Assaert&lt;/td&gt;&lt;td&gt;(35)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;Programming with Abstract Interfaces&lt;/td&gt;&lt;td&gt;(41)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;The Beauty of Weak References and Null Objects&lt;/td&gt;&lt;td&gt;(49)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Using the STL in Game Programming&lt;/td&gt;&lt;td&gt;(57)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Custom STL Allocators&lt;/td&gt;&lt;td&gt;(73)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Optimizations for C++ Games&lt;/td&gt;&lt;td&gt;(83)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Real-Time Hierarchical Profiling&lt;/td&gt;&lt;td&gt;(95)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.11&lt;/td&gt;&lt;td&gt;A Generic Tree Container in C++&lt;/td&gt;&lt;td&gt;(103)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.12&lt;/td&gt;&lt;td&gt;Lock-Free Algorithms&lt;/td&gt;&lt;td&gt;(113)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.13&lt;/td&gt;&lt;td&gt;Utilizing Multicore Processors with OpenMP&lt;/td&gt;&lt;td&gt;(125)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATH AND PHYSICS (133)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;More Approximations to Trigonometric Functions&lt;/td&gt;&lt;td&gt;(135)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Faster Quaternion Interpolation Using Approximations&lt;/td&gt;&lt;td&gt;(153)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Quaternion Compression&lt;/td&gt;&lt;td&gt;(175)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Zobrist Hash Using the Mersenne Twister&lt;/td&gt;&lt;td&gt;(181)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Solving Accuracy Problems in Large World Coordinates&lt;/td&gt;&lt;td&gt;(187)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Writing a Verlet-Based Physics Engine&lt;/td&gt;&lt;td&gt;(201)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;td&gt;Constraints in Rigid Body Dynamics&lt;/td&gt;&lt;td&gt;(211)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.8&lt;/td&gt;&lt;td&gt;The Jacobian Transpose Method for Inverse Kinematics&lt;/td&gt;&lt;td&gt;(223)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 ARTIFICIAL INTELLIGENCE (235)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;The Basics of A* for Path Planning&lt;/td&gt;&lt;td&gt;(237)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;A* Aesthetic Optimizations&lt;/td&gt;&lt;td&gt;(247)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;A* Speed Optimizations&lt;/td&gt;&lt;td&gt;(255)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;Tactical Path-Finding with A&lt;/td&gt;&lt;td&gt; (271)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;A Fast Approach to Navigation Meshes&lt;/td&gt;&lt;td&gt;(285)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Flocking: A Simple Technique for Simulating Group Behavior&lt;/td&gt;&lt;td&gt;(297)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;A Finite-State Machine Class&lt;/td&gt;&lt;td&gt;(311)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Implementing Practical Planning for Game AI&lt;/td&gt;&lt;td&gt;(323)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 GRAPHICS (339)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;T-Junction Elimination and Retriangulation&lt;/td&gt;&lt;td&gt;(341)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Filling the Gaps: Advanced Animation Using Stitching and Skinning&lt;/td&gt;&lt;td&gt;(347)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Improved Skin Deformation Using Kinematic Skeletons&lt;/td&gt;&lt;td&gt;(355)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Motion Capture Data Compression&lt;/td&gt;&lt;td&gt;(363)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Compressed Axis-Aligned Bounding Box Trees&lt;/td&gt;&lt;td&gt;(371)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Textures as Lookup Tables for Per-Pixel Lighting Computations&lt;/td&gt;&lt;td&gt;(377)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;Methods for Dynamic, Photorealistic Terrain Lightning&lt;/td&gt;&lt;td&gt;(387)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Practical Sky Rendering for Games&lt;/td&gt;&lt;td&gt;(399)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.9&lt;/td&gt;&lt;td&gt;Powerful Explosion Effects using Billboard Particles&lt;/td&gt;&lt;td&gt;(411)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.10&lt;/td&gt;&lt;td&gt;Rendering Handcrafted Shading Models&lt;/td&gt;&lt;td&gt;(421)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 5 NETWORKING (427)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Overcoming Network Address Translation in Peer-to-Peer Communications&lt;/td&gt;&lt;td&gt;(429)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Minimizing Latency in Real-Time Strategy Games&lt;/td&gt;&lt;td&gt;(451)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Real-Time Strategy Network Protocol&lt;/td&gt;&lt;td&gt;(459)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Secure Sockets&lt;/td&gt;&lt;td&gt;(469)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Bit Packing: A Network Compression Technique&lt;/td&gt;&lt;td&gt;(481)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 6 AUDIO (489)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;A Basic Music Sequencer for Games&lt;/td&gt;&lt;td&gt;(491)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;Audio Compression with Ogg Vorbis&lt;/td&gt;&lt;td&gt;(503)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Using 3D Surfaces as Audio Emitters&lt;/td&gt;&lt;td&gt;(511)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.4&lt;/td&gt;&lt;td&gt;Introduction to Single-Speaker Speech Recognition&lt;/td&gt;&lt;td&gt;(521)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.5&lt;/td&gt;&lt;td&gt;A Technique to instantaneously Reuse Voices in a Sample-Based Synthesizer&lt;/td&gt;&lt;td&gt;(531)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Index&lt;/td&gt;&lt;td&gt;(535)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/S9F_ugKi_qE" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/2011/05/28/game-programming-gems-table-of-contents</feedburner:origLink></entry>
 
 <entry>
   <title>Game Programming Gems 8, Table of Contents</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/tDjl-M64wmQ/game-programming-gems-8" />
   <updated>2011-05-28T00:00:00-07:00</updated>
   <id>hhttp://zolomon.github.com/2011/05/28/game-programming-gems-8</id>
   <content type="html">&lt;h2&gt;Section 1 Graphics (1)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(1)&lt;/td&gt;&lt;tr&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Fast Font Rendering with Instancing&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;Principles and Practice of Screen Space Ambient Occlusion&lt;/td&gt;&lt;td&gt;(12)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Multi-Resolution Deferred Shading&lt;/td&gt;&lt;td&gt;(32)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;View Frustum Culling of Catmull-Clark Patches in DirectX 11&lt;/td&gt;&lt;td&gt;(39)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;Ambient Occlusion Using DirectX Compute Shader&lt;/td&gt;&lt;td&gt;(50)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;Eye-View Pixel Anti-Aliasing for Irregular Shadow Mapping&lt;/td&gt;&lt;td&gt;(74)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Overlapped Execution on Programmable Graphics Hardware&lt;/td&gt;&lt;td&gt;(90)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Techniques for Effective Vertex and Fragment Shading on the SPUs&lt;/td&gt;&lt;td&gt;(101)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;Section 2 Physics and Animation (119)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(119)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;A Versatile and Interactive Anatomical Human Face Model&lt;/td&gt;&lt;td&gt;(121)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Curved Paths for Seamless Character Animation&lt;/td&gt;&lt;td&gt;(132)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Non-Iterative, Closed-Form, Inverse Kinematic Chain Solver (NCF IK)&lt;/td&gt;&lt;td&gt; (141)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Particle Swam Optimization for Game Programming&lt;/td&gt;&lt;td&gt;(152)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Improved Numerical Integration with Analytical Techniques&lt;/td&gt;&lt;td&gt;(168)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;What a Drag: Modelling Realistic Three-Dimensional Air and Fluid Resistance&lt;/td&gt;&lt;td&gt;(183)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;td&gt;Application of Quasi-Fluid Dynamics for Arbitrary Closed Meshes&lt;/td&gt;&lt;td&gt;(194)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.8&lt;/td&gt;&lt;td&gt;Approximate Convex Decomposition for Real-Time Collision Detection&lt;/td&gt;&lt;td&gt;(202)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;Section 3 AI (211)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(211)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;AI Level of Detail for Really Large Worlds&lt;/td&gt;&lt;td&gt;(213)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;A Pattern-Based Approach to Modular AI for Games&lt;/td&gt;&lt;td&gt;(232)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Automated Navigation Mesh Generation Using Advanced Growth-Based Techniques&lt;/td&gt;&lt;td&gt;(244)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;A Practical Spatial Architecture for Animal and Agent Navigation&lt;/td&gt;&lt;td&gt;(256)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;Applying Control Theory to Game AI and Physics&lt;/td&gt;&lt;td&gt;(264)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Adaptive Tactic Selection in First-Person Shooter (FPS) Games&lt;/td&gt;&lt;td&gt;(279)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Embracing Chaos Theory: Generating Apparent Unpredictability through Deterministic Systems&lt;/td&gt;&lt;td&gt;(288)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Needs-Based AI&lt;/td&gt;&lt;td&gt;(302)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.9&lt;/td&gt;&lt;td&gt;A Framework for Emotional Digital Actors&lt;/td&gt;&lt;td&gt;(312)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.10&lt;/td&gt;&lt;td&gt;Scalable Dialog Authoring&lt;/td&gt;&lt;td&gt;(323)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.11&lt;/td&gt;&lt;td&gt;Graph-Based Data Mining for Player Trace Analysis in MMORPGs&lt;/td&gt;&lt;td&gt;(335)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;Section 4 General Programming (353)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(353)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Fast-IsA&lt;/td&gt;&lt;td&gt;(355)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Registered Variables&lt;/td&gt;&lt;td&gt;(363)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Efficient and Scalable Multi-Core Programming&lt;/td&gt;&lt;td&gt;(373)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Game Optimization through the Lens of Memory and Data Access&lt;/td&gt;&lt;td&gt;(385)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Stack Allocation&lt;/td&gt;&lt;td&gt;(393)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Design and Implementation of an In-Game Memory Profiler&lt;/td&gt;&lt;td&gt;(402)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;A More Informative Error Log Generator&lt;/td&gt;&lt;td&gt;(409)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Code Coverage for QA&lt;/td&gt;&lt;td&gt;(416)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.9&lt;/td&gt;&lt;td&gt;Domain-Specific Languages in Game Engines&lt;/td&gt;&lt;td&gt;(428)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.10&lt;/td&gt;&lt;td&gt;A Flexible User Interface Layout system for Divergent Environments&lt;/td&gt;&lt;td&gt;(442)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.11&lt;/td&gt;&lt;td&gt;Road Creation for Projectable Terrain Meshes&lt;/td&gt;&lt;td&gt;(453)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.12&lt;/td&gt;&lt;td&gt;Developing for Digital Drawing Tables&lt;/td&gt;&lt;td&gt;(462)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.13&lt;/td&gt;&lt;td&gt;Creating a Multi-Threaded Actor-Based Architecture using Intel® Threading Building Blocks&lt;/td&gt;&lt;td&gt;(473)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;Section 5 Networking and Multiplayer (485)  &lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(485)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Secure Channel Communication&lt;/td&gt;&lt;td&gt;(487)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Social Networks in Games: Playing with Your Facebook Friends&lt;/td&gt;&lt;td&gt;(498)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Asynchronous I/O for Scalable Game Servers&lt;/td&gt;&lt;td&gt;(506)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Introduction to 3D Streaming Technology in Massively Multiplayer Online Games&lt;/td&gt;&lt;td&gt;(514)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;Section 6 Audio (539)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(539)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;A Practical DSP Radio Effect&lt;/td&gt;&lt;td&gt;(542)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;Empowering Your Audio Teams with a Great Engine&lt;/td&gt;&lt;td&gt;(553)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Real-Time Sound Synthesis for Rigid Bodies&lt;/td&gt;&lt;td&gt;(563)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;Section 7 General Purpose Computing on GPUs (573)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(573)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.1&lt;/td&gt;&lt;td&gt;Using Heterogenous Parallel Architecture with OpenCL&lt;/td&gt;&lt;td&gt;(575)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.2&lt;/td&gt;&lt;td&gt;PhysX CPU Rigid Bodies in Batman: Arkham Asylum&lt;/td&gt;&lt;td&gt;(590)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.3&lt;/td&gt;&lt;td&gt;Fast GPU Fluid Simulation in PhysX&lt;/td&gt;&lt;td&gt;(602)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Index&lt;/td&gt;&lt;td&gt;(616)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/tDjl-M64wmQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/2011/05/28/game-programming-gems-8</feedburner:origLink></entry>
 
 <entry>
   <title>Game Programming Gems 7, Table of Contents</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/P0_93LjAZfI/game-programming-gems-7" />
   <updated>2011-05-28T00:00:00-07:00</updated>
   <id>hhttp://zolomon.github.com/2011/05/28/game-programming-gems-7</id>
   <content type="html">&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Preface&lt;/td&gt;&lt;td&gt;(ix)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Cover Image&lt;/td&gt;&lt;td&gt;(xiii)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Acknowledgements&lt;/td&gt;&lt;td&gt;(xv)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Contributor Bios&lt;/td&gt;&lt;td&gt;(xvii)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 1 GENERAL PROGRAMMING (1)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Efficient Cache Replacement Using the Age and Cost Metrics&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;High Performance Heap Allocator&lt;/td&gt;&lt;td&gt;(15)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Optical Flow for Video Games Played with Webcams&lt;/td&gt;&lt;td&gt;(25)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Design and Implementation of a Multi-Platform Threading Engine&lt;/td&gt;&lt;td&gt;(35)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;For Bees and Gamers: How to Handle Hexagonal Tiles&lt;/td&gt;&lt;td&gt;(47)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;A Sketch-Based Interface to Real-Time Strategy Games Based on a Cellular Automaton&lt;/td&gt;&lt;td&gt;(59)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Foot Navigation Technique for First-Person Shooting Games&lt;/td&gt;&lt;td&gt;(69)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Deferred Function Call Invocation System&lt;/td&gt;&lt;td&gt;(81)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Multithread Job and Dependancy System&lt;/td&gt;&lt;td&gt;(87)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Advanced Debugging Techniques&lt;/td&gt;&lt;td&gt;(97)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATH AND PHYSICS (107)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(10&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Random Number Generation&lt;/td&gt;&lt;td&gt;(113)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Fast Generic Ray Queries for Games&lt;/td&gt;&lt;td&gt;(127)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Fast Rigid-Body Collision Detection using Farthest Feature Maps&lt;/td&gt;&lt;td&gt;(143)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Using Projective Space to Improve Precision of Geometric Computations&lt;/td&gt;&lt;td&gt;(153)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;XenoCollide: Complex Collision Made Simple&lt;/td&gt;&lt;td&gt;(165)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Efficient COllision Detection Using Transformation Semantics&lt;/td&gt;&lt;td&gt;(179)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;td&gt;Trigonemtric Splines&lt;/td&gt;&lt;td&gt;(191)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.8&lt;/td&gt;&lt;td&gt;Using Gaussian Randomness to Realistically Vary Projectile Paths&lt;/td&gt;&lt;td&gt;(199)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 AI (205)&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(20&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;Creating Interesting Agents with Behavior Cloning&lt;/td&gt;&lt;td&gt;(209)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Designing a Realistic and Unified Agent-Sesning Model&lt;/td&gt;&lt;td&gt;(217)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Managing AI Algorithmic Complexity: Generic Programming Apprach&lt;/td&gt;&lt;td&gt;(229)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;All About Attitude: Building Blocks for Opinion, Reputation, and NPC Personalities&lt;/td&gt;&lt;td&gt;(249)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;Understanding Intelligence in Games using Player Traces and Interactive Player Graphs&lt;/td&gt;&lt;td&gt;(265)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Goal-Oriented Plan Merging&lt;/td&gt;&lt;td&gt;(281)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Beyond A*: IDA* and Fringe Search&lt;/td&gt;&lt;td&gt;(289)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 AUDIO (295)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(297)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Audio Signal Processing Using Programmable Graphics Hardware&lt;/td&gt;&lt;td&gt;(299)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;MultiStream - The Art of Writing a Next-Gen Audio Engine&lt;/td&gt;&lt;td&gt;(305)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Listen Carefully, You Probably Won't Hear This Again&lt;/td&gt;&lt;td&gt;(321)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Real-Time Audio Effects Applied&lt;/td&gt;&lt;td&gt;(331)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Context-Driven, Layered Mixing&lt;/td&gt;&lt;td&gt;(341)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 5 GRAPHICS (349)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(351)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Advanced Particle Deposition&lt;/td&gt;&lt;td&gt;(353)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Reducing Cumulative Errors in Skeletal Animations&lt;/td&gt;&lt;td&gt;(365)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;An Alternative Model for Shading of Diffuse Light for Rough Materials&lt;/td&gt;&lt;td&gt;(373)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;High-Performance Subdivision Surfaces&lt;/td&gt;&lt;td&gt;(381)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Animating Relief Impostors Using Radial Basis Functions Textures&lt;/td&gt;&lt;td&gt;(401)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;Clipmapping on SM1.1 and Higher&lt;/td&gt;&lt;td&gt;(413)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;An Advanced Decal System&lt;/td&gt;&lt;td&gt;(423)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Mapping Large Textures for Outdoor Terrain Rendering&lt;/td&gt;&lt;td&gt;(435)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.9&lt;/td&gt;&lt;td&gt;Art-Based Rendering with Graftal Impostors&lt;/td&gt;&lt;td&gt;(447)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.10&lt;/td&gt;&lt;td&gt;Cheap Talk: Dynamic Real-Time Lipsync&lt;/td&gt;&lt;td&gt;(455)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 6 NETWORKING AND MULTIPLAYER (463)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(465)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;High-Level Abstraction of Game World Synchronization&lt;/td&gt;&lt;td&gt;(467)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;Authentication for Online Games&lt;/td&gt;&lt;td&gt;(481)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Game Network Debugging with Smart Packet Sniffers&lt;/td&gt;&lt;td&gt;(491)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 7 SCRIPTING AND DATA-DRIVEN SYSTEMS (499)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(50)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.1&lt;/td&gt;&lt;td&gt;Automatic Lua Binding System&lt;/td&gt;&lt;td&gt;(503)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.2&lt;/td&gt;&lt;td&gt;Serializing C++ Objects into a Database Using Introspection&lt;/td&gt;&lt;td&gt;(517)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.3&lt;/td&gt;&lt;td&gt;Dataports&lt;/td&gt;&lt;td&gt;(535)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.4&lt;/td&gt;&lt;td&gt;Support Your Local Artist: Adding Shaders to Your Engine&lt;/td&gt;&lt;td&gt;(541)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.5&lt;/td&gt;&lt;td&gt;Dance with Python's AST&lt;/td&gt;&lt;td&gt;(555)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the CD-ROM&lt;/td&gt;&lt;td&gt;(561)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Index&lt;/td&gt;&lt;td&gt;(563)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/P0_93LjAZfI" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/2011/05/28/game-programming-gems-7</feedburner:origLink></entry>
 
 <entry>
   <title>Game Programming Gems 6, Table of Contents</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/ZnceC3tYhkk/game-programming-gems-6" />
   <updated>2011-05-28T00:00:00-07:00</updated>
   <id>hhttp://zolomon.github.com/2011/05/28/game-programming-gems-6</id>
   <content type="html">&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Foreword&lt;/td&gt;&lt;td&gt;(xi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Preface&lt;/td&gt;&lt;td&gt;(xv)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Cover Image&lt;/td&gt;&lt;td&gt;(xxi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Contributor Bios&lt;/td&gt;&lt;td&gt;(xxiii)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 1 GENERAL PROGRAMMING (1)&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Lock-Free Algorithms&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;Utilizing Multicore Processors with OpenMP&lt;/td&gt;&lt;td&gt;(17)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Computer Vision in Games Using the OpenCV Library&lt;/td&gt;&lt;td&gt;(25)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Geographic Grid Registration of Game Objects&lt;/td&gt;&lt;td&gt;(39)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;BSP Techniques&lt;/td&gt;&lt;td&gt;(49)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;Closest-String Matching Algorithm&lt;/td&gt;&lt;td&gt;(69)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Using CppUnit To Implement Unit Testing&lt;/td&gt;&lt;td&gt;(79)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Fingerprinting Pre-Release Builds To Deter and Detect Piracy&lt;/td&gt;&lt;td&gt;(97)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Faster File Loading with Access-Based File Reordering&lt;/td&gt;&lt;td&gt;(103)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Stay in the Game: Asset Hotloading for Fast Iteration&lt;/td&gt;&lt;td&gt;(109)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATHEMATICS AND PHYSICS (117) &lt;/h2&gt; 
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(119)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Floating-Point Tricks&lt;/td&gt;&lt;td&gt;(121)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;GPU Computation in Projective Space Using Homogeneous Coordinates&lt;/td&gt;&lt;td&gt;(137)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Solving Systems of Linear Equations Using the Cross Product&lt;/td&gt;&lt;td&gt;(149)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Sequence Indexing for Game Development&lt;/td&gt;&lt;td&gt;(161)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Exact Buoyancy for Polyhedra&lt;/td&gt;&lt;td&gt;(175)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Real-Time Particle-Based Fluid Simulation with Rigid Body Interaction&lt;/td&gt;&lt;td&gt;(189)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 ARTIFICIAL INTELLIGENCE (207)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(209)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;Applying Model-Based Decision-Making Methods to Games: Applying the Locust AI Engine to QuakeŽ III&lt;/td&gt;&lt;td&gt;(211)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Achieving Coordination with Autonomous NPCs&lt;/td&gt;&lt;td&gt;(223)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Behavior-Based Robotic Architectures for Games&lt;/td&gt;&lt;td&gt;(235)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;Constructing a Goal-Oriented Robot for Unreal Tournament Using Fuzzy Sensors, Finite-State Machines, and Extended Behavior Networks&lt;/td&gt;&lt;td&gt;(245)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;A Goal-Oriented Unreal Bot: Building a Game Agent with Goal-Oriented Behavior and Simple Personality Using Extended Behavior Networks&lt;/td&gt;&lt;td&gt;(259)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Short-Term Memory Modeling Using a Support Vector Machine&lt;/td&gt;&lt;td&gt;(273)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Using the Quantified Judgment Model for Engagement Analysis&lt;/td&gt;&lt;td&gt;(283)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Designing a Multilayer, Pluggable AI Engine&lt;/td&gt;&lt;td&gt;(291)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.9&lt;/td&gt;&lt;td&gt;A Fuzzy-Control Approach to Managing Scene Complexity&lt;/td&gt;&lt;td&gt;(307)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 SCRIPTING AND DATA-DRIVEN SYSTEMS (317)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(319)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Scripting Language Survey&lt;/td&gt;&lt;td&gt;(323)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Binding C/C++ Objects to Lua&lt;/td&gt;&lt;td&gt;(341)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Programming Advanced Control Mechanisms with Lua Coroutines&lt;/td&gt;&lt;td&gt;(357)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Managing High-Level Script Execution Within Multithreaded Environments&lt;/td&gt;&lt;td&gt;(371)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Exposing Actor Properties Using Nonintrusive Proxies&lt;/td&gt;&lt;td&gt;(383)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Game Object Component System&lt;/td&gt;&lt;td&gt;(393)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 5 GRAPHICS (405)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(407)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Synthesis of Realistic Idle Motion for Interactive Characters&lt;/td&gt;&lt;td&gt;(409)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Spatial Partitioning Using an Adaptive Binary Tree&lt;/td&gt;&lt;td&gt;(423)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Enhanced Object Culling with (Almost) Oriented Bounding Boxes&lt;/td&gt;&lt;td&gt;(437)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Skin Splitting for Optimal Rendering&lt;/td&gt;&lt;td&gt;(449)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;GPU Terrain Rendering&lt;/td&gt;&lt;td&gt;(461)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;Interactive Fluid Dynamics and Rendering on the GPU&lt;/td&gt;&lt;td&gt;(473)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;Fast Per-Pixel Lighting with Many Lights&lt;/td&gt;&lt;td&gt;(489)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Rendering Road Signs Sharply&lt;/td&gt;&lt;td&gt;(501)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.9&lt;/td&gt;&lt;td&gt;Practical Sky Rendering for Games&lt;/td&gt;&lt;td&gt;(517)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.10&lt;/td&gt;&lt;td&gt;High Dynamic Range Rendering Using OpenGL Frame Buffer Objects&lt;/td&gt;&lt;td&gt;(529)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;SECTION 6 AUDIO (537)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(539)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;Real-Time Sound Generation from Deformable Meshes&lt;/td&gt;&lt;td&gt;(541)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;A Lightweight Generator for Real-Time Sound Effects&lt;/td&gt;&lt;td&gt;(549)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Real-Time Mixing Busses&lt;/td&gt;&lt;td&gt;(555)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.4&lt;/td&gt;&lt;td&gt;Potentially Audible Sets&lt;/td&gt;&lt;td&gt;(561)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.5&lt;/td&gt;&lt;td&gt;A Cheap Doppler Effect&lt;/td&gt;&lt;td&gt;(573)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.6&lt;/td&gt;&lt;td&gt;Faking Real-Time DSP Effects&lt;/td&gt;&lt;td&gt;(583)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 7 NETWORK AND MULTIPLAYER (589)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(591)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.1&lt;/td&gt;&lt;td&gt;Dynamically Adaptive Streaming of 3D Data for Animated Characters&lt;/td&gt;&lt;td&gt;(593)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.2&lt;/td&gt;&lt;td&gt;Complex Systems-Based High-Level Architecture for Massively Multiplayer Games&lt;/td&gt;&lt;td&gt;(607)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.3&lt;/td&gt;&lt;td&gt;Generating Globally Unique Identifiers for Game Objects&lt;/td&gt;&lt;td&gt;(623)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.4&lt;/td&gt;&lt;td&gt;Massively Multiplayer Online Prototype Utilizing Second Life for Game Concept Prototyping&lt;/td&gt;&lt;td&gt;(629)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.5&lt;/td&gt;&lt;td&gt;Reliable Peer-to-Peer Gaming Connections Penetrating NAT&lt;/td&gt;&lt;td&gt;(641)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the CD-ROM&lt;/td&gt;&lt;td&gt;(651)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Index&lt;/td&gt;&lt;td&gt;(653)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/ZnceC3tYhkk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/2011/05/28/game-programming-gems-6</feedburner:origLink></entry>
 
 <entry>
   <title>Game Programming Gems 5, Table of Contents</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/acSMziCEoUk/game-programming-gems-5" />
   <updated>2011-05-28T00:00:00-07:00</updated>
   <id>hhttp://zolomon.github.com/2011/05/28/game-programming-gems-5</id>
   <content type="html">&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Foreword&lt;/td&gt;&lt;td&gt;(xi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Preface&lt;/td&gt;&lt;td&gt;(xv)&lt;/td&gt;&lt;/tr&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Cover Image&lt;/td&gt;&lt;td&gt;(xix)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Contributor Bios&lt;/td&gt;&lt;td&gt;(xxi)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 1 GENERAL PROGRAMMING (1)&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Context-Sensitive HUDs for Editors&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;Parsing Text Data in Games&lt;/td&gt;&lt;td&gt;(17)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Component Based Object Management&lt;/td&gt;&lt;td&gt;(25)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Using Templates for Reflection in C++&lt;/td&gt;&lt;td&gt;(39)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;Sphere Trees for Speedy BSPs&lt;/td&gt;&lt;td&gt;(55)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;Improved Frustum Culling&lt;/td&gt;&lt;td&gt;(65)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Generic Pager&lt;/td&gt;&lt;td&gt;(79)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Large-Scale Stack-Based State Machines&lt;/td&gt;&lt;td&gt;(93)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;CSG Construction Using BSP Trees&lt;/td&gt;&lt;td&gt;(103)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Building Lua into Games&lt;/td&gt;&lt;td&gt;(115)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.11&lt;/td&gt;&lt;td&gt;Improving Freelists with Policy Based Design&lt;/td&gt;&lt;td&gt;(129)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.12&lt;/td&gt;&lt;td&gt;A Real-Time Remote Debug Message Logger&lt;/td&gt;&lt;td&gt;(143)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.13&lt;/td&gt;&lt;td&gt;A Transparent Class Saving and Loading Trick&lt;/td&gt;&lt;td&gt;(149)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.14&lt;/td&gt;&lt;td&gt;An Effective Cache-Oblivious Implementation of the ABT Tree&lt;/td&gt;&lt;td&gt;(159)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.15&lt;/td&gt;&lt;td&gt;Visual Design of State Machines&lt;/td&gt;&lt;td&gt;(169)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.16&lt;/td&gt;&lt;td&gt;A Generic Component Library&lt;/td&gt;&lt;td&gt;(177)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.17&lt;/td&gt;&lt;td&gt;Choose Your Path-A Menu System&lt;/td&gt;&lt;td&gt;(189)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 2 MATHEMATICS (197)&lt;/h2&gt;
&lt;table&gt;
  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(199)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Using Geometric Algebra for Computer Graphics&lt;/td&gt;&lt;td&gt;(201)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Minimal Acceleration Hermite Curves&lt;/td&gt;&lt;td&gt;(225)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Spline-Based Time Control for Animation&lt;/td&gt;&lt;td&gt;(233)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Faster Quaternion Interpolation Using Approximations&lt;/td&gt;&lt;td&gt;(247)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Minimax Numerical Approximation&lt;/td&gt;&lt;td&gt;(269)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Oblique View Frustums for Mirrors and Portals&lt;/td&gt;&lt;td&gt;(281)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 3 ARTIFICIAL INTELLIGENCE (295)&lt;/h2&gt;
&lt;table&gt;
  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(297)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;Automatic Cover Finding with Navigation Meshes&lt;/td&gt;&lt;td&gt;(299)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Fast Target Ranking Using an Artificial Potential Field&lt;/td&gt;&lt;td&gt;(307)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Using Lanchester Attrition Models to Predict the Results of Combat&lt;/td&gt;&lt;td&gt;(317)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;Implementing Practical Planning for Game AI&lt;/td&gt;&lt;td&gt;(329)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;Optimizing a Decision Tree Query Algorithm for Multithreaded Architectures&lt;/td&gt;&lt;td&gt;(345)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Parallel AI Development with PVM&lt;/td&gt;&lt;td&gt;(353)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Beyond A&lt;/td&gt;&lt;td&gt; (367)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Advanced Pathfinding with Minimal Replanning Cost: Dynamic A Star (D*)&lt;/td&gt;&lt;td&gt;(383)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 4 PHYSICS (391)&lt;/h2&gt;
&lt;table&gt;
  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(393)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Back of the Envelope Aerodynamics for Game Physics&lt;/td&gt;&lt;td&gt;(395)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Dynamic Grass Simulation and Other Natural Effects&lt;/td&gt;&lt;td&gt;(411)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Realistic Cloth Animation Using the Mass-Spring Model&lt;/td&gt;&lt;td&gt;(421)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Practical Animation of Soft Bodies for Game Development: The Pressurized Soft-Body Model&lt;/td&gt;&lt;td&gt;(435)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Adding Life to Ragdoll Simulation Using Feedback Control Systems&lt;/td&gt;&lt;td&gt;(449)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Designing a Prescripted Physics System&lt;/td&gt;&lt;td&gt;(457)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;Prescripted Physics: Techniques and Applications&lt;/td&gt;&lt;td&gt;(473)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Realistic Camera Movement in a 3D Car Simulator&lt;/td&gt;&lt;td&gt;(483)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 5 GRAPHICS (495)&lt;/h2&gt;
&lt;table&gt;
  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(497)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Realistic Cloud Rendering on Modern GPUs&lt;/td&gt;&lt;td&gt;(499)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Let It Snow, Let It Snow, Let It Snow (and Rain&lt;/td&gt;&lt;td&gt; (507)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Widgets: Rendering Fast and Persistent Foliage&lt;/td&gt;&lt;td&gt;(515)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;2.5 Dimensional Impostors for Realistic Trees and Forests&lt;/td&gt;&lt;td&gt;(527)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Gridless Controllable Fire&lt;/td&gt;&lt;td&gt;(539)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;Powerful Explosion Effects Using Billboard Particles&lt;/td&gt;&lt;td&gt;(551)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;A Simple Method for Rendering Gemstones&lt;/td&gt;&lt;td&gt;(561)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Volumetric Post-Processing&lt;/td&gt;&lt;td&gt;(571)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.9&lt;/td&gt;&lt;td&gt;Procedural Level Generation&lt;/td&gt;&lt;td&gt;(579)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.10&lt;/td&gt;&lt;td&gt;Recombinant Shaders&lt;/td&gt;&lt;td&gt;(589)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 6 NETWORK AND MULTIPLAYER (599)&lt;/h2&gt;
&lt;table&gt;
  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(601)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;Keeping a Massively Multiplayer Online Game Massive, Online, and Persistent&lt;/td&gt;&lt;td&gt;(603)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;Implementing a Seamless World Server&lt;/td&gt;&lt;td&gt;(611)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Designing a Vulgarity Filtering System&lt;/td&gt;&lt;td&gt;(621)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.4&lt;/td&gt;&lt;td&gt;Fast and Efficient Implementation of a Remote Procedure Call System&lt;/td&gt;&lt;td&gt;(627)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.5&lt;/td&gt;&lt;td&gt;Overcoming Network Address Translation in Peer-to-Peer Communications&lt;/td&gt;&lt;td&gt;(643)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.6&lt;/td&gt;&lt;td&gt;A Reliable Messaging Protocol&lt;/td&gt;&lt;td&gt;(665)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.7&lt;/td&gt;&lt;td&gt;Safe Random Number Systems&lt;/td&gt;&lt;td&gt;(673)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.8&lt;/td&gt;&lt;td&gt;Secure by Design&lt;/td&gt;&lt;td&gt;(681)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt; SECTION 7 AUDIO (693)&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(695)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.1&lt;/td&gt;&lt;td&gt;Multithreaded Audio Programming Techniques&lt;/td&gt;&lt;td&gt;(697)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.2&lt;/td&gt;&lt;td&gt;Sound Management by Group&lt;/td&gt;&lt;td&gt;(713)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.3&lt;/td&gt;&lt;td&gt;Using 3D Surfaces as Audio Emitters&lt;/td&gt;&lt;td&gt;(721)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.4&lt;/td&gt;&lt;td&gt;Fast Environmental Reverb Based on Feedback Delay Networks&lt;/td&gt;&lt;td&gt;(729)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.5&lt;/td&gt;&lt;td&gt;Introduction to Single-Speaker Speech Recognition&lt;/td&gt;&lt;td&gt;(741)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the CD-ROM&lt;/td&gt;&lt;td&gt;(751)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Index&lt;/td&gt;&lt;td&gt;(753)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/acSMziCEoUk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/2011/05/28/game-programming-gems-5</feedburner:origLink></entry>
 
 <entry>
   <title>Game Programming Gems 4, Table of Contents</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/_43gb8BM8e8/game-programming-gems-4" />
   <updated>2011-05-28T00:00:00-07:00</updated>
   <id>hhttp://zolomon.github.com/2011/05/28/game-programming-gems-4</id>
   <content type="html">&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Foreword&lt;/td&gt;&lt;td&gt;(xi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Preface&lt;/td&gt;&lt;td&gt;(xv)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Acknowledgments&lt;/td&gt;&lt;td&gt;(xvii)&lt;/td&gt;&lt;/tr&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Cover Image&lt;/td&gt;&lt;td&gt;(xix)&lt;/td&gt;&lt;/tr&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Contributor Bios&lt;/td&gt;&lt;td&gt;(xxi)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;


&lt;h2&gt;SECTION 1 GENERAL PROGRAMMING (1)&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;  

  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;The Science of Debugging Games&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;An HTML-Based Logging and Debugging System&lt;/td&gt;&lt;td&gt;(19)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;The Clock: Keeping Your Finger on the Pulse of the Game&lt;/td&gt;&lt;td&gt;(27)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Designing and Maintaining Large Cross-Platform Libraries&lt;/td&gt;&lt;td&gt;(35)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;Fight Memory Fragmentation with Templated Freelists&lt;/td&gt;&lt;td&gt;(43)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;A Generic Tree Container in C++&lt;/td&gt;&lt;td&gt;(51)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;The Beauty of Weak References and Null Objects&lt;/td&gt;&lt;td&gt;(61)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;A System for Managing Game Entities&lt;/td&gt;&lt;td&gt;(69)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Address-Space Managed Dynamic Arrays for Windows and the Xbox&lt;/td&gt;&lt;td&gt;(85)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Critically Damped Ease-In/Ease-Out Smoothing&lt;/td&gt;&lt;td&gt;(95)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.11&lt;/td&gt;&lt;td&gt;A Flexible, On-the-Fly Object Manager&lt;/td&gt;&lt;td&gt;(103)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.12&lt;/td&gt;&lt;td&gt;Using Custom RTTI Properties to Stream and Edit Objects&lt;/td&gt;&lt;td&gt;(111)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.13&lt;/td&gt;&lt;td&gt;Using XML without Sacrificing Speed&lt;/td&gt;&lt;td&gt;(125)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATHEMATICS (137)&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(139)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Zobrist Hash Using the Mersenne Twister&lt;/td&gt;&lt;td&gt;(141)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Extracting Frustum and Camera Information&lt;/td&gt;&lt;td&gt;(147)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Solving Accuracy Problems in Large World Coordinates&lt;/td&gt;&lt;td&gt;(157)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Nonuniform Splines&lt;/td&gt;&lt;td&gt;(171)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Using the Covariance Matrix for Better-Fitting Bounding Objects&lt;/td&gt;&lt;td&gt;(183)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;The Jacobian Transpose Method for Inverse Kinematics&lt;/td&gt;&lt;td&gt;(193)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 PHYSICS (205)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(207)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;Ten Fingers of Death: Algorithms for Combat Killing&lt;/td&gt;&lt;td&gt;(209)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Vehicle Physics Simulation for CPU-Limited Systems&lt;/td&gt;&lt;td&gt;(221)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Writing a Verlet-Based Physics Engine&lt;/td&gt;&lt;td&gt;(231)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;Constraints in Rigid Body Dynamics&lt;/td&gt;&lt;td&gt;(241)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;Fast Contact Reduction for Dynamics Simulation&lt;/td&gt;&lt;td&gt;(253)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Interactive Water Surfaces&lt;/td&gt;&lt;td&gt;(265)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Fast Deformations with Multilayered Physics&lt;/td&gt;&lt;td&gt;(275)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Modal Analysis for Fast, Stable Deformation&lt;/td&gt;&lt;td&gt;(287)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 ARTIFICIAL INTELLIGENCE (299)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(301)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Third-Person Camera Navigation&lt;/td&gt;&lt;td&gt;(303)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Narrative Combat: Using AI to Enhance Tension in an Action Game&lt;/td&gt;&lt;td&gt;315&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;NPC Decision Making: Dealing with Randomness&lt;/td&gt;&lt;td&gt;(325)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;An Object-Oriented Utility-Based Decision Architecture&lt;/td&gt;&lt;td&gt;(337)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;A Distributed-Reasoning Voting Architecture&lt;/td&gt;&lt;td&gt;(345)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Attractors and Repulsors&lt;/td&gt;&lt;td&gt;(355)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;Advanced Wall Building for RTS Games&lt;/td&gt;&lt;td&gt;(365)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Artificial Neural Networks on Programmable Graphics Hardware&lt;/td&gt;&lt;td&gt;(373)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 5 GRAPHICS (379)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(381)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Poster Quality Screenshots&lt;/td&gt;&lt;td&gt;(383)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;GPU Shadow Volume Construction for Nonclosed Meshes&lt;/td&gt;&lt;td&gt;(393)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Perspective Shadow Maps&lt;/td&gt;&lt;td&gt;(399)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Combined Depth and ID-Based Shadow Buffers&lt;/td&gt;&lt;td&gt;(411)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Carving Static Shadows into Geometry&lt;/td&gt;&lt;td&gt;(427)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Techniques to Apply Team Colors to 3D Models&lt;/td&gt;&lt;td&gt;(451)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.9&lt;/td&gt;&lt;td&gt;Fast Sepia Tone Conversion&lt;/td&gt;&lt;td&gt;(461)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.10&lt;/td&gt;&lt;td&gt;Dynamic Gamma Using Sampled Scene Luminance&lt;/td&gt;&lt;td&gt;(465)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.11&lt;/td&gt;&lt;td&gt;Heat and Haze Post-Processing Effects&lt;/td&gt;&lt;td&gt;(477)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.13&lt;/td&gt;&lt;td&gt;Motion Capture Data Compression&lt;/td&gt;&lt;td&gt;(497)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.14&lt;/td&gt;&lt;td&gt;Fast Collision Detection for 3D Bones-Based Articulated Characters&lt;/td&gt;&lt;td&gt;(503)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.15&lt;/td&gt;&lt;td&gt;Terrain Occlusion Culling with Horizons&lt;/td&gt;&lt;td&gt;(515)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 6 NETWORK AND MULTIPLAYER (529)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(531)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;General Lobby Design and Development&lt;/td&gt;&lt;td&gt;(533)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;Thousands of Clients per Server&lt;/td&gt;&lt;td&gt;(541)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Efficient MMP Game State Storage&lt;/td&gt;&lt;td&gt;(555)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.4&lt;/td&gt;&lt;td&gt;Practical Application of Parallel-State Machines in a Client-Server Environment&lt;/td&gt;&lt;td&gt;(563)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.5&lt;/td&gt;&lt;td&gt;Bit Packing: A Network Compression Technique&lt;/td&gt;&lt;td&gt;(571)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.6&lt;/td&gt;&lt;td&gt;Time and Consistency Management for Multiserver-Based MMORPGs&lt;/td&gt;&lt;td&gt;(579)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 7 AUDIO (591)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(593)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.1&lt;/td&gt;&lt;td&gt;A Brief Introduction to OpenAL&lt;/td&gt;&lt;td&gt;(595)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.2&lt;/td&gt;&lt;td&gt;A Simple Real-Time Lip-Synching System&lt;/td&gt;&lt;td&gt;(607)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.3&lt;/td&gt;&lt;td&gt;Dynamic Variables and Audio Programming&lt;/td&gt;&lt;td&gt;(613)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.4&lt;/td&gt;&lt;td&gt;Creating an Audio Scripting System&lt;/td&gt;&lt;td&gt;(621)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.5&lt;/td&gt;&lt;td&gt;Implementing an Environmental Audio Solution Using EAX and ZoomFX&lt;/td&gt;&lt;td&gt;(633)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;7.6&lt;/td&gt;&lt;td&gt;Controlling Real-Time Sound Synthesis from Game Physics&lt;/td&gt;&lt;td&gt;(649)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;APPENDIX: ABOUT THE CD-ROM&lt;/td&gt;&lt;td&gt;(657)&lt;/td&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;INDEX&lt;/td&gt; &lt;td&gt;(659)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/_43gb8BM8e8" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/2011/05/28/game-programming-gems-4</feedburner:origLink></entry>
 
 <entry>
   <title>Game Programming Gems 3, Table of Contents</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/Mb6ZXzy8XBU/game-programming-gems-3" />
   <updated>2011-05-28T00:00:00-07:00</updated>
   <id>hhttp://zolomon.github.com/2011/05/28/game-programming-gems-3</id>
   <content type="html">&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Foreword&lt;/td&gt;&lt;td&gt;(xi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Preface&lt;/td&gt;&lt;td&gt; (xv)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Acknowledgments&lt;/td&gt;&lt;td&gt; (xix)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Cover Image&lt;/td&gt;&lt;td&gt; (xxi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Contributor Bios&lt;/td&gt;&lt;td&gt; (xxiii)&lt;/td&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 1 GENERAL PROGRAMMING (1)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt; &lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt; 
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Scheduling Game Events&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;An Object-Composition Game Framework&lt;/td&gt;&lt;td&gt;(15)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Finding Redeeming Value in C-Style Macros&lt;/td&gt;&lt;td&gt;(26)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Platform-Independent, Function-Binding Code Generator&lt;/td&gt;&lt;td&gt;(38)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;Handle-Based Smart Pointers&lt;/td&gt;&lt;td&gt;(44)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;Custom STL Allocators&lt;/td&gt;&lt;td&gt;(49)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Save Me Now&lt;/td&gt;&lt;td&gt; (59)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Autolists Design Pattern&lt;/td&gt;&lt;td&gt;(64)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Floating-Point Exception Handling&lt;/td&gt;&lt;td&gt;(69)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Programming a Game Design-Compliant Engine Using UML&lt;/td&gt;&lt;td&gt;(73)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.11&lt;/td&gt;&lt;td&gt;Using Lex and Yacc To Parse Custom Data Files&lt;/td&gt;&lt;td&gt;(83)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.12&lt;/td&gt;&lt;td&gt;Developing Games for a World Market&lt;/td&gt;&lt;td&gt;(92)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.13&lt;/td&gt;&lt;td&gt;Real-Time Input and UI in 3D Games&lt;/td&gt;&lt;td&gt;(109)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.14&lt;/td&gt;&lt;td&gt;Natural Selection: The Evolution of Pie Menus&lt;/td&gt;&lt;td&gt;(117)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.15&lt;/td&gt;&lt;td&gt;Lightweight, Policy-Based Logging&lt;/td&gt;&lt;td&gt;(129)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.16&lt;/td&gt;&lt;td&gt;Journaling Services&lt;/td&gt;&lt;td&gt;(136)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.17&lt;/td&gt;&lt;td&gt;Real-Time Hierarchical Profiling&lt;/td&gt;&lt;td&gt;(146)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATHEMATICS (153)  &lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt; &lt;td&gt;(155)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Fast Base-2 Functions for Logarithms and Random Number Generation&lt;/td&gt;&lt;td&gt;(157)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Using Vector Fractions for Exact Geometry&lt;/td&gt;&lt;td&gt;(160)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;More Approximations to Trigonometric Functions&lt;/td&gt;&lt;td&gt;(170)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Quaternion Compression&lt;/td&gt;&lt;td&gt;(187)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Constrained Inverse Kinematics&lt;/td&gt;&lt;td&gt;(192)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Cellular Automata for Physical Modeling&lt;/td&gt;&lt;td&gt;(200)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;td&gt;Coping with Friction in Dynamic Simulations&lt;/td&gt;&lt;td&gt;(215)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 ARTIFICIAL INTELLIGENCE (227)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(229)&lt;/td&gt;&lt;/tr&gt;  
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;Optimized Machine Learning with GoCap&lt;/td&gt;&lt;td&gt;(231)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Area Navigation: Expanding the Path-Finding Paradigm&lt;/td&gt;&lt;td&gt;(240)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Function Pointer-Based, Embedded Finite-State Machines&lt;/td&gt;&lt;td&gt;(256)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;Terrain Analysis in an RTS-The Hidden Giant&lt;/td&gt;&lt;td&gt;(268)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;An Extensible Trigger System for AI Agents, Objects, and Quests&lt;/td&gt;&lt;td&gt;(285)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Tactical Path-Finding with A&lt;/td&gt;&lt;td&gt; (294)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;A Fast Approach to Navigation Meshes&lt;/td&gt;&lt;td&gt;(307)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Choosing a Relationship Between Path-Finding and Collision&lt;/td&gt;&lt;td&gt;(321)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 GRAPHICS (333)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(335)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;T-Junction Elimination and Retriangulation&lt;/td&gt;&lt;td&gt;(338)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Fast Heightfield Normal Calculation&lt;/td&gt;&lt;td&gt;(344)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Fast Patch Normals&lt;/td&gt;&lt;td&gt;(349)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Fast and Simple Occlusion Culling&lt;/td&gt;&lt;td&gt;(353)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Triangle Strip Creation, Optimizations, and Rendering&lt;/td&gt;&lt;td&gt;(359)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Computing Optimized Shadow Volumes for Complex Data Sets&lt;/td&gt;&lt;td&gt;(367)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;Subdivision Surfaces for Character Animation&lt;/td&gt;&lt;td&gt;(372)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Improved Deformation of Bones&lt;/td&gt;&lt;td&gt;(384)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.9&lt;/td&gt;&lt;td&gt;A Framework for Realistic Character Locomotion&lt;/td&gt;&lt;td&gt;(394)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.10&lt;/td&gt;&lt;td&gt;A Programmable Vertex Shader Compiler&lt;/td&gt;&lt;td&gt;(404)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.11&lt;/td&gt;&lt;td&gt;Billboard Beams&lt;/td&gt;&lt;td&gt;(413)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.12&lt;/td&gt;&lt;td&gt;3D Tricks for Isometric Engines&lt;/td&gt;&lt;td&gt;(417)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.13&lt;/td&gt;&lt;td&gt;Curvature Simulation Using Normal Maps&lt;/td&gt;&lt;td&gt;(424)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.14&lt;/td&gt;&lt;td&gt;Methods for Dynamic, Photorealistic Terrain Lighting&lt;/td&gt;&lt;td&gt;(433)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.15&lt;/td&gt;&lt;td&gt;Cube Map Lighting Techniques&lt;/td&gt;&lt;td&gt;(444)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.16&lt;/td&gt;&lt;td&gt;Procedural Texturing&lt;/td&gt;&lt;td&gt;(452)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.17&lt;/td&gt;&lt;td&gt;Unique Textures&lt;/td&gt;&lt;td&gt;(459)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.18&lt;/td&gt;&lt;td&gt;Textures as Lookup Tables for Per-Pixel Lighting Computations&lt;/td&gt;&lt;td&gt;(467)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.19&lt;/td&gt;&lt;td&gt;Rendering with Handcrafted Shading Models&lt;/td&gt;&lt;td&gt;(477)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;SECTION 5 NETWORK AND MULTIPLAYER (485)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(487)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Minimizing Latency in Real-Time Strategy Games&lt;/td&gt;&lt;td&gt;(488)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Real-Time Strategy Network Protocol&lt;/td&gt;&lt;td&gt;(496)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;A Flexible Simulation Architecture for Massively Multiplayer Games&lt;/td&gt;&lt;td&gt;(506)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Scaling Multiplayer Servers&lt;/td&gt;&lt;td&gt;(520)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Template-Based Object Serialization&lt;/td&gt;&lt;td&gt;(534)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;Secure Sockets&lt;/td&gt;&lt;td&gt;(546)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;A Network Monitoring and Simulation Tool&lt;/td&gt;&lt;td&gt;(557)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Creating Multiplayer Games with DirectPlay 8.1&lt;/td&gt;&lt;td&gt;(561)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.9&lt;/td&gt;&lt;td&gt;Wireless Gaming Using the Java Micro Edition&lt;/td&gt;&lt;td&gt;(573)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;SECTION 6 AUDIO (583)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(585)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;Audio Compression with Ogg Vorbis&lt;/td&gt;&lt;td&gt;(587)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;Creating a Compelling 3D Audio Environment&lt;/td&gt;&lt;td&gt;(595)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Obstruction Using Axis-Aligned Bounding Boxes&lt;/td&gt;&lt;td&gt;(600)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.4&lt;/td&gt;&lt;td&gt;Using the Biquad Resonant Filter&lt;/td&gt;&lt;td&gt;(606)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.5&lt;/td&gt;&lt;td&gt;Linear Predictive Coding for Voice Compression and Effects&lt;/td&gt;&lt;td&gt;(613)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.6&lt;/td&gt;&lt;td&gt;The Stochastic Synthesis of Complex Sounds&lt;/td&gt;&lt;td&gt;(622)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.7&lt;/td&gt;&lt;td&gt;Real-Time Modular Audio Processing for Games&lt;/td&gt;&lt;td&gt;(630)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Appendix: About the CD-ROM&lt;/td&gt;&lt;td&gt;(639)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Contents&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/Mb6ZXzy8XBU" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/2011/05/28/game-programming-gems-3</feedburner:origLink></entry>
 
 <entry>
   <title>Game Programming Gems 2, Table of Contents</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/Pw7o9iN8AEY/game-programming-gems-2" />
   <updated>2011-05-28T00:00:00-07:00</updated>
   <id>hhttp://zolomon.github.com/2011/05/28/game-programming-gems-2</id>
   <content type="html">&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Preface&lt;/td&gt;&lt;td&gt; (xxi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Cover Image&lt;/td&gt;&lt;td&gt; (xxv)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Author Bios&lt;/td&gt;&lt;td&gt; (xxvii)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;SECTION 1 GENERAL PROGRAMMING (1)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction: General Programming&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Optimization for C++ Games&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;Inline Functions Versus Macros&lt;/td&gt;&lt;td&gt;(16)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Programming with Abstract Interfaces&lt;/td&gt;&lt;td&gt;(5)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Exporting C++ Classes from DLLs&lt;/td&gt;&lt;td&gt;(28)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;Protect Yourself from DLL Hell and Missing OS Functions&lt;/td&gt;&lt;td&gt;(33)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;Dynamic Type Information&lt;/td&gt;&lt;td&gt;(38)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;A Property Class for Generic C++ Member Access&lt;/td&gt;&lt;td&gt;(46)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;A Game Entity Factory&lt;/td&gt;&lt;td&gt;(51)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Adding Deprecation Facilities to C++&lt;/td&gt;&lt;td&gt; (62)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;A Drop-in Debug Memory Manager&lt;/td&gt;&lt;td&gt;(66)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.11&lt;/td&gt;&lt;td&gt;A Built-in Game Profiling Module&lt;/td&gt;&lt;td&gt;(74)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.12&lt;/td&gt;&lt;td&gt;Linear Programming Model for Windows-based Games&lt;/td&gt;&lt;td&gt;(80)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.13&lt;/td&gt;&lt;td&gt;Stack Winding&lt;/td&gt;&lt;td&gt;(85)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.14&lt;/td&gt;&lt;td&gt;Self-Modifying Code&lt;/td&gt;&lt;td&gt;(91)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.15&lt;/td&gt;&lt;td&gt;File Management Using Resource Files&lt;/td&gt;&lt;td&gt;(100)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.16&lt;/td&gt;&lt;td&gt;Game input Recording and Playback&lt;/td&gt;&lt;td&gt;(105)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.17&lt;/td&gt;&lt;td&gt;A Flexible Text Parsing System&lt;/td&gt;&lt;td&gt;(112)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.18&lt;/td&gt;&lt;td&gt;A Generic Tweaker&lt;/td&gt;&lt;td&gt;(118)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.19&lt;/td&gt;&lt;td&gt;Genuine Random Number Generation&lt;/td&gt;&lt;td&gt;(127)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.20&lt;/td&gt;&lt;td&gt;Using Bloom Filters to improve Computational Performance&lt;/td&gt;&lt;td&gt;(133)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.21&lt;/td&gt;&lt;td&gt;3ds max Skin Exporter and Animation Toolkit&lt;/td&gt;&lt;td&gt;(141)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.22&lt;/td&gt;&lt;td&gt;Using Web Cameras in Video Games&lt;/td&gt;&lt;td&gt;(153)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATHEMATICS (163)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction: Mathematics&lt;/td&gt; &lt;td&gt;(165)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Floating-Point Tricks: Improving Performance with IEEE Floating Point&lt;/td&gt;&lt;td&gt;(167)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Vector and Plane Tricks&lt;/td&gt;&lt;td&gt;(182)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Fast, Robust Intersection of 3D Line Segments&lt;/td&gt;&lt;td&gt;(191)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Inverse Trajectory Determination&lt;/td&gt;&lt;td&gt;(205)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;The Parallel Transport Frame&lt;/td&gt;&lt;td&gt;(215)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Smooth C2 Quaternion-based Flythrough Paths&lt;/td&gt;&lt;td&gt;(220)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;td&gt;Recursive Dimensional CLustering: A Fast Algorithm for Collision Detection&lt;/td&gt;&lt;td&gt;(228)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.8&lt;/td&gt;&lt;td&gt;Programming Fractals&lt;/td&gt;&lt;td&gt;(239)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 ARTIFICIAL INTELLIGENCE (247)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction: Artificial Intelligence&lt;/td&gt;&lt;td&gt;(249)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;Strategies for Optimizing AI&lt;/td&gt;&lt;td&gt;(251)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Micro-Threads for Game Object AI&lt;/td&gt;&lt;td&gt;(258)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;Managing AI with Micro-Threads&lt;/td&gt;&lt;td&gt;(265)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;An Architecture for RTS Command Queuing&lt;/td&gt;&lt;td&gt;(273)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;A High-Performance Tile-Based Line-of-Sight and Search System&lt;/td&gt;&lt;td&gt;(279)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Influence Mapping&lt;/td&gt;&lt;td&gt;(287)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Strategic Assessment Techniques&lt;/td&gt;&lt;td&gt;(298)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Terrain Reasoning for 3D Action Games&lt;/td&gt;&lt;td&gt;(307)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.9&lt;/td&gt;&lt;td&gt;Expanded Geometry for Points-of-Visibility Pathfinding&lt;/td&gt;&lt;td&gt;(317)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.10&lt;/td&gt;&lt;td&gt;Optimizing Points-of-Visibility Pathfinding&lt;/td&gt;&lt;td&gt;(324)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.11&lt;/td&gt;&lt;td&gt;Flocking with Teeth: Predators and Prey&lt;/td&gt;&lt;td&gt;(330)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.12&lt;/td&gt;&lt;td&gt;A Generic Fuzzy State Machine in C++&lt;/td&gt;&lt;td&gt; (337)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.13&lt;/td&gt;&lt;td&gt;Imploding Combinatorial Explosion in a Fuzzy System&lt;/td&gt;&lt;td&gt;(342)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.14&lt;/td&gt;&lt;td&gt;Using a Neutral Network in a Game: A Concrete Example&lt;/td&gt;&lt;td&gt;(351)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 GEOMETRY MANAGEMENT (359)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction: Geometry Management&lt;/td&gt;&lt;td&gt;(361)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Comparison of VIPM Methods&lt;/td&gt;&lt;td&gt;(363)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Simplified Terrain Using Interlocking Tiles&lt;/td&gt;&lt;td&gt;(377)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Sphere Trees for Fast Visibility Culling, Ray Tracing and Range Searching&lt;/td&gt;&lt;td&gt;(384)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Compressed Axis-Aligned Bounding Box Trees&lt;/td&gt;&lt;td&gt;(388)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Direct Access Quadtree Lookup&lt;/td&gt;&lt;td&gt;(394)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Approximating Fish Tank Refractions&lt;/td&gt;&lt;td&gt;(402)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;Rendering Print Resolution Screenshots&lt;/td&gt;&lt;td&gt;(406)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Applying Decals to Arbitrary Surfaces&lt;/td&gt;&lt;td&gt;(411)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.9&lt;/td&gt;&lt;td&gt;Rendering Distans Scenery with Skyboxes&lt;/td&gt;&lt;td&gt;(416)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.10&lt;/td&gt;&lt;td&gt;Self-Shadowing Characters&lt;/td&gt;&lt;td&gt;(421)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.11&lt;/td&gt;&lt;td&gt;Classic Super Mario 64 Third-Person Control and Animation&lt;/td&gt;&lt;td&gt;(425)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 5 GRAPHICS DISPLAY (433)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction: Graphics Display&lt;/td&gt;&lt;td&gt;(435)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Cartoon Rendering: Real-Time Silhouette Edge Detection and Rendering&lt;/td&gt;&lt;td&gt;(436)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Cartoon Rendering Using Texture Mapping and Programmable Vertex Shaders&lt;/td&gt;&lt;td&gt;(444)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Dynamix Per-Pixel Lighting Technique&lt;/td&gt;&lt;td&gt;(452)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Generating Procedural Clouds using 3D Hardware&lt;/td&gt;&lt;td&gt;(463)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Texture Masking for Faster Lens Flare&lt;/td&gt;&lt;td&gt;(474)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;Practical Priority Buffer Shadows&lt;/td&gt;&lt;td&gt;(481)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;Impostors: Adding Clutter&lt;/td&gt;&lt;td&gt;(488)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Operations for Hardware-Accelerated Procedural Texture Animation&lt;/td&gt;&lt;td&gt;(497)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/Pw7o9iN8AEY" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/2011/05/28/game-programming-gems-2</feedburner:origLink></entry>
 
 <entry>
   <title>Game Programming Gems 1, Table of Contents</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/uaQrkuUvf9w/game-programming-gems-1" />
   <updated>2011-05-28T00:00:00-07:00</updated>
   <id>hhttp://zolomon.github.com/2011/05/28/game-programming-gems-1</id>
   <content type="html">&lt;p&gt;(Page numbers are missing, waiting for my copy...)&lt;/p&gt;

&lt;h2&gt;SECTION 1 PROGRAMMING TECHNIQUES&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;1.0&lt;/td&gt;&lt;td&gt;The Magic of Data-Driven Design&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;Object-Oriented Programming and Design Techniques&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;Fast Math Using Template Metaprogramming&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;An Automatic Singleton Utility&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Using the STL in Game Programming&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;A Generic Function-Binding Interface&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;A Generic Handle-Based Resource Manager&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Resource and Memory Management&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Fast Data Load Trick&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Frame-Based Memory Allocation&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Simple, Fast Bit Arrays&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.11&lt;/td&gt;&lt;td&gt;A Network Protocol for Online Games&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.12&lt;/td&gt;&lt;td&gt;Squeezing More Out of Assert&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.13&lt;/td&gt;&lt;td&gt;Stats: Real-Time Statistics and In-Game Debugging&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.14&lt;/td&gt;&lt;td&gt;Real-Time In-Game Profiling&lt;/td&gt;&lt;tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATHEMATICS&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;2.0&lt;/td&gt;&lt;td&gt;Predictable Random Numbers&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;Interpolation Methods&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Integrating the Equations of Rigid Body Motion&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Polynomial Approximations to Trigonometric Functions&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Using Implicit Euler Integration for Numerical Stability&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Wavelets: Theory and Compression&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Interactive Simulation of Water Surfaces&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;td&gt;Quaternions for Game Programming&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.8&lt;/td&gt;&lt;td&gt;Matrix-Quaternion Conversions&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.9&lt;/td&gt;&lt;td&gt;Interpolating Quaternions&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.10&lt;/td&gt;&lt;td&gt;The Shortest Arc Quaternion&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 ARTIFICIAL INTELLIGENCE&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td&gt;3.0&lt;/td&gt;&lt;td&gt;Designing a General Robust AI Engine&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;A Finite-State Machine Class&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;Game Trees&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;The Basics of A* for Path Planning&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;A* Aesthetic Optimizations&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;A* Speed Optimizations&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Simplified 3D Movement and Pathfinding Using Navigation Meshes&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;Flocking: A Simple Technique for Simulating Group Behavior&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Fuzzy Logic for Video Games&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.9&lt;/td&gt;&lt;td&gt;A Neural-Net Primer&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 POLYGONOL TECHNIQUES&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td&gt;4.0&lt;/td&gt;&lt;td&gt;Optimizing Vertex Submissions for OpenGL&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;Tweaking A Vertex's Projected Depth Value&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;The Vector Camera&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Camera Control Techniques&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;A Fast Cylinder-Frustum Intersection Test&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;3D Collision Detection&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Multi-Resolution Maps for Interaction Detection&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;Computing the Distance into a Sector&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Object Occlusion Culling&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.9&lt;/td&gt;&lt;td&gt;Never Let 'Em See You Pop - Issues in Geometric Level of Detail Selection&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.10&lt;/td&gt;&lt;td&gt;Octree Construction&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.11&lt;/td&gt;&lt;td&gt;Loose Octrees&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.12&lt;/td&gt;&lt;td&gt;View-Independent Progressive Meshing&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.13&lt;/td&gt;&lt;td&gt;Interpolated 3D Keyframe Animation&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.14&lt;/td&gt;&lt;td&gt;A Fast and Simple Skinning Techniques&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.15&lt;/td&gt;&lt;td&gt;Filling the Gaps - Advanced Animation Using Stitching and Skinning&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.16&lt;/td&gt;&lt;td&gt;Real-Time Realistic Terrain Generation&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.17&lt;/td&gt;&lt;td&gt;Fractal Terrain Generation - Fault Formation&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.18&lt;/td&gt;&lt;td&gt;Fractal Terrain Generation - Midpoint Displacement&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.19&lt;/td&gt;&lt;td&gt;Fractal Terrain Generation - Particle Deposition&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 5 PIXEL EFFECTS&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td&gt;5.0&lt;/td&gt;&lt;td&gt;2D Lens Flare&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Using 3D Hardware for 2D Sprite Effects&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Motif-Based Static Lighting&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Simulated Real-Time Lighting Using Vertex Color Interpolation&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Attenuation Maps&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Advanced Texturing Using Texture Coordinate Generation&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;Hardware Bump Mapping&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;Ground-Plane Shadows&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.8&lt;/td&gt;&lt;td&gt;Real-Time Shadows on Complex Objects&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.9&lt;/td&gt;&lt;td&gt;Improving Environment-Mapped Reflection Using Glossy Prefiltering and the Fresnel Term&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.10&lt;/td&gt;&lt;td&gt;Convincing-Looking Glass for Games&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.11&lt;/td&gt;&lt;td&gt;Refraction Mapping for Liquids in Containers&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 6 APPENDIX&lt;/h2&gt;
&lt;table&gt;  
  &lt;tr&gt;&lt;td&gt;6.0&lt;/td&gt;&lt;td&gt;The Matrix Utility Library&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;The Text Utility Library&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;About the CD-ROM&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;table&gt;
  Index
&lt;/table&gt;
&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/uaQrkuUvf9w" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/2011/05/28/game-programming-gems-1</feedburner:origLink></entry>
 
 <entry>
   <title>Best of Game Programming Gems, Table of Contents</title>
   <link href="http://feedproxy.google.com/~r/zolomon/~3/H-TwG5bUkbA/best-of-game-programming-gems" />
   <updated>2011-05-28T00:00:00-07:00</updated>
   <id>hhttp://zolomon.github.com/2011/05/28/best-of-game-programming-gems</id>
   <content type="html">&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Acknowledgments&lt;/td&gt;&lt;td&gt;(ix)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;About the Authors&lt;/td&gt;&lt;td&gt;(xi)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Introduction&lt;/td&gt;&lt;td&gt;(xxv)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 1 GENERAL INFORMATION (1)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;The Science of Debugging Games&lt;/td&gt;&lt;td&gt;(3)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;Finding Redeeming Value in C-Style Macros&lt;/td&gt;&lt;td&gt;(17)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;Inline Functions vs Macros&lt;/td&gt;&lt;td&gt;(29)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;Squeezing More Out of Assaert&lt;/td&gt;&lt;td&gt;(35)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;Programming with Abstract Interfaces&lt;/td&gt;&lt;td&gt;(41)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;The Beauty of Weak References and Null Objects&lt;/td&gt;&lt;td&gt;(49)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;Using the STL in Game Programming&lt;/td&gt;&lt;td&gt;(57)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;Custom STL Allocators&lt;/td&gt;&lt;td&gt;(73)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;Optimizations for C++ Games&lt;/td&gt;&lt;td&gt;(83)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;Real-Time Hierarchical Profiling&lt;/td&gt;&lt;td&gt;(95)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.11&lt;/td&gt;&lt;td&gt;A Generic Tree Container in C++&lt;/td&gt;&lt;td&gt;(103)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.12&lt;/td&gt;&lt;td&gt;Lock-Free Algorithms&lt;/td&gt;&lt;td&gt;(113)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;1.13&lt;/td&gt;&lt;td&gt;Utilizing Multicore Processors with OpenMP&lt;/td&gt;&lt;td&gt;(125)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 2 MATH AND PHYSICS (133)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;More Approximations to Trigonometric Functions&lt;/td&gt;&lt;td&gt;(135)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;Faster Quaternion Interpolation Using Approximations&lt;/td&gt;&lt;td&gt;(153)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.3&lt;/td&gt;&lt;td&gt;Quaternion Compression&lt;/td&gt;&lt;td&gt;(175)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;Zobrist Hash Using the Mersenne Twister&lt;/td&gt;&lt;td&gt;(181)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;td&gt;Solving Accuracy Problems in Large World Coordinates&lt;/td&gt;&lt;td&gt;(187)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;Writing a Verlet-Based Physics Engine&lt;/td&gt;&lt;td&gt;(201)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;td&gt;Constraints in Rigid Body Dynamics&lt;/td&gt;&lt;td&gt;(211)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;2.8&lt;/td&gt;&lt;td&gt;The Jacobian Transpose Method for Inverse Kinematics&lt;/td&gt;&lt;td&gt;(223)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 3 ARTIFICIAL INTELLIGENCE (235)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;3.1&lt;/td&gt;&lt;td&gt;The Basics of A* for Path Planning&lt;/td&gt;&lt;td&gt;(237)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;A* Aesthetic Optimizations&lt;/td&gt;&lt;td&gt;(247)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;A* Speed Optimizations&lt;/td&gt;&lt;td&gt;(255)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.4&lt;/td&gt;&lt;td&gt;Tactical Path-Finding with A&lt;/td&gt;&lt;td&gt; (271)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.5&lt;/td&gt;&lt;td&gt;A Fast Approach to Navigation Meshes&lt;/td&gt;&lt;td&gt;(285)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;Flocking: A Simple Technique for Simulating Group Behavior&lt;/td&gt;&lt;td&gt;(297)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;A Finite-State Machine Class&lt;/td&gt;&lt;td&gt;(311)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;Implementing Practical Planning for Game AI&lt;/td&gt;&lt;td&gt;(323)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 4 GRAPHICS (339)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;4.1&lt;/td&gt;&lt;td&gt;T-Junction Elimination and Retriangulation&lt;/td&gt;&lt;td&gt;(341)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;Filling the Gaps: Advanced Animation Using Stitching and Skinning&lt;/td&gt;&lt;td&gt;(347)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.3&lt;/td&gt;&lt;td&gt;Improved Skin Deformation Using Kinematic Skeletons&lt;/td&gt;&lt;td&gt;(355)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;Motion Capture Data Compression&lt;/td&gt;&lt;td&gt;(363)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;Compressed Axis-Aligned Bounding Box Trees&lt;/td&gt;&lt;td&gt;(371)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.6&lt;/td&gt;&lt;td&gt;Textures as Lookup Tables for Per-Pixel Lighting Computations&lt;/td&gt;&lt;td&gt;(377)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;Methods for Dynamic, Photorealistic Terrain Lightning&lt;/td&gt;&lt;td&gt;(387)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.8&lt;/td&gt;&lt;td&gt;Practical Sky Rendering for Games&lt;/td&gt;&lt;td&gt;(399)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.9&lt;/td&gt;&lt;td&gt;Powerful Explosion Effects using Billboard Particles&lt;/td&gt;&lt;td&gt;(411)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;4.10&lt;/td&gt;&lt;td&gt;Rendering Handcrafted Shading Models&lt;/td&gt;&lt;td&gt;(421)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 5 NETWORKING (427)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;Overcoming Network Address Translation in Peer-to-Peer Communications&lt;/td&gt;&lt;td&gt;(429)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;Minimizing Latency in Real-Time Strategy Games&lt;/td&gt;&lt;td&gt;(451)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.3&lt;/td&gt;&lt;td&gt;Real-Time Strategy Network Protocol&lt;/td&gt;&lt;td&gt;(459)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;Secure Sockets&lt;/td&gt;&lt;td&gt;(469)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;Bit Packing: A Network Compression Technique&lt;/td&gt;&lt;td&gt;(481)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;h2&gt;SECTION 6 AUDIO (489)&lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;6.1&lt;/td&gt;&lt;td&gt;A Basic Music Sequencer for Games&lt;/td&gt;&lt;td&gt;(491)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.2&lt;/td&gt;&lt;td&gt;Audio Compression with Ogg Vorbis&lt;/td&gt;&lt;td&gt;(503)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.3&lt;/td&gt;&lt;td&gt;Using 3D Surfaces as Audio Emitters&lt;/td&gt;&lt;td&gt;(511)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.4&lt;/td&gt;&lt;td&gt;Introduction to Single-Speaker Speech Recognition&lt;/td&gt;&lt;td&gt;(521)&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;6.5&lt;/td&gt;&lt;td&gt;A Technique to instantaneously Reuse Voices in a Sample-Based Synthesizer&lt;/td&gt;&lt;td&gt;(531)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;table&gt;
  &lt;tr&gt;&lt;td colspan="2"&gt;Index&lt;/td&gt;&lt;td&gt;(535)&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;img src="http://feeds.feedburner.com/~r/zolomon/~4/H-TwG5bUkbA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://zolomon.github.com/2011/05/28/best-of-game-programming-gems</feedburner:origLink></entry>
 
 
</feed>

