Source: http://asl.cs.depaul.edu/papers/SIGGRAPH99.pdf