About Documentation Demos Source Code |
![]() PBM Waves Demo |
Physically Based Modeling is a member of the IronWorks.cc family of projects.
Name | Description |
---|---|
Figure8 | Demonstrates how to animate a body through a fixed kinematic path |
Pendulum | Animates a Pendulum swinging through a magnetic field |
RigidBodies | Animates several rigid bodies connected to fixed points in space, and to each other |
SpringsAndSpheres | Animates several spheres connected with springs to fixed points in space and to each other |
Viewer | This is a generic program which reads in a description of geometry and constraints from a text file, and animates the results. The grammar is contained in the file PBM.yac in the parser package |
Waves | This demo animates droplets falling into a liquid pool. It can run as a standalone program or as a screensaver. |
WreckingBall | Demonstrates combining kinematic motion with force-calculated motion. |
pbmlib
: This is the Physically Based Modeling library as described in the book. It consists of the following packages. Each of these packages is in its own directory and C++ namespace, and has a sub-project which tests the package.
support
: Tracing utilities, ID, IDSet, Enumeration, a simple Memory Pool used by the vecmath
package.
vecmath
: Optimized matrix and vector classes and operations. Especially optimized 3x3 Matrix and 3-Vector.
misc
: Containers, IDForest (a graph of IDs), other utilities.
coords
: Implements Vector, Location, Orientation, Location, Frame, InstFrame (a frame in motion), Basis, 2Tensor.
kinematic
: Implements Kinematic (fixed-path) motion, with classes for BodyPt (a point on a physical body), State (equivalent to an InstFrame), StatePath, HierConfig (a tree structure of rigidly connected physical bodies), InterpolationPath.
structurednumerics
: C++ interfaces to low-level numerical algorithms. Includes Gather/Scatter (for transferring data between arrays and objects), a SparseMatrix, Interpolator, LinearSolver (solves a system of linear equations using matrix methods), Runge-Kutta ODE integration, and ODEExt (a wrapper around the ODE solver which spline-interpolates between solution data points).
forces
: Classes for applying body forces to objects. Includes abstract definitions of linear constraints.
constraints
: Implementations of specific constraints which can be applied to bodies, including AxisAlignedSpring, AxisToAxis, PerpendicularAxis, RelativeAngularVelocity.
rigidbody
: Ties everything together with the RBSystem and RBSolveForward clasess, which solve a system of bodies and forces forward in time. Other classes in this package include RBState (the dynamic state of a rigid body), PtMass (point mass), MassDist (a scalar mass, center of mass, and inertia tensor), Motive (a force), ApplMotive (a Motive applied to a body), RBBodyPt (a body point on a rigid body).
demos
: Source code for the demos packaged in the self-extracting demos download. See here for a list of the programs included in the download.
external
: Contains source code and binaries for external libraries which are used to build the Physically Based Modeling library and demo programs. Among the external code used is:
www
: The source code and images for this web site
external
package, there are some other libraries you'll need to build PBM. Free implementations are available of all the required libraries. The packages are quite large so I do not include them in the PBM source tree.
Finally, PBM currently builds with Microsoft Visual C++. The code is not written to reference any Windows-specific functionality, so there shouldn't be any major roadblocks to building it on a UNIX platform. ( The only one problem I can think of is how good the support for templates is in GCC ). Certainly, if you build PBM on any non-Windows platform please let me know about it. In fact, by the terms of the LGPL license, you are required to send me your modifications. The Visual C++ build uses the multi-threaded DLL runtime library ( msvcrt and msvcirt ). If you try and link it with other code that was built for the static C runtime ( libc ) you will get nasty un-resolvable link errors. You'll have to re-compile one library or the other in order to make them compatible.
![]() |
PBM Viewer Demo Showing 'wheelassembly.txt' |