<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Josh Heitzman's Blog O' Code &#187; Game Development</title>
	<atom:link href="http://codecrafter.wordpress.com/tag/game-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://codecrafter.wordpress.com</link>
	<description></description>
	<lastBuildDate>Fri, 27 Nov 2009 23:26:07 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='codecrafter.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/7abe2a859755497d43295ae83ab40c80?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Josh Heitzman's Blog O' Code &#187; Game Development</title>
		<link>http://codecrafter.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://codecrafter.wordpress.com/osd.xml" title="Josh Heitzman&#8217;s Blog O&#8217; Code" />
	<atom:link rel='hub' href='http://codecrafter.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Ultra simple simulator running</title>
		<link>http://codecrafter.wordpress.com/2008/02/29/ultra-simple-simulator-running/</link>
		<comments>http://codecrafter.wordpress.com/2008/02/29/ultra-simple-simulator-running/#comments</comments>
		<pubDate>Sat, 01 Mar 2008 05:06:02 +0000</pubDate>
		<dc:creator>Josh Heitzman</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Project Wellinghall]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://leahjosh.wordpress.com/?p=78</guid>
		<description><![CDATA[Getting two processes talking to each other over UDP/IP with Twisted was no problem.  There was a Win32 one hack the author&#8217;s had put in that would have been a show stopper; however, they did it in such a way that it was possible put in a hack to remove their hack, so no [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codecrafter.wordpress.com&blog=3240053&post=25&subd=codecrafter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Getting two processes talking to each other over UDP/IP with Twisted was no problem.  There was a Win32 one hack the author&#8217;s had put in that would have been a show stopper; however, they did it in such a way that it was possible put in a hack to remove their hack, so no problem.</p>
<p>I was a little premature on networking though.  The simulator process doesn&#8217;t need to talk to the process with the 3D rendering GUI (we&#8217;ll call that the player for simplicity) from to actually do a simulation, and there is yet another process that will actually be starting both of those (we&#8217;ll call that the client), so putting in communication between the simulator and the player without the client would just be throw away work.  Anyway, the simulator needs to be able to create a file that the player can use to render the course of the simulation from the perspective of one of the entities in the simulation.  What the player shows is like watching a demo for a first person shooter, or if you saw the Robin William&#8217;s movie <a href="http://www.imdb.com/title/tt0364343/">Final Cut</a> it&#8217;s like how the Zoe implant recorded everything in a person&#8217;s life from their perspective.</p>
<p>At this point I have simple simulator coded up that runs a simulation on a hard coded input of two equally matched combatants duking it out (they tie every time).  So the next step is to have the simulator write out one of the combatants perspective to to a file and then have the player playback the contents of the file like a movie.</p>
<p>Thus it is time to delve into Python object serialization and deserialization.  In looking at the Twisted docs it has some support for this.  I&#8217;ve also encountered the term &#8220;pickling&#8221; regarding Python object serialization, but I don&#8217;t yet know if that is part of standard Python or yet another library.  Another way to go is to use SQLAlchemy with a SQLite database.  SQLite runs in process and now is included standard with Python (at least Win32 installs of Python) so there is no database server product to be installed and no seperate SQL server that has to be configured and the database is contained in just one file, so its nice and simple compared to big iron databases.  SQLAlchemy can be used to get Python object mapped into a database, but it also allows for a lot of more control over how this happens if you need unlike most other Object Relation Mappers.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/codecrafter.wordpress.com/25/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/codecrafter.wordpress.com/25/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codecrafter.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codecrafter.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codecrafter.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codecrafter.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codecrafter.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codecrafter.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codecrafter.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codecrafter.wordpress.com/25/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codecrafter.wordpress.com/25/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codecrafter.wordpress.com/25/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codecrafter.wordpress.com&blog=3240053&post=25&subd=codecrafter&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://codecrafter.wordpress.com/2008/02/29/ultra-simple-simulator-running/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67cd39759fc1193347de66ffa48e9cb8?s=96&#38;d=wavatar&#38;r=R" medium="image">
			<media:title type="html">joshkheitzman</media:title>
		</media:content>
	</item>
		<item>
		<title>PyOpenGL good; now for Twisted</title>
		<link>http://codecrafter.wordpress.com/2008/02/24/pyopengl-good-now-for-twisted/</link>
		<comments>http://codecrafter.wordpress.com/2008/02/24/pyopengl-good-now-for-twisted/#comments</comments>
		<pubDate>Mon, 25 Feb 2008 05:55:11 +0000</pubDate>
		<dc:creator>Josh Heitzman</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Project Wellinghall]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://leahjosh.wordpress.com/?p=76</guid>
		<description><![CDATA[Over the last week and half wxPython and PyOpenGL haven&#8217;t made me wish I was working in C++ except in one instance today where call through wxPython into wxWidgets wasn&#8217;t returning so long as the window was being moved or resized but it isn&#8217;t really that big of a deal since windows don&#8217;t actually get [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codecrafter.wordpress.com&blog=3240053&post=23&subd=codecrafter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Over the last week and half wxPython and PyOpenGL haven&#8217;t made me wish I was working in C++ except in one instance today where call through wxPython into wxWidgets wasn&#8217;t returning so long as the window was being moved or resized but it isn&#8217;t really that big of a deal since windows don&#8217;t actually get moved and resized a lot.</p>
<p>At this point I have enough of a GUI in place to be able to render what I need for the first, minimalist stage of the road map for my game development, so it&#8217;s time to stop screwing around with 3D rendering (it suckers you in with nearly endless tweakability) and get on to interprocess communication and then finally the actual game simulator.  The simulator has to wait on interprocess communication as it will be running in a different process from the GUI.</p>
<p>Python&#8217;s interpreter has a single process level lock that prevents two threads from executing python code at the same time, so in order to take advantage of today&#8217;s multi-core processors in Python it is necessary to distribute an application across multiple processes.  While multi-processing is generally less efficient then multi-threading, the distribution has benefits of its own.  One is that it isn&#8217;t that big of a step from running multiple processes on one machine to running multiple processes on different machines and it won&#8217;t cost you that much to just build support for that from beginning.  Besides the obvious benefit of such distribution allowing multiple players on different computers to play the same game together, such distribution can also allow a single player to utilize multiple computers to be able to simulate a larger and/or more complex  (such as giving advanced AI its own machine to run on) game world.</p>
<p>While looking for other Python related things I&#8217;ve read a number of references to a Python networking library called <a href="http://twistedmatrix.com/trac/">Twisted</a> so I&#8217;m give it ago for my networking code.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/codecrafter.wordpress.com/23/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/codecrafter.wordpress.com/23/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codecrafter.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codecrafter.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codecrafter.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codecrafter.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codecrafter.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codecrafter.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codecrafter.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codecrafter.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codecrafter.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codecrafter.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codecrafter.wordpress.com&blog=3240053&post=23&subd=codecrafter&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://codecrafter.wordpress.com/2008/02/24/pyopengl-good-now-for-twisted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67cd39759fc1193347de66ffa48e9cb8?s=96&#38;d=wavatar&#38;r=R" medium="image">
			<media:title type="html">joshkheitzman</media:title>
		</media:content>
	</item>
		<item>
		<title>PyOpenGL or bust!</title>
		<link>http://codecrafter.wordpress.com/2008/02/15/opengl-it-is/</link>
		<comments>http://codecrafter.wordpress.com/2008/02/15/opengl-it-is/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 22:18:54 +0000</pubDate>
		<dc:creator>Josh Heitzman</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://leahjosh.wordpress.com/?p=72</guid>
		<description><![CDATA[At first look the Python bindings for DirectX, DirectPython were looking pretty promising.  The API set is small, the included docs seem verbose enough to actually be useful, and the included samples illustrated using vertex and index hardware buffers directly which is one of the things I didn&#8217;t feel like grepping through the OGRE [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codecrafter.wordpress.com&blog=3240053&post=20&subd=codecrafter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>At first look the Python bindings for DirectX, DirectPython were looking pretty promising.  The API set is small, the included docs seem verbose enough to actually be useful, and the included samples illustrated using vertex and index hardware buffers directly which is one of the things I didn&#8217;t feel like grepping through the OGRE code to figure out how to do.  In running the samples I did observe several on them disappear when I tried the few key commands they supported, but that was the only immediate red flag.</p>
<p>I figured I&#8217;d have a look at the Python bindings for OpenGL, PyOpenGL quick to see how they compared.  First off there weren&#8217;t any samples included with just the basic download, but that&#8217;s now big deal.  After downloading the samples I found that none of the would run without going and downloading an additional DLL and some additional Python libraries.  Still not a big deal and once they were running I didn&#8217;t observe any of them disappearing before I closed them.  I did run into a few that were using an fairly old library for which there is no pre-built Win32 binary.  Didn&#8217;t feel like dealing with that, but the code is still useful.</p>
<p>One piece of data that I discovered while working with PyOpenGL and OpenGL was that modern graphics cards now support <a href="http://en.wikipedia.org/wiki/Geometry_instancing">geometry instancing</a>.  As this seems highly likely to beneficial to my games,  I decided that whatever 3D rendering library I was going to write code against first needed to support instancing.  Although DirectX 9.0c does support instancing DirectPython does not (well it&#8217;s the ability to call through the COM methods directly, but there are other ways to that as well, and I believe it would more productive to just write the code in C++ then in Python in that case), so that&#8217;s out (I may need to write something against DirectX in C++ in the future and then make Python bindings for that, but that&#8217;s basically an optimization that can wait until later).   I also checked OGRE and it does not have support for instancing, so that is now definitively out as well.  I ran across another open source rendering engine called Irrlicht that all has Python bindings and investigated it enough to determine that is also does not support instancing.  Next I checked the PyOpenGL bindings for OpenGL extensions and found that the instancing extension (EXT_draw_instanced) does have bindings.</p>
<p>At present I&#8217;m also more inclined to go with OpenGL then DirectX from the standpoint of future proofing.  All versions of DirectX up through 9.0c have been available for developers to freely redistribute with their games; however, DX10+ is currently only available on Vista and Microsoft has indicated that it has no intention of making it available separately from Vista.  Unless Microsoft changes its tune in the future, this means XP users&#8211;that is to say most users&#8211;are running on an OS for which there will be no version of DirectX beyond 9.0c made available to take advantage of the new capabilities of graphics cards.  On the other hand graphics cards manufactures (NVidia in particular seems to be really committed to its OpenGL drivers) make available their newest hardware capabilities via <a href="http://www.opengl.org/resources/features/OGLextensions/">OpenGL extensions</a>.  These hardware specific extensions frequently become official <a href="http://www.opengl.org/about/arb/">ARB</a> OpenGL extensions, and the ARB extensions becomes frequently become part of the next rev of the OpenGL specification.  While dealing with hardware specific extensions does suck on a number of levels, its nice to at least have the option to use more advanced features, vs. being forever frozen to what DirectX 9.0c supports.</p>
<p>So at this point if PyOpenGL doesn&#8217;t work, screw Python I&#8217;m going home to C++ at least the rendering subsystem.  Since wxWidgets is written in C++ and I&#8217;m just calling through to it via wxPython, the language switch won&#8217;t affect any of my current API or library choices.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/codecrafter.wordpress.com/20/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/codecrafter.wordpress.com/20/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codecrafter.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codecrafter.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codecrafter.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codecrafter.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codecrafter.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codecrafter.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codecrafter.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codecrafter.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codecrafter.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codecrafter.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codecrafter.wordpress.com&blog=3240053&post=20&subd=codecrafter&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://codecrafter.wordpress.com/2008/02/15/opengl-it-is/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67cd39759fc1193347de66ffa48e9cb8?s=96&#38;d=wavatar&#38;r=R" medium="image">
			<media:title type="html">joshkheitzman</media:title>
		</media:content>
	</item>
		<item>
		<title>Off to a slow start</title>
		<link>http://codecrafter.wordpress.com/2008/02/14/off-to-a-slow-start/</link>
		<comments>http://codecrafter.wordpress.com/2008/02/14/off-to-a-slow-start/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 00:15:55 +0000</pubDate>
		<dc:creator>Josh Heitzman</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Project Wellinghall]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://leahjosh.wordpress.com/?p=71</guid>
		<description><![CDATA[Prior to getting sick I had been making solid progress on planning and design for the games I want develop as well as some core technology that will be useful more serious endeavors as well.  Once I started feeling better I figured just start doing some coding to get more familiar with Python, which [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codecrafter.wordpress.com&blog=3240053&post=19&subd=codecrafter&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Prior to getting sick I had been making solid progress on planning and design for the games I want develop as well as some core technology that will be useful more serious endeavors as well.  Once I started feeling better I figured just start doing some coding to get more familiar with Python, which I haven&#8217;t done anything with since March &#8216;07, and the libraries available for it.  I got off to a good start with simple but extensible application framework.  Then I figured I needed some a UI a little fancier then text on the console.  I had previously done some poking around to find out what 3D graphics libraries where available for Python.  Of those I found I had decided to with Python-OGRE, which are the Python bindings for OGRE as well as several GUI libraries and physics libraries.  OGRE is a 3D graphics rendering engine that works on top of either OpenGL or DirectX which are two major 3D rendering APIs, so I figured it would be nice take advantage of that so my games would support both OpenGL and DirectX without me needing to write code to both APIs.</p>
<p>So first things first I&#8217;ve got two monitors so I want to be able to do full screen rendering to both monitors at the same time (and more for folks with more monitors).  After a screwing around without for a while I confirmed that out OGRE doesn&#8217;t support that yet.  Okay, so maybe one monitor gets a full screen window and the other gets regular window that is maximized.  Nope, when the focus is switched from the full screen window to the regular window the full screen window minimizes itself.  Turns out two maximized regular windows was the best I could do with OGRE at present, but that was okay for my initial plans and I found comments by the OGRE devs that the multi-monintor full screen support was being worked on.</p>
<p>So now that I&#8217;ve got two windows (well three actually; I&#8217;ve always found it better test with a minimum of three things if you need to support an arbitrary number of things) up capable of rendering 3D scenes, I figure it&#8217;s time for a GUI in those windows.  Even if I decided to be lame and go purely keyboard driven I&#8217;d still need to be able to put up to some text on the screen and if I&#8217;m going to both with that I figure may as well have some mouse support as well, since this is common in modern games so not having it would be really lame.  I looked into the 4 GUI libraries that Python-OGRE has bindings for and was able to rule out 2 in fairly short order.  The next two I spent some time playing around with.  One was still only of alpha quality and it just wasn&#8217;t ready for use yet.  The other was fairly mature and stable after more screwing around I was able to confirm it only supported putting a GUI into 1 3D viewport (a window can have multiple viewports).  More importantly the stock GUI widgets it offered didn&#8217;t supply everything I&#8217;d need for a GUI for doing unit/character design, so no only would it limit me to a single viewport (and thus single window) I&#8217;d still have go write some complex GUI widgets.</p>
<p>So I said screw it.  I&#8217;ll use a regular a regular Windows GUI and simply host some 3D rendering windows in the regular GUI.  I new there was a mature library called wxWidgets that was a cross platform (it works on Max and *nix as well as Windows) GUI/windowing library that had Python bindings in the form of wxPython.</p>
<p>So I got that going without much difficulty and figured it was time to get something 3D rendering in my 3D window.  I&#8217;m planning to go with programmatically generated visuals as I&#8217;m not skilled as a texture artist or a 3D modeler so I wanted to get a sphere up on the screen.  Before trying to generate a mesh for a geodesic sphere I wanted to display a particle at each vertex on the geodesic sphere to make sure I had the algorithm correct.  A particle is a (usually) small square that is perpendicular to the direction of the camera (i.e. it always faces the camera however the camera moves) and I knew OGRE had a particle system so I tried to determine how to get one particle onto the screen and I really got a dose of how static data driven OGRE is.  OGRE can load a number of different kinds of files and turn them into visuals on the screen with just a little code from you to specify where this thing will be or what animation it is currently running through.  That&#8217;s great if you have a bunch of artists producing loads of content; however, if your content is produced dynamically on the fly this isn&#8217;t useful.  That would be a problem in and of itself, except that the OGRE tutorials all use static content in files, and the OGRE API docs are pretty light.  I ended having to download the OGRE source code in order to look through it to try to figure out the steps for just getting a damn particle on the screen.  I got one up eventually but I ran into a problem where the Python bindings had an error in them so one particular method wasn&#8217;t callable.  I found another method I could call that would in turn call that one; however, calling it at that time caused other problems.</p>
<p>On top of that while I was looking through the particle system render code I had noticed that it was fairly inefficient.  Particles are supposed to be really light weight.  OGRE is very and extensible so I could write my own my particle system, but I had already determined I would need to write my own scene manager as well.  Since I wouldn&#8217;t be taking advantage of OGRE&#8217;s static data driven aspects (including all of the tools for creating this data), so now I have began to question if OGRE was really what I should be using.  I could just use it&#8217;s lower level classes that abstract over OpenGL and DirectX but figuring out how to do that is going to mean a lot of time looking at the code so I&#8217;d probably need to get setup to build OGRE and Python-OGRE so I&#8217;d have binaries I could debug to aid in figuring out how the code all fits together.</p>
<p>Having support for both OpenGL and DirectX isn&#8217;t critical.  Numerous games only support one or the other.  Another option is to just write to OpenGL or DirectX directly.  There are Python bindings for both.  There are also a number of Python libraries or libraries with Python bindings that work on top of PyOpenGL.  I&#8217;ve just downloaded a number of these libraries so I can spend some time evaluating them.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/codecrafter.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/codecrafter.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codecrafter.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codecrafter.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codecrafter.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codecrafter.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codecrafter.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codecrafter.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codecrafter.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codecrafter.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codecrafter.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codecrafter.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codecrafter.wordpress.com&blog=3240053&post=19&subd=codecrafter&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://codecrafter.wordpress.com/2008/02/14/off-to-a-slow-start/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/67cd39759fc1193347de66ffa48e9cb8?s=96&#38;d=wavatar&#38;r=R" medium="image">
			<media:title type="html">joshkheitzman</media:title>
		</media:content>
	</item>
	</channel>
</rss>