How to improve in simple movement integration

Started by
2 comments, last by rocklobster 11 years, 12 months ago
Hi guys,

Me and some friends are currently making a game where you fly a spaceship around and you can yaw, pitch roll freely in space. At the moment we've been just moving the spaceship along its models direction vector something like this


m_velocity += m_heading;
m_position += m_velocity;


We've also tried to improve on this by adding acceleration


m_acceleration += m_heading;
m_velocity += m_acceleration;
m_position += m_velocity;


but we have noticed that it makes it really hard to change the space ships direction doing it this way and it ends up 'sliding' for a long time. So it has become apparent we need some sort of angular influence on the direction of the space ship, so that the yaw/pitch/roll of the spaceship model has a greater influence on the direction (like when a vehicle turns its wheels, the car follows the direction of the wheels).

I was hoping there is not a too advanced solution to this because mathematics isn't my forte. I'm somewhat familiar with the term angular velocity (change in rotation?) but i have no idea how to implement this.

Thanks for any help,

- rocklobster
Advertisement
The problem here is that the behaviour you describe is actually what physics tells us to expect (if you are accelerating at 9.8 m/s/s, it will take a while to effect changes in your direction of movement if you are travelling at a few hundred metres per second). You could try increasing the acceleration or decreasing the scale of the in-game velocities, but there isn't a force that will cause a spaceship to act like a car or fighter jet.
Yeah, controlling ships obeying Newtonian physics does not come naturally.

My suggestion:
- Project the current movement vector onto the heading vector (check this link out: http://en.wikipedia.org/wiki/Vector_projection).
- Keep the component of movement that matches the heading vector.
- Apply a drag type force to the component of movement perpendicular to the heading, e.g. scale it by 0.9 every physics frame.

This would mean that if you turn you would drift a bit but end up drifting in the direction you're heading, but maybe slower than before. If you wanted it to seem even more car-like you could keep the vector the same magnitude but gradually rotate it to meet the heading.

The problem here is that the behaviour you describe is actually what physics tells us to expect (if you are accelerating at 9.8 m/s/s, it will take a while to effect changes in your direction of movement if you are travelling at a few hundred metres per second). You could try increasing the acceleration or decreasing the scale of the in-game velocities, but there isn't a force that will cause a spaceship to act like a car or fighter jet.


Hey thanks for the reply. To be honest we're not entirely looking for an accurate model of space flight, something more like a fighter jet would be more like what we are going for.



Yeah, controlling ships obeying Newtonian physics does not come naturally.

My suggestion:
- Project the current movement vector onto the heading vector (check this link out: http://en.wikipedia....ctor_projection).
- Keep the component of movement that matches the heading vector.
- Apply a drag type force to the component of movement perpendicular to the heading, e.g. scale it by 0.9 every physics frame.

This would mean that if you turn you would drift a bit but end up drifting in the direction you're heading, but maybe slower than before. If you wanted it to seem even more car-like you could keep the vector the same magnitude but gradually rotate it to meet the heading.


I'll give this a shot. Thanks.

This topic is closed to new replies.

Advertisement