Créer une présentation
Télécharger la présentation

Télécharger la présentation
## Rigid Body Motion

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -

**Game Physics**• “Linear physics”– physics of points • particle systems, ballistic motion… • key simplification: no orientation • “Rotational physics” • orientation can change**Rigid Bodies**No longer points: distribution of mass instead. Rigid bodies: distances between mass elements never change. Orientation of body can change over time.**Rigid Body Translation**• Can treat translational motion of rigid bodies exactly the same as points • Single position (position of center of mass) • F=ma (external forces) • v = ∫a dt • x = ∫v dt • momentum conservation**Rotation**• Rigid bodies also have orientation • Treating rotation properly is complicated • Rotation is not a vector (rotations do not commute, i.e., order of rotations matters) • No analog to x, v, a in rotations?**Angular velocity**• Infinitesimally small rotations do commute • Suppose we have a rigid body rotating about an axis • Can use a notion of angular velocity: • ω = dθ/dt**Angular velocity**• Connection between linear and angular velocity • Magnitudes: v = ωrperp • Want vector relation • Nice to have angular velocity about axis of rotation (so it doesn't have to change all the time for an object spinning in place) • Let v = ω x r**Angular velocity**• v = ω x r • Or, ω = r x v / |r|2 • Note: ω, r, v vectors • Angular velocity defined this way so that constant angular velocity behaves sensibly • spinning top has constant ω**Applying force**• What happens when you push on a spinning object? (exert force) • F=ma, so we know the movement of the centre of mass • How does the force affect orientation?**Torque**• T = r x F • r is vector from origin to location where force applied • for convenience, often take origin to be center of mass of object • F is force • Magnitude proportional to force, proportional to distance from origin**Intuition for Torque**• Larger the larger from the centre • Lever action: small force yields equivalent torque far from fulcrum**Direction of Torque**• T = r x F • Perpendicular to both location and force vectors • Direction is along axis about which rotation is induced • Right hand rule: thumb along axis, fingers curl in direction of rotation**single particle**• T = r F sinθ • T = r Ft • Ft = mat = mrα • T = mr2α • Let I = mr2 • T = Iα**Many particles**• Real objects are (pretty much) continuous • Game objects: distribution of point masses • not always, but common • Can get reasonable behaviour with (e.g.) four point masses per rigid body • Single orientation for body • Single centre of mass (of course)**Changing Coordinate Systems**• We dealt with changing coordinate systems all the time before • Rigid bodies are much simpler if we treat them in a natural coordinate system • origin at the centre of mass of the body • or, some other sensible origin: hinge of door • Need to transform forces into body coordinate system to calculate torque • Transform motion back to world space**Angular momentum**• Define angular momentum similarly to torque: • L = r x p • Note that with this definition, T = dL/dt, just as F = dp/dt**Force and Torque**• Note: a force is a force and a torque • Moves body linearly: F=ma, changes linear momentum • Rotates body: produces torque, changes angular momentum**Conservation of Angular Momentum**• Consequence of T = dL/dt: • If net torque is zero, angular momentum is unchanged • Responsible for gyroscopes' unintuitive behaviour The gyroscope is tipped over but it doesn’t fall**Moment of Inertia**• Said that moment of inertia of a point particle is mr^2 • In the general case, I = ∫ ρ r^2 dV where r is the distance perpendicular to the axis of rotation • Don't know the axis of rotation beforehand**Moment of Inertia**• I = ∫ρ(x,y,z) dxdydz**Diagonalized Moment of Inertia**• Luckily, we can choose axes (principal axes of the body) so that the matrix simplifies: • I = • where, e.g., Ixx = m(y*y + z*z) • Off-diagonal entries called "products of inertia"**Avoiding products of inertia**• Do calculations in inertial reference frame whose axes line up with the principal axes of your object • Transform the results into worldspace • Moment of inertia of a body fixed, so can be precomputed and used at run-time**Moment of Inertia**• In general, the more compact a body is, the smaller the moments of inertia, and the faster it will spin (for the same torque)**Fake I**• Not doing engineering simulation (prediction of how real objects will behave) • Can invent I rather than integrating • Large values: hard to rotate about this axis • Avoid off-diagonal elements**Fake constants**• For that matter, can fake lots of stuff • Different gravity for different objects • e.g., slow bullets in FPS • e.g., fast falling in platformer • fake forces, approximate bounding geometry**Case in 2D**• In 2D, the vectors T, ω, α become scalars (their direction is known – only magnitude is needed) • Moment of inertia becomes a scalar too: • I = ∫prdA**Single planar rigid body**• state contains x, y, θ, vx, vy, ω • Have • F = ma (2 equations) • T = Iω • x = ∫vx dt • y = ∫vy dt • θ = ∫ω dt • Integrate to obtain new state, and proceed**Rigid body in 3D**• Need some way to represent general orientation • Need to be able to compose changes in orientation efficiently**Quaternions**• Quaternion: structure for representing rotation • unit vector (axis of rotation) • scalar (amount of rotation) • recall, store (cos(θ/2), v sin(θ/2) ) • Can represent orientation as quaternion, by interpreting as rotation from canonical position**Quaternions**• Rotation of θ about axis v: • q = (cos(θ/2), v sin(θ/2)) • "Unit quaternion": q.q = 1 (if v is a unit vector) • Maintain unit quaternion by normalizing v • Arbitrary vector r can be written in quaternion form as (0, r)**Quaternion Rotation**• To rotate a vector r by θ about axis v: • take q = (cos(θ/2), v sin(θ/2) • Let p = (0,r) • obtain p' from the quaternion resulting from qpq-1 • p' = (0, r') • r' is the rotated vector r**Rotation Differentiation**• Note: • q(t) = (s(t), v(t)) • q(t) = [ cos(θ(t)/2), u sin(θ(t)/2) ] • For a body rotating with constant angular velocity ω, it can be shown • q’(t) = [0, ½ ω] q(t) • Summarize this ½ ω q(t)**Rigid Body Equations of Motion**Using quaternions gives = d/dt**P and L**• Note that • v = P/m (from P=mv) • ω = I-1L (from L = Iω) • Often useful to use momentum variables as main variables, and only compute v and ω (auxiliary variables) as needed for the integration**Impulse**• Sudden change in momentum • also, angular momentum (impulsive torque) • Collision resolution using impulse • new angular momentum according to conditions of collision • algorithmic means available for resolving