I've gone through a plethora of resources on collision detection and response, and as a result I've managed to implement a fairly robust routine for my engine, which currently uses brushes for meshes and spheres for actors. It is modeled after the Quake 2 source code, which has been a treasure trove of a resource to learn from. As a result I love brushes - they're simple, they support any convex shape, can be trivially extended to boxes and k-DOPs and, most importantly, are very cheap to test.
However, there are a few questions that I'm unclear about:
1) I'm guessing brush-based collision either is or is becoming passe in modern engines in favor of a more expensive polygon soup approach, which is woven directly into the physics engine. If nothing else, then one glaring reason for this stems from a fairly subtle point that annoys me more than it perhaps should. Which is corner turning:
[attachment=28567:brushcollisioncorner.png]
Notice the gap between the circle and the rectangle. The circle collided with the rectangle and slid down its east wall as it was trying to move south-west. Hence, due to the direction vector, it wants to go right as soon as possible (or left, depending if you're the circle or the player ). As it approaches the bottom of the rectangle, it should hug the corner, but it can't, because it happens to be stuck behind the rightmost plane of the brush until the circle's top extent clears across the brush's bottommost plane, at which point it is no longer potentially inside the brush and can safely move west. As best I can tell there's no way to overcome this in a brush-based collision system short of adding a bevel to the corner of the collision brush itself. If anyone can suggest a way to around this behavior, I'd love to hear it. The thing is, I don't think this is even noticeable in a 3D game, especially if you're in first person perspective. But in an ortographic world it quickly becomes evident and soon enough fairly annoying.
2) Translating brushes is fairly trivial. However when it comes to rotating them, as best I can tell, it's easier to just rebuild the entire collision brush from scratch. I've yet to find a plane rotation routine that doesn't boil down to recalculating the plane equation. That being said, it's likely still cheaper than rotating a polygon-based collision mesh.
3) I started messing around with a GJK handler for moving objects a while ago and got it to work with two spheres. However, I kind of got stuck extending the code to brushes. At least it wasn't as trivial as I would have hoped (more to the point, support calculation for brushes turned out to be less than trivial, especially with rotation thrown into the mix). Incidentally, GJK wasn't around when Q1 and Q2 were written, so who ever wrote the collision code opted for a fairly "cheap" workaround for the sweep test - essentially the collision brushes are expanded to simulate the Minkowski space, which then allows point-brush collision testing without using anything as fancy as supports. It's pretty nifty in theory, but I don't think it handles brush collision with anything other than a sphere (or a capsule that's squished into a spheroid).
While points 2 and 3 are a matter of time and research to overcome, I'm still unsure what to do about point number 1. I've gone so far as to consider adopting Bullet, but frankly I've put so much time into this and learned so much, that I don't want to throw it all aside...