Skip to main content

giving something back, physics for games

  • Was looking for a reason to learn sql, and was feeling the urge to play an oldschool pen and paper rpg.

    didn't like gurps licence, nor dnd's 'open' source licence, then while looking around, found legendary quest, which is kind of neat.…

  • somewhat random, got up to speed with SDL (simple media layer) to see what it could do for me to make my life easier, also rewrote my game engine to be a lot more generic and support unittest.

    grey image is having fun bluring the depth…

  • Note. Not my base mesh and texture, purchased a highres model from turbosquid (20000+ vertex, several 4098x4098 textures) and reduced it to 600 vert and a 2048x2048 texture page (for diffuse, alpha, normal and specular maps)

    was currious…

  • Have never done that much database/php stuff, but was currious if you could make a game using javascript/canvas rather than flash.
    this seemed fine till trying to get Internet Explorer to work, in which case i would like to think flash works…

  • Made an update for the Bikini Beach Volley Ball game, 4 new girls, one new location.
    Screen shots are from iPhone and iPad.

  • a week of prototyping (6 prototypes), 1 of which failed and not included, another of which i am still working on and not online yet (procrastinating by blogging rather than finishing it)

    Seems prototyping is the popular thing to do at the…

  • capture of iPhone gameplay of my lattest game, Bikini Beach Volleybal

  • and so the quick 2 week project to recover from a big project/ experement with stencil shadows is now up to the 4 week mark.
    wrote a gui/ font system and tools pretty much from scratch which is a good way of making a 2 week project take 4…

  • because i can, though the play mechanic is pretty much pong, and after spending the day making animation i'm kind of wiped out to type anything interesting.

    the main photo, had one of my female friends critique the bikini girls appearance…

  • Bit of a slow week, finished 'chico of the dead' (once it is available in the app store i get to start promoting it, fun) and during the recovery time after a big project, tidied up some randoms bits of tech, simplified renderer, and added…

Submitted by davidcoen on

harro, thanks to the people who have helped/ commented on my post, though i might try to give something back. (ie, finished another step of my physics engine)

setup. have object in game world, and want it to move/ collided/ have forces act on it/ momentum

a potential solution. reduce each object to a 'force diagram' at the begining of each frame (quantify all the forces on the object) and resolve this in the world. (so, i have this force from gravity, this from velocity, now subtract the static coeeficent of resting on an object, if force still left then kinect coefficent and or whatever...)

the math.
SumForce = (velocity(old) * mass ) / time
SumForce += (acceleration forces in world(gravity & whatever)) * mass
SumForce -= restitance force if im resting on another object

Displacement = ((SumForce * time * time) + ( velocity(old) * time )) * 0.5
Velocity = (SumForce * time) / mass

_note. displacement is the average of old and new sumforce * t^2, I just think of it in terms of velocity, as i use it in collision....

perhaps this could be of sue to someone, derived from
F = ma and
x - x0 = vt + 0.5at^2

Submitted by CombatWombat on Wed, 10/12/03 - 8:58 PMPermalink

Hi David, yeah I've been playing around with similar stuff, and I'm doing something similar - although I'm breaking it into two parts - statics and dynamics. Statics being momentum transfer/conservation of momentum, and Dynamics being this force resolution you're talking about. You'd probably also extend this to building up a graph of objects that are touching, and chain the momentum transfer/conservation of energy calculations.

For example, if A is pushing on B and B is resting up against C, you need to resolve the momentum transfer as a chain to get everything moving with the appropriate velocities.

It looks like you're attempting to handle both the Statics and Dynamics in one, which is probably going to be really tricky. The momentum (ie velocity(old)*mass bit above) isn't a force, and including it will essentially mean that the faster an object is travelling the faster it will accelerate.

You probably want to divide SumForce through by the mass (a = F/m) - unless you're assuming everything is the same mass anyway. And think the last line for Velocity = should be Velocity +=.

I've yet to finish the conservation of momentum/energy part of my system, I may yet collapse the Statics and Dynamics back into one lot of code, but want to get it working separately first (much easier to debug :)

Cheers,

Mark

Submitted by MITA Studios on Thu, 11/12/03 - 7:53 PMPermalink

Hey,

I wrote a simple physics engine about a year ago which handled particles, spring-damper systems, and environments (friction, air resistance etc). One word of warning, at present, you're using Euler integration to calculate your values of Displacement and velocity:

s = u*t + 1/2*a*(t^2)

u = initial velocity, s = distance, a = acceleration, t = time change

This is just one of the equations of motion, but your equation:
x - x0 = vt + 1/2*a*t^2 is an Euler integration, which may cause stability issues later down the line.

When I first wrote my physics engine, I though, yeah yeah, stability crap, it'll be fine, but then when my particles somehow started gaining energy in their spring-damper systems and oscillated to a massive speed, I realised that maybe Euler integration wasn't going to work.

You have a number of options:

Mid-point integration
4th order Runge-Kutta integration
Taylor Series expansion

none of them are particularly exciting, but I'm sure if you search for them, they'll pop up all over the place, and won't be too hard to implement!

cheers

Matt

Submitted by shiva on Thu, 11/12/03 - 9:22 PMPermalink

add verlet integration to that list

Submitted by davidcoen on Fri, 12/12/03 - 10:41 AMPermalink

cool, thanks for the comments, yes, have been needing some massive dampening values on the springs..

Posted by davidcoen on

harro, thanks to the people who have helped/ commented on my post, though i might try to give something back. (ie, finished another step of my physics engine)

setup. have object in game world, and want it to move/ collided/ have forces act on it/ momentum

a potential solution. reduce each object to a 'force diagram' at the begining of each frame (quantify all the forces on the object) and resolve this in the world. (so, i have this force from gravity, this from velocity, now subtract the static coeeficent of resting on an object, if force still left then kinect coefficent and or whatever...)

the math.
SumForce = (velocity(old) * mass ) / time
SumForce += (acceleration forces in world(gravity & whatever)) * mass
SumForce -= restitance force if im resting on another object

Displacement = ((SumForce * time * time) + ( velocity(old) * time )) * 0.5
Velocity = (SumForce * time) / mass

_note. displacement is the average of old and new sumforce * t^2, I just think of it in terms of velocity, as i use it in collision....

perhaps this could be of sue to someone, derived from
F = ma and
x - x0 = vt + 0.5at^2


Submitted by CombatWombat on Wed, 10/12/03 - 8:58 PMPermalink

Hi David, yeah I've been playing around with similar stuff, and I'm doing something similar - although I'm breaking it into two parts - statics and dynamics. Statics being momentum transfer/conservation of momentum, and Dynamics being this force resolution you're talking about. You'd probably also extend this to building up a graph of objects that are touching, and chain the momentum transfer/conservation of energy calculations.

For example, if A is pushing on B and B is resting up against C, you need to resolve the momentum transfer as a chain to get everything moving with the appropriate velocities.

It looks like you're attempting to handle both the Statics and Dynamics in one, which is probably going to be really tricky. The momentum (ie velocity(old)*mass bit above) isn't a force, and including it will essentially mean that the faster an object is travelling the faster it will accelerate.

You probably want to divide SumForce through by the mass (a = F/m) - unless you're assuming everything is the same mass anyway. And think the last line for Velocity = should be Velocity +=.

I've yet to finish the conservation of momentum/energy part of my system, I may yet collapse the Statics and Dynamics back into one lot of code, but want to get it working separately first (much easier to debug :)

Cheers,

Mark

Submitted by MITA Studios on Thu, 11/12/03 - 7:53 PMPermalink

Hey,

I wrote a simple physics engine about a year ago which handled particles, spring-damper systems, and environments (friction, air resistance etc). One word of warning, at present, you're using Euler integration to calculate your values of Displacement and velocity:

s = u*t + 1/2*a*(t^2)

u = initial velocity, s = distance, a = acceleration, t = time change

This is just one of the equations of motion, but your equation:
x - x0 = vt + 1/2*a*t^2 is an Euler integration, which may cause stability issues later down the line.

When I first wrote my physics engine, I though, yeah yeah, stability crap, it'll be fine, but then when my particles somehow started gaining energy in their spring-damper systems and oscillated to a massive speed, I realised that maybe Euler integration wasn't going to work.

You have a number of options:

Mid-point integration
4th order Runge-Kutta integration
Taylor Series expansion

none of them are particularly exciting, but I'm sure if you search for them, they'll pop up all over the place, and won't be too hard to implement!

cheers

Matt

Submitted by shiva on Thu, 11/12/03 - 9:22 PMPermalink

add verlet integration to that list

Submitted by davidcoen on Fri, 12/12/03 - 10:41 AMPermalink

cool, thanks for the comments, yes, have been needing some massive dampening values on the springs..