If you can't read please download the document
Upload
daniel-pope
View
4.708
Download
5
Embed Size (px)
Citation preview
Programming Physics Games with OpenGL
Daniel Pope ~ @lordmauve
Code samples are available at
https://bitbucket.org/lordmauve/physicsgames
Outline
Introduction to OpenGL
Introduction to physics engines
Connecting the two
A bit more about physics engines
Tips on writing games
What is OpenGL?
Low-level 2D and 3D graphics library
Usually hardware accelerated
Can only draw points, lines, triangles
But triangles can be textured
GPUs can evaluate a short program for each vertex or fragment in a high-level language
What is a physics engine?
Given a model of the world at time t
Apply physical laws to compute a model of the world at time t + t
(for small t)
(demo 1)
PyBox2Dhttp://pybox2d.googlecode.com
http://www.pymunk.org
PyODEhttp://pyode.sourceforge.net/
PyNewthttp://code.google.com/p/pynewt/
PyBullethttps://launchpad.net/pybullet
OpenGL wrapper/scenegraph
Higher level API
Window Creation
Texture Loading
Sprites/Texture Atlases
Model Loading/Rendering/Animation
PVS Potentially Visible Set calculation
Graphics Algorithms
pyglet
cocos2d
kivy
http://www.pyglet.org/
http://cocos2d.org/
http://kivy.org/
Panda3Dhttp://www.panda3d.org/
Python-Ogrehttp://www.python-ogre.org/
PyCrystalhttp://www.crystalspace3d.org/main/PyCrystal
apt-get install python-box2d
apt-get install python-pyglet
(pyBox2D == 2.0.2ish)
What a game does
while True: dt = wait_one_frame() process_input() update_world(dt) draw_world()
(demo 2)
A physics simulation
Newton's Laws
Collisions
Constraints (eg. Joints)
Newtonian Quantities
Mass/Inertia
Force
Position
Velocity
Acceleration
Momentum
Impulse
Rotational Equivalents
LinearAngular
Mass/InertiaMoment of Inertia
ForceMoment/Torque
PositionAngle
VelocityAngular Velocity
AccelerationAngular Acceleration
MomentumAngular Momentum
ImpulseAngular Impulse
Approximately
net_force = sum(forces)acceleration = force / mass velocity += acceleration * dtposition += velocity * dtforces = [GRAVITY * mass]
+ rotational equivalents
Time step
Collisions
Detect when two shapes intersectBroad phase (O(n log n)?, approximate)
Narrow phase (O(n))
Exchange momentum
Move them apart, keep them apart
Very fast moving objects (eg. bullets) may have passed completely through each other in a single time step compute time of first intersection
Shapes are convex polygons/polyhedra
Separating Axis Theorem
Given two convex shapes,
it is possible to draw a straight line between them if and only if the two do not intersect.
Bodies
Collections of shapes
Compute centre of massCompute moment of inertia
Creating bodies
Linking physical objects with OpenGL
Draw sprites
Create physical models corresponding to sprites
Instantiate objects into physics simulation
Each frame:Step time
Read position + angle of body
Draw OpenGL quads/sprites at position + angle
(0, 1)
(0, 0)
(1, 0)
(1, 1)
(0, 1)
(0, 0)
(1, 0)
(1, 1)
Texture Coordinates
Drawing textured quads
(demo 3)
Collision Callbacks
What happens in game when shapes collide?
Register a callback to take action Destroy/change the object
Create a joint
Play a sound
tanks demo
Joints
pin joint bodies attached at a point, can rotate
prismatic joint keep bodies aligned, like a piston or a train on a rail
distance joint keep points on the two bodies at the same distance from one another, like a tow-bar or crank shaft
pulley joint the position of a body along one axis is linked to the position of another body along another axis
Pin Joint
Joint motors/limits
Motors apply torques or forces between the bodies
Joints can have limits your knees do not bend backwards
truck demoheli demo
Features I've not yet mentioned
Collision groups/masks
Sensors
Non-rotating bodies/Infinite moment of inertia
Introspecting the world
Sleeping
Complications I've skipped over
Constraint solving
Overconstraint
Stability
Graphics and Sound
Cute and colourful is attractive
Simple shapes and outlines are much easier than other styles
Free/CC game art resources available
The art of tuning a physics engine
Tuning magic numbers:Forces
Torques
Density/Friction/Restitution
Re-shaping bodies/redrawing sprites
At which point does a force act?
Joints/joint limits/joint motors
Collision groups/filters
To every action there is always an equal and opposite reaction: or the forces of two bodies on each other are always equal and are directed in opposite directions. - Archimedes
Compound effects
Buoyancy
Lift
Explosions
Soft bodies
Drag effects
Joints or objects 'snapping'
Physics Games
Intuitive for players
The game is mastering the physics
Constrain degrees of freedom to balance difficulty/reward/punishment
Physics Puzzles
Overlapping constraintsPhysical constraintsThing in the way
Thing not in the right place
How to overcome gravity
Wrong physical behaviour unless...
Non-physical constraintsPlayer can't breathe underwater
Only x can pass through this barrier
Reasons to use a physics engine
Tons of maths for free
Cool effects/cheap animations
Game world responds to player; player is empowered/immersed
Extra layer of complexity/interest for the player
Intuitive puzzles
Reasons not to use a physics engine
Extra dependency/pain to install
Time consuming to tune
Too many degrees of freedom may make some mechanics difficult or impossible to work in
Daniel Pope@lordmauve
Code samples are available at
https://bitbucket.org/lordmauve/physicsgames
Click to edit the outline text formatSecond Outline LevelThird Outline LevelFourth Outline LevelFifth Outline LevelSixth Outline LevelSeventh Outline Level