I've noted that this is only my fourth entry this month, which just might be a universal low for me. Just remember that low post frequency does not imply little development. Very much the opposite! [smile]
As a side project, I've been working on a 3D software renderer. One of my resolutions for this year was to get into 3D programming, which I've decided to kick-start by learning how it's really done -- mathematically. I've taken APIs like OpenGL and Direct3D for granted, so I'm really interested in how much work is really going on under the hood..
..and after a couple of weeks of work, I can say without hesitation: a lot! It's been both an extremely challenging and rewarding experience. I've gone from having a handful of vertices rotate around a point, to simple flat-filling triangles, and now to gouraud shading and triangle interpolation. Optimizing has been one of the most difficult portions, which is where AMD's handy profiler came in handy. I haven't looked at its more intricate features, but at the quick-use level it's been great. (I can't believe how much _ftol2 is sucking up!)
(Not beautiful (to most), but hopefully you can see the sweat dripping from the edges of the window. [grin])
The key features you're seeing are:
- Matrix-based transformations (translations, rotations, scaling).
- Orthographic projection. (ie. non-perspective)
- Line-intersection-based triangle filling.
- Triangle point interpolation (for colours and z-values).
- Gouraud shading (ie. the way the colour fades across each triangle).
- Z-buffering (ie. nearer objects obscure further objects).
- Far too many hours of hard work. [smile]
Luckily, since my day job is at the Ministry of Education, there's a nice math teacher across the hall from me that enjoys helping me out with my tougher math-related problems regarding the renderer. Another person worth kudos is Jason Z and his software renderer adventures, who helped inspire me to write my own.
BaseCamp and "The New Game Project" (tm)
While I've been sworn to secrecy by Draffurd, I assure you that we're working very hard on our next game project. We decided to keep things under the radar until we have something to show (read: Milestone One), so I intend on keeping it that way. Hopefully this should be ready within the coming weeks.
Overall, I'm thrilled about this game. It will definitely be the most complex and detailed project yet, but is still manageable. Draffurd's art abilities have improved greatly since our last project, and I've got a number of tricks up my metaphorical sleeves as well.
Up until now, we've mainly focused on fairly 'shallow' games. By that, I mean we've written arcade-style games that aren't particularly deep in terms of gameplay. We expect the average player to dive in, get a few kills, then climb back out into the real world again. To date I've never created a game with a persistent world, with real mounds of content, with anysort of non-simplistic AI. I'm extremely excited at the thought of being able to take a jab at a lot of fascinating new challenges that await me with this genre that we're tackling, and how much I'll get to learn.
The secondary plan is to keep writing and building upon BaseCamp as I go, eventually creating a finished game library which I'll be able to base future games off of -- thus hugely speeding up development start-up time. This is another first: I've never written a library in the general sense of the word. I've always custom-tailored my work to a certain game, so this has been a great experience as well so far.
The tertiary plan is to work on a set of articles as I write this game. I intend to start off with my "2D Game Development with OpenGL" article I've been planning *forever*, and move onto more theoretical and deep topics as I tackle them in the game project itself. I've been dieing to give back to the community, and I figure that if I write these articles as I learn and hone the material myself, I'll retain the knowledge much better than if I were to try and recall it long after the game is completed (like Membrane Massacre and it's "post mortem" *cough*).
In summation, I'm thrilled to be working on this upcoming game project, and I'm sure it'll be received with equal enthusiasm once I tear the mask off of it. I'll try to keep the updates coming as frequently as I can -- I'm getting better and better at juggling my free time with my job. [smile]