Real-Time Collision Detection

With all the craziness that last weekend brought, one of which was a book I ordered from Amazon. Just like the title says its a book about collision detection within 2D and 3D environments. It’s a bit on the expensive side, about $50, but its worth every penny. I had a chance to read the first 5 chapters on Sunday. It started off with a quick math primer and then dove head first into how collision detection works. It has a few chapters on bounding volumes and space partitioning; the two topics I have been obsessing over for the last few weeks.

Possibly the best thing about this book when compared to my other math books is that it explains the concepts with code, more then with math. For most programmers, this is a godsend. Reading a few lines of code is much easier (at least, for myself) then trying to comprehend or remember mathematical symbols.

Regardless, If you’re building an engine of some sort (Graphical, Physics, etc), this book is definitely an asset. Collision detection is not only used in physics engines, it is the core functionality of Octrees and Scene Management. Ergo, it is an integral part of an engine. Although, I don’t recommend this book to novices, or people that do not have any 3D engine building knowledge under their belt. It is Math and Algorithm heavy and requires substantial engine design theory.

EDIT: Looking through some of the supplementary books from the Morgan Kaufmann series, they all seem very interesting. If those books are of the same quality as the Real-Time Collision Detection book, then this entires series of books will end up on my bookshelf very soon. It’s something to be desired.

To OSG, or not to OSG.

I have been working on my game engine (Which still does not have a name; Suggestions are appreciated) for a while now. It has seen its share of refactors ever since I started on it back in 2006. But recently, I have come to a fork in the road. I am overwhelmed with the amount of things that I need to keep track of which makes me second guess some of my design decisions that I have made. One of which, is weather or not to write my own scenegraph or to use a stock one, say, OpenSceneGraph.

From experience, I can tell you that the amount of time that it would require to learn, implement, and test OSG’s implementation would be comparable to the amount of time it would take me to write one from scratch. I have been plagued with these sorts of decisions ever since I started the rewrite of my code. The benefits of using a library over writing your own can only be determined by the ease of use of the library. For example, if its easy to build, incorporate and debug then it probably is better to choose it then to write one from scratch. In the case of OSG, the library is big. No, its Massive!

I am still not convinced that OSG would be worth using over my own implementation, simply because of the learning curve and the work required to properly incorporate it into my engine. I would literally have to wrap my engine around OSG, rather then have it work symbiotically. That just does not sit well with me. Regardless, I will still poke around inside OSG and learn how their scenegraph implementation works.

Where is my trusty Bearded Axe, its time for some hacking!

The Moz Cause

Being an avid slashdot reader, I read a lot of stories that are mostly based off fact. Then again, some are based off of total trash. I have witnessed the lack of informational prowess by story writers, but in this latest case, I don’t know where I should stand. The article in question is about the Acid3 test that browsers are benchmarked on. According to this story, Safari scores 90% and my favorite browser of all (Firefox) scores a mediocre 69%. This tells me one of two things, either the story is a complete joke or it’s a bold statement about Firefox’s web compliance. I have use Safari and I am not very impressed. It has many flaws that hamper my browsing experience (such as tables not being aligned correctly, flash issues, colors, etc). But those are all small things and if this Acid3 test is the industry “standard”, then I say its not much of one. I believe it might be favoring the Safari side or that it was built off standards that Safari developers pushed forth. In essence, a standard is a standard is a standard and should be taken with a grain of salt when trusting it’s verdict.

Et Tu Singletone.

Seems that my favorite pattern is also the bane of my current Game Engine development. Turns out that a singleton pattern doesn’t like to play nice with Dynamically Linked Libraries. The whole notion of being dynamic is counter productive to static members inside functions or classes. Looks like the only way to actually fix this is to wrap it all up in a big handler of some sort and have the calling code manage it. Either that or create a section of shared memory in the DLL and allow it to manage the singletons. Seems like a bit of a pain in the butt just to avoid a global variable. Hmm, unless I can wrap it in another creational pattern, possibly Builder or Abstract Factory…

More research is required. And research requires Tea. Therefore more Tea is required.

At A Crossroads.

On my spare time (if there is such a thing), I have been slowly putting together my Game Engine. The foundational stuff is pretty much written and tested and I am just about to start writing the heart of this engine, the renderer. But as I’m thinking about the code structure, I am also debating if I should stick it out on the web as an Open Source project. I read up on a bunch of licenses but none of them were exactly what I needed. The type of license I’m looking for is one that would credit my name whenever it is used or redistributed. Also, it would force people who wants to use it for commercial use to cough up some coin. In other words: free for personal use, not free for commercial use, and my name to be always credited. Anyone know of a license like this?

One of the licenses I found useful was the MAME license. I might ask its author for a copy. On another note, I just set up an SVN server to host my engine. Also, I am slowly putting together a webpage for this project so people can easily find it. I’ll post the link soon.

EDIT: Dave advised me against using some of the lesser known licenses and advocated LGPL. I’m going to give LGPL a thorough read.

Code Management — Refactor This!

During my studies, every assignment I have been handed (with the exception of one) has been started from the very beginning. I was asked to produce an end result by designing, implementing, and testing the software I have written. I have no problems with the Software Development Life Cycle, its actually logical and concise. What starts to bug me is being shoved into a very dirty, unorganized code base and then told that I am not allowed to clean up. Instinctively, my brain figures out more efficient ways of doing things with the code then what is presently in place. But what I’m told is that features have priorities. In the back of my head, I know this is a time-bomb waiting to go off.

So, I move on. Each task that needs to be done has to work with the dirty code, forcing me to jump through hoops. The new code may end up being buggy or having some undesired effect. Lets, for instance, say this new code causes a bug. A fix is issued and it takes 20 minutes to fix. In another portion of the code, something else breaks because it was hooked up wrong. Another 20 minute fix. And so on, and so on. All those 20 minute fixes add up and eventually take up more of my time then it would to refactor the old code into something that is easily extensible and understandable. At this point, the code is twice as big and refactoring would take 2 days. Also, each feature that would take 10 minutes to implement, takes more and more time to implement because the code is convoluted. 10 minutes turns into 15 minutes, 1 hour turns into 3 hours, and so on. Great waste of time, in my humble opinion.

So when is an optimal time to refactor? Would it be at the very beginning when the problem is initially found? Should we wait until the critical features are implemented? Should we just forget about it and keep adding patches until the code is a giant maze of unreadable spaghetti? Why should my job turn into a Dilbert comic?

I honestly don’t know. My first instinct is to give refactoring a try at the very first time I notice a problem. Fix it before it spreads, essentially. Some think otherwise.

Happy New Year!

Well, Happy New Year to all. I, for one, am relieved that this year has come to a close. December was by far, the worst - Exams, moving into a new apartment, Christmas with 3 families, and over $1000 spent on presents.

I gave Connie a Nintendo Wii for Christmas and so far I’ve been the one playing it the most. But for those of you that are looking to buy one, I say good luck. Walmat, Best Buy, etc. have them in stock, but only put one or two out on their shelves per day. They do this so that your forced to come into their store and “browse.” So unless your incredibly lucky, you will be greeted to empty shelves. But if you do get one, I suggest getting a game by the name of Rayman, Raving Rabbids. Its my newest addiction.

Apple Is Covering All Bases.

I don’t use iTunes or an iPod but I found this rather hilarious. Someone pointed out that the iTunes EULA has this sentence in it:

“You also agree that you will not use these products for […] the development, design, manufacture, or production of missiles, or nuclear, chemical, or biological weapons.”

My plans of attaching an iPod to my new sidewinder in the hopes of playing Wagner’s Flight of the Valkyries as it flies towards my foe just got thrown out the window. Darn it.

The BumpTop Presentation

The Presentation Info:

Location: Seneca @ York, room T2109.
When: Tuesday, Nov 6, 2007 at 11:40am.

I will be discussing the relationship between Human Computer Interaction and high performance 3D graphics. Also, I will demonstrate the work that I have been doing lately on the BumpTop 3D Desktop. All are welcomed to attend.

Code, En Masse.

A few weeks ago, I aimlessly wandered into Dave Humphrey’s office and we had a quick chat and got to catch up on what we have been up to. I inquired about the Moz Dev stuff thats going on in Seneca, and he inquired about my job at BumpTop. As our conversation went on, he asked me to show him what BumpTop looks like. So as I was pulling out my laptop, Evan Weaver and several other teachers managed to squeeze into Dave’s already cramped office. I gave a quick demo to them all and, to make a long story short, It caught the attention of Evan Weaver and the like. He expressed an interest in having me give a short presentation to his game programming students. I agreed. Since Cathy Leung is teaching games programming this semester, I will be presenting during her course, on November 6th at 11:40am. I don’t quite have the information on where it will be held or what I’ll be talking about, but stay tuned and information will be posted soon. There will be a demo of BumpTop somewhere in the midst of that presentation.

On a different note, I’ve begun diving head first into the magical world of assembly language. Oh how marvelous it is. Mainly, it has to do with building my game engine and trying to take advantage of the SSE/3DNow! architecture.

Seems fun so far (Famous last words).