Difference between revisions of "Rigid Body Dynamics"

Line 1: Line 1:
==Introduction==
{|align=right
{|align=right
  |__TOC__
  |__TOC__
Line 21: Line 19:
everyone else get past those difficult first steps.
everyone else get past those difficult first steps.


===Physics Articles===


Here is a high level directory to this rather lengthy page.
I wrote a total of four articles about rigid body dynamics for [[Game Developer Magazine]]. I've posted them as [http://www.adobe.com/acrobat PDF] files, so they
 
 
 
==Physics Articles==
 
I wrote a total of four articles about rigid body dynamics for <a
href="http://www.gdmag.com">Game Developer Magazine</a>. I've posted
them as <a href="http://www.adobe.com/acrobat">PDF</a> files, so they
look just like they do in the magazine.  There are downsides to PDF,
look just like they do in the magazine.  There are downsides to PDF,
however, including the general way in which Acrobat sucks at letting
however, including the general way in which Acrobat sucks at letting
Line 45: Line 36:
* [[Media:gdmphys4.pdf | Physics, Part 4: The Third Dimension]] - June 97<br>The final article in the series.  To pack in all the 3D equivalents of the first three articles, I created this monster of an article.  It comes in at twice the length of the others, with 6000 words and 20 equations.
* [[Media:gdmphys4.pdf | Physics, Part 4: The Third Dimension]] - June 97<br>The final article in the series.  To pack in all the 3D equivalents of the first three articles, I created this monster of an article.  It comes in at twice the length of the others, with 6000 words and 20 equations.


=== more headings ===
Four articles, no matter how long, are just not enough to do justice
Four articles, no matter how long, are just not enough to do justice
to rigid body dynamics.  If you plan on using real dynamics in your
to rigid body dynamics.  If you plan on using real dynamics in your
game, you simply have to read my <a href="#references">references</a>.  The
game, you simply have to read my [[Physics References]].  The
<a href="#samples">3D sample application</a> shows the beginnings of
3D sample application below shows the beginnings of
some really cool technology, but you'll have to take the initiative to
some really cool technology, but you'll have to take the initiative to
teach yourself more math and physics to turn it into a production quality
teach yourself more math and physics to turn it into a production quality
simulator.
simulator.


===another===
===Physics Samples===
 
==Physics Samples==


I created two sample applications to accompany my physics articles.
I created two sample applications to accompany my physics articles.
Line 76: Line 64:
Euler integrator.  If you play with the spring and damping
Euler integrator.  If you play with the spring and damping
coefficients you'll quickly see how tweaky they are with relation to
coefficients you'll quickly see how tweaky they are with relation to
the timestep with this cheesy integrator.  There are <a
the timestep with this cheesy integrator.  There are [[Physics References|tons of books]] on numerical integration to help
href="#references">tons of books</a> on numerical integration to help
you fix this problem.
you fix this problem.


* [[Media:gdphys2d.zip | The 2D Physics Sample]], a 34kb PK-zipped file.  Includes Win32 executable.<br>I never quite got finished porting this app to the mac, but the code is quite portable (the simulator talks to the OS code through a few functions in iface.h).  A couple people have hacked up mac ports, but I haven't had time to integrate them with the code and update the zip. Some other people have ported it to Java, so I might just include that here for kicks.
* [[Media:gdphys2d.zip | The 2D Physics Sample]], a 34kb PK-zipped file.  Includes Win32 executable.<br>I never quite got finished porting this app to the mac, but the code is quite portable (the simulator talks to the OS code through a few functions in iface.h).  A couple people have hacked up mac ports, but I haven't had time to integrate them with the code and update the zip. Some other people have ported it to Java, so I might just include that here for kicks.
 
* [[Media:gdphys3d.zip | The 3D Physics Sample]], a 47kb PK-zipped file.  Includes Win32 executable.<br>I used [[OpenGL]] for the 3D rendering in this sample, so it's nice and clean and portable.  In addition to the stock Win32 wrapper I always use (abuse?) for my test apps, I also hacked up a [http://reality.sgi.com/employees/mjk_asd/glut3/glut3.html GLUT] wrapper and included it in the zip, so any platform that supports OpenGL and has a GLUT port should run the app (make sure you fix the GetTime function in glut.cpp as the assert will tell you).  I've tested it on Win95 with a bunch of drivers.  I've also tested it on the MacOS using GLUT with Mac Mesa and with Conix's OpenGL.  The performance is totally acceptable for the software renderers on a low-end (100Mhz) Pentium or PowerPC.
* [[Media:gdphys3d.zip | The 3D Physics Sample]], a 47kb PK-zipped file.  Includes Win32 executable.<br>I used <a href="index.htm#opengl">OpenGL</a> for the 3D rendering in this sample, so it's nice and clean and portable.  In addition to the stock Win32 wrapper I always use (abuse?) for my test apps, I also hacked up a <a href="http://reality.sgi.com/employees/mjk_asd/glut3/glut3.html">GLUT</a> wrapper and included it in the zip, so any platform that supports OpenGL and has a GLUT port should run the app (make sure you fix the GetTime function in glut.cpp as the assert will tell you).  I've tested it on Win95 with a bunch of drivers.  I've also tested it on the MacOS using GLUT with Mac Mesa and with Conix's OpenGL.  See my <a href="index.htm#opengl">OpenGL section</a> for links to where you can get the necessary system files to run the sample on your platform. The performance is totally acceptable for the software renderers on a low-end (100Mhz) Pentium or PowerPC.
 
===yet more===
 
[[User:Checker|checker]] 04:07, 18 January 2007 (CST)


[[Category:Physics]]
[[Category:Physics]]
[[Category:Articles]]

Revision as of 05:37, 21 February 2007

I started getting interested in high end physical simulation for games sometime in 1995. Since I didn't know anything about physics or know any real math (I had calculus in high school and enjoyed it, but had forgotten most of it), I had to teach myself everything from scratch. Let me just say it was a total blast. I highly recommend everyone taking the time to learn something really big and new every once in a while, in addition to all the little things we're all [hopefully] learning every day. As a bonus, it seems that the more we learn, the faster we're able to learn even newer things, which makes the whole process even more pleasurable.

As much fun as I had figuring this stuff out, I sure would have appreciated some references and articles aimed at my level when I was starting. So, I've created this web page in the hopes I can help everyone else get past those difficult first steps.

Physics Articles

I wrote a total of four articles about rigid body dynamics for Game Developer Magazine. I've posted them as PDF files, so they look just like they do in the magazine. There are downsides to PDF, however, including the general way in which Acrobat sucks at letting you navigate through documents (it's clear Adobe thinks a monitor is a lowres printer), and perhaps more seriously, the way some of the equations came out garbled. However, you should think of the latter problem as a challenge to figure out the correct equations! [If people complain enough I'll figure out how to fix them.] Please respect the copyright information in the front of each article.

  • Physics, Part 1: The Next Frontier - Oct/Nov 96
    This is the introduction to the physics series. It covers the linear parts of 2D rigid body mechanics, and a little bit of numerical integration.
  • Physics, Part 2: Angular Effects - Dec/Jan 96
    This article covers 2D angular rigid body mechanics and the overall 2D dynamics algorithm.
  • Physics, Part 3: Collision Response - Feb/Mar 97
    We finish off 2D physics with collision response, including the angular effects induced by a collision. The 2D physics sample, <ahref="#samples">discussed below</a>, demonstrates all the concepts learned so far.
  • Physics, Part 4: The Third Dimension - June 97
    The final article in the series. To pack in all the 3D equivalents of the first three articles, I created this monster of an article. It comes in at twice the length of the others, with 6000 words and 20 equations.

Four articles, no matter how long, are just not enough to do justice to rigid body dynamics. If you plan on using real dynamics in your game, you simply have to read my Physics References. The 3D sample application below shows the beginnings of some really cool technology, but you'll have to take the initiative to teach yourself more math and physics to turn it into a production quality simulator.

Physics Samples

I created two sample applications to accompany my physics articles.

Remember, these are just sample programs, not the ultimate physics simulators. They're really just a translation of the equations in my articles into code, so don't expect too much. They're fun to play with and change, but you'll have a lot of your own work to do before you can use this stuff in a production quality game. These apps will get you started, but not much more than that.

The most obvious thing the samples are missing is inter-body collisions. They don't do collision detection between bodies, but only between bodies and the world. It wouldn't be too hard to add a very simple discrete collision detector, but I didn't have time.

The second biggest problem is the lame integrator used in both apps. Both samples are relatively unstable because I'm using the simplest Euler integrator. If you play with the spring and damping coefficients you'll quickly see how tweaky they are with relation to the timestep with this cheesy integrator. There are tons of books on numerical integration to help you fix this problem.

  • The 2D Physics Sample, a 34kb PK-zipped file. Includes Win32 executable.
    I never quite got finished porting this app to the mac, but the code is quite portable (the simulator talks to the OS code through a few functions in iface.h). A couple people have hacked up mac ports, but I haven't had time to integrate them with the code and update the zip. Some other people have ported it to Java, so I might just include that here for kicks.
  • The 3D Physics Sample, a 47kb PK-zipped file. Includes Win32 executable.
    I used OpenGL for the 3D rendering in this sample, so it's nice and clean and portable. In addition to the stock Win32 wrapper I always use (abuse?) for my test apps, I also hacked up a GLUT wrapper and included it in the zip, so any platform that supports OpenGL and has a GLUT port should run the app (make sure you fix the GetTime function in glut.cpp as the assert will tell you). I've tested it on Win95 with a bunch of drivers. I've also tested it on the MacOS using GLUT with Mac Mesa and with Conix's OpenGL. The performance is totally acceptable for the software renderers on a low-end (100Mhz) Pentium or PowerPC.
This page was last edited on 21 February 2007, at 05:37.