In the process of working through (and doing so. much. reading.) the issues with integrating angular velocity on a quaternion last week, I cut a new release (2.0.0) of Graphmath. Turns out we’d been doing quaternions basically entirely incorrectly, so this was a chance to fix that. Things I fixed:
Those were the main three, along with some other changes better covered in the changelog.
I’ve started doing the reading on how to do collision detection, and it looks like we’ll be doing “contact manifold” generation. As far as I can tell, the idea is that instead of doing a whole bunch of math, we instead distill an overlap or penetration of two shapes into a tetrahedron and use that to do the dynamics math.
Now, using 4 points instead of 3 feels a little odd to me. One point doesn’t define anything, two points defines an axis of rotation, and three points is only enough to form a plane. Four points will make a 4-simplex (tetrahedron) and so I can see why it would be preferred, but I’m not clever enough to figure out exactly why that is what’s required for the task.
I’m continually frustrated in this project by my grasp of mathematics and physics, but what I lack in skill and knowledge I’ll make up for in stubbornness. :(
Once I’ve got that figured out, or at least implemented, it’ll be time to go back to the solver and actually implement interactive dynamics.
I’m also probably going to need to go and visualize all of the contact points. I’m not sure if the world state structure for a frame should have a dedicated
contacts field, or if perhaps those should live on the bodies, or what.
I’ve also seen an example in the qu3e engine of assemblies of shapes and bodies…which makes sense to me. Like, if you have rules for combining inertia tensors and all the rest, there’s not reason you shouldn’t be able to just say “yo this body is made up of these shapes, and when we do our collision detection and dynamics just sum over them”. It makes sense, but does feel a bit odd.
I’m also taking a page from that Valve fellow and considering that maybe the only shapes I need to implement (for now) are spheres, capsules, convex hulls, and meshes. An argument could be made for cylinders and cones, but the math is super gnarly in 3D. Planes might be useful. I’ll have to think on this.
Oh, also, I found a neat derivation of the inertia tensor by Jonathon Blow from back in the day. He’s not just a talented code monkey and auteur designer–he actually can do math!
Anyways, will hopefully have something to demo on Thursday. :)
I also finished my amateur carpentry project last Tuesday and now have a real frame to sleep on.
The chisels held up well, but both the saw and drill bits from Harbor Freight were basically dull and useless by the end of the project. The drill itself starting smoking no less than ten times, coating my clothing in this awful VOC layer. The drill also took forever to cool down, and the chuck kept spitting out bits while I was trying to use it. Only 20USD, but I miss my kit from back home.
The planks worked out perfectly and the 8” foam mattress rests on them nicely, and I nailed the height of the bed while sitting or putting on shoes, so I’m quite pleased. The plywood for the headboard would require more screwing, and that drill is on my bad side so I just wedged the head panel between the head boards and the mattress and it is quite cheerfully doing its job.
I received notice that one of my hosts had restarted itself, and found that it was unresponsive. Because reasons, I suspected this might’ve been a system compromise, and so I wiped it.
Well, the next email in the chain was a cheerful announcement that its maintenance had been finished, and that it would be restarting at its leisure. Sooooo, my other blog is now nuked and I’m going to have to rebuild the server. Luckily, I gave a talk on doing exactly this earlier in my batch so it’s not like I’m super annoyed…just very disappointed.