Jump to content
  • entries
  • comments
  • views

Constraint solver types

Sign in to follow this  


I spent most of the day reading about constraint solvers (as well as error correction). It seems like you can categorize constraint solvers as either sequential or simultaneous.

Sequential solvers solve each constraint individually. Because solving one constraint could invalidate another constraint, a sequential solver is normally iterative: All constraints are solved multiple times until a maximum iteration has been reached or all of the constraints are solved. These are generally easier to both understand and implement.

All of the constraints are solved at the same time, removing the need to iterate. This normally involves solving an LCP, which appears to be a difficult task.

The solvers can then be split up into force-based, impulse-based, and finally position-based methods.

The constraint is solved by applying a force. For example, a constraint to keep two objects within a certain distance would apply a force pulling the objects together if they become separated further than that maximum distance.

An impulse is applied to the constraint anchor points if the constraint is not met. For example, a collision constraint would apply an impulse in order to push the two objects away from each other.

The position is changed to meet the constraint. This appears to be mostly used in error correction, such as ensuring that two objects do not interpenetrate. I'm not sure if this is a standard way of going about this or not, but I thought it was a cool idea: Don't change the position directly. Instead, apply an impulse and perform explicit Euler integration.

I'm done reading that rigid body dynamics thesis for now. I'll be reading some articles on 3D engine architecture next, including a rather long one on scene graphs. That is for another blog post though.

[size="1"]Reposted from http://invisiblegdev.blogspot.com/
Sign in to follow this  


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!