1 / 34

Physics Programming

Physics Programming. Bryan Duggan. Introduction. So far, we have been using vector arithmetic to move and position entities This is known as Euclidian Geometry This is probably ok for projectiles, but does not result in realistic behaviour for daleks

content
Download Presentation

Physics Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Physics Programming Bryan Duggan

  2. Introduction • So far, we have been using vector arithmetic to move and position entities • This is known as Euclidian Geometry • This is probably ok for projectiles, but does not result in realistic behaviour for daleks • In the real world, the laws governing things that move have been known for centauries • This is known as Newtonian Physics

  3. These laws govern things like… • Force • Acceleration • Friction • Gravity • Energy • Heat • Collisions • Motion • All these things can be predicted using simple equations, therefore it is possible to program them into a game

  4. Physics in games • Ragdolls • Car racing • Physics puzzles • Exploding barrels

  5. Why? • Don’t have to script all behavior (easier content • creation?) • But: hard to script any behavior. Lack of artist control. • Improved realism and world consistency. • Objects “do the right thing” – but only if the model is good • Emergent behavior. • Often pleasantly surprising, often annoying. Game design must allow for unpredictable outcomes. • Players can exercise more creativity and control. • World building, story telling. • Other problems: • Extra control / AI needed for virtual creatures. • More computation needed – eats the CPU budget.

  6. Physics Engines • You can licence a physics engine and include it in your game to save you doing the programming yourself. • The big names include: • Havok • Meqon • Ageia • Newton Game Dynamics • Open Dynamics Engine (Open Source)

  7. What does it do?

  8. Physics background • Time • Scalar measured in seconds (s) • Distance • Scalar measured in Meters (m) • Mass • A measure of the amount of something • Scalar measured in Kg • It is calculated as the force of gravity acting on an object • Unit of matter • Position • A vector (so you have an origin) • Its position relative to the origin • The position of an entities centre of mass • Balance point • The average location of all its mass

  9. Physics background • Velocity • A vector (has magnitude and direction) in m/s • Magnitude is the speed • v = Δx / Δt • Δx = Change in distance • Δt = Change in time

  10. Examples • To calculate velocity: • If a ball travels 5 meters in 2 seconds, its velocity is: • v = 5/2 = 2.5 m/s • To calculate displacement: • Rearrange equation: • Δx = v Δt • To calculate positions: • If an object starts at 5 and is travelling at 10 m/s, after 3.5 seconds • P[t+1] = P[t] + vΔt • P[t+1] = 5 + (10 * 3.5) = 40

  11. We already use this equation to calculate updates! • In DalekWorld, the look vector is a unit vector • Magnitude of 1 • We multiply by speed and timeDelta to calculate the new position

  12. void MoveableEntity::walk(float units) { D3DXVECTOR3 newPos; newPos = _pos + D3DXVECTOR3(_look.x, 0.0f, _look.z) * units; BoundableEntity * boundableEntity = _world->collidesWith(&newPos); if ((!_collisionDetection) || (boundableEntity == NULL) || (boundableEntity == this)) { _pos = newPos; } }

  13. Acceleration • Vector quantity representing the rate of change in velocity over time • m/s/s or m/s2 • a = Δv / Δt • In other worlds change in velocity / the time interval in which the change took place

  14. Example • If a car starts from rest and accelerates at 2 m/s2, then every 2 seconds, 2 m/s is added to the velocity

  15. Relationship between velocity, time and acceleration

  16. Relationship between velocity, acceleration and time • The equation y = mx + c can be used to calculate points on a line, where m is the gradient and c is the intercept • As constant acceleration is a straight line, y axis is velocity, x axis is time • v = at + u • v = velocity • a = acceleration • t = time • u = velocity at time t = 0

  17. Example • Determine the velocity of a car starting with a velocity of 3 m/s and accelerating at 2 m/s2 for 3 seconds • v = 2 * 3 + 3 = 9 m/s

  18. Distance • Distance is = the area under the graph. • E.g. • In graph 1,Distance = velocity * time

  19. Distance • Area A = Δt * u • Area B = .5 * (v-u) Δt • Therefore Δx = u Δt + .5(v-u) Δt • We know v-u = Δv and • Δv = a Δt • So we can use: • Δx = u Δt + .5 a Δt2 t v-u B A u

  20. Force • Force is that quality that can alter an objects speed or direction • Force is nothing to do with motion • Force is only required to affect a change • For example no force is required to keep an arrow flying, only to start it off • Many forces can act on an object at the same time. If the sum of those forces is 0, the object will not change velocity

  21. Friction Gravity Force from the table Gravity Force from wind Gravity Buoyancy Friction

  22. Calculating acceleration • a = F/m or F = ma • a = acceleration • F = Force • m = mass • Example: • If the boat in the diagram has a mass of 2000kg and is accelerating at 1.5m/s2 • The force acting on the boat is: • 2000 * 1.5 = 3000N

  23. Also! • If we know: • Force, position mass and time • We can calculate the acceleration and update the position and velocity

  24. Example class SpaceShip { private: D3DXVECTOR3 _pos; D3DXVECTOR3 _velocity; float _mass; } SpaceShip::update(float timeDelta, D3DXVECTOR3 * force) { D3DXVECTOR3 acceleration; // First calculate the acceleration acceleration = * force / _mass; // Now calculate the change in velocity due to acceleration _velocity += acceleration * time; // Now update the position _pos += _velocity * timeDelta; }

  25. In summary • F = Ma • a = Δv/Δt • v = Δx/Δt • Δx = v Δt • Δx = u Δt + .5 a Δt2

  26. Problem 2 • A person is located at position (0,0) • The person has a Mass of 150Kg’s • How much force is required to move the person to a position of (20, 20) in 20 seconds

  27. Problem 3 • If person is located at a position of (15, 5) and travelling at a velocity of (2, 2), calculate the force that should be applied to move the person to a position of (-7, 6) in 10 seconds

  28. Problem 4 • If an item is dropped from the top of the empire state building, what will its velocity be by the time it reaches the ground, given that the height of the building is 381m • Acceleration due to gravity is 9.8M/s/s

  29. Friction • Friction is the force that opposes the relative motion or tendency of such motion of two surfaces in contact • =vector velocity of surface •   =magnitude of the velocity vector •   = the force of friction •   = the force normal to the contact surface •   = the coefficient of friction

  30. Coefficient of friction • Coefficient of friction is a scalar value which describes the ratio of the force of friction between two bodies and the force pressing them together. • The coefficient of friction depends on the materials used -- for example, ice on metal has a low coefficient of friction (they slide past each other easily), while rubber on pavement has a high coefficient of friction (they do not slide past each other easily).

  31. Force normal • The force normal is the amount of force pressing down on the object • For example, if you press down on something, it will have more friction • If you do not press down on something, then the force normal will be the force of gravity

  32. Steering • Calculate all the forces acting on an entity • Sum them all together to determine the force to be applied • Calculate the acceleration as:Force / Mass • Calculate the velocity as:OldVelocity + acceleration * timeDelta • Calculate the position as:oldPosition + velocity * timeDelta

  33. Seek • Returns a force that directs an agent towards a target position • First calculate the desired velocity • The target position – the entity position • Normalize • Multiply by the max speed • Now calculate the force, by subtracting the current velocity

More Related