2D coordinate system
3D coordinate system
Addition and subtraction
Vector addition and subtraction
Magnitude
Magnitude of a vector
Normalization
Normal vector
Dot product
Cross product
Projection
Linear Dynamics
Angular dynamics
Projectile motion
Slope motion (no friction)
Implicit methods
Explicit methods
Semi-implicit methods
Runge-Kutta family
Verlet family
Explicit method
Improved method
Implicit method
Seek
Flee
Arrive
Pursuit
Evade
Wander
Path follow
Flocking
N-Collide
Box2D
Bullet
PhysX
p2.js
Havok
Pinballs (1980+)
The Incredible Machine (1993)
Worms (1995)
Half-Life 2 (2004)
Angry Birds (2009)
INSIDE (2016)
Half-Life Alyx (2020)
Noita (2020)
Body
Rigid Body
Soft body
Shape
Fixture
Constraint
Sensor/Phantom
Rag doll
Destructible object
rope
revolute
prismatic
cone-twist
Paratrooper (1982)
Fictorium (2017)
Teardown (2020)
Applications
1 | if (min(min(min(body.M,ibody_inv.x),ibody_inv.y),ibody_inv.z)<0) { |
2 | body.M = body.Minv = 0; |
3 | body.Ibody_inv.zero(); body.Ibody.zero(); |
4 | } else { |
5 | body.P = (body.v=v)*body.M; |
6 | body.L = body.q*(body.Ibody*(!body.q*(body.w=w))); |
7 | } |
Steps
Collidable entities
Sphere
Capsule
AABB
OBB
k-DOP
Compound shapes
Convex hull
Naive solution
Quad-tree
Sweep and Prune
BSP
Grid, Oct-tree, R-tree, R+tree, R*tree, X-tree, M-tree,...
Sphere-Sphere
Sphere-ray
AABB-AABB
AABB-Ray
OBB-OBB
SAT (separating axis theorem)
Stepped world
Continuous Collision Detection (CCD)
How to respond to a collision?
Explosion
Fracturing
Restitution
Friction
Constraint
Relaxation
Coming to rest
Do you guys not have phones?Wyatt Cheng, BlizzCon 2018