Turns out my issues with the airplane control were really due to me using an incomplete flight model. I wasn’t incorporating the angle of attack and the subsequent lift coefficient and increase in dynamic pressure.
I didn’t think it would be such a big deal but it makes a huge difference and solves the problem that unless I gave the plane a very large thrust to weight ratio it had almost no responsiveness. The trouble with a high thrust to weight ratio is that anything greater than 1.0 means your plane can completely oppose gravity and climb up to space unhindered (disregarding the change in air pressure at high altitudes). This ruins one of the key game play elements I wanted to incorporate which is the aerodynamic stall.
For example generally only really modern jet planes have a TTW ratio > 1.0f. Most commercial planes are well below that. Concord for instance has a ratio of 0.373 (although that is a passenger craft so weighs a lot more also).
So, back to the angle of attack, for most aerofoils there is a sweet spot at an angle of attack of about 20 degrees where the lift coefficient is maximal. Once I had this approximated using something like:
lift coefficient = 1.0f + sin(angle of attack)
Things started getting a lot better, artificially multiply this by 2 and you’ve got a plane which picks up nicely when you pull up the nose. It feels a little more like a glider rather than a jet in that it’s more about lift than engine thrust but it feels pretty realistic and flighty. Try to climb too fast and you’ll lose lift and find the plane quickly returning to earth, align the plane with it’s direction of travel, pull up the nose and you can save it just before the crash which is exactly what I originally wanted.
So that’s all running nicely, it needs a bit more tweaking, I’m not actually using the drag coefficient at the moment which I’ll try out soon.
This is an awesome reference that does a much better job describing these concepts than Wikipedia (although that’s still useful):