Skip to main content

giving something back, physics for games

  • Have the visuals for the particle system and the collision objects loading and saving in the scene.

    image is scene with sphere tree rendered, and several hundred particles in a line, and textures. (wanted to see the performance hit of…

  • just finished the scene database sorted camera query (put in camera, get depth sorted visual objects to render which are inside the camera sphere and fustrum) other fun involved improving the stablity of the barrel distortion math in the vertex…

  • well, missed a week (was going to do weekly updates of progress) this was due to travel, sickness, and most of the work being non-visual.

    do have a world system (or scene database) loading and saving, this required support of loading and…

  • this week's update has limited visual improvment, have been playing with emulating barrel distortion in the vertex shader (slight radial scale on vertex)
    the intent is that with a more detailed world the effect should be more noticable,…

  • wow, barely getting 20hours a week to work on this so progress is slowwwww (>_<)

    finishing up first pass on the renderer (including refactor of generic data store for geometry to pass to openGl to turn into VertexBufferObjects)

  • nothing that fancy to show&tell, just openGl rendering in a window, some winGUI debug text on top, some lights, boxes, a display list unit sphere, and a arbitary piece of geometry called out as a plane with a texture on it. some of the things…

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..