Game Development Reference
In-Depth Information
positions is described as interpolating. One curve that is suited to the
problem is a Hermite, named after the mathematician. Again, we need to
consider this in a piecewise fashion, joining just two key positions with
each curve. We want to have control over the key position tangents, so
the variant of a Hermite curve that we will use is the Kochanek-Bartels or
TCB form. TCB stands for tension, continuity and bias. Any readers
familiar with Lightwave 3D will know that this form was the only motion
curve available until version 6. Adjusting the TCB parameters has the
effect of altering the tangent for the curve at the key positions. Now to find
a point P at time t on the curve between key positions K 1 and K 2, we find
tangent vectors T 1 for the beginning of the curve and T 2 for the end of the
curve. To find these tangent vectors, we first calculate scale factors
relating the interval to the sum of the interval and the preceding interval
and the sum of the interval and the following interval.
S 1=( K 2.time - K 1.time)/( K 2.time - K 0.time)
S 2=( K 2.time - K 1.time)/( K 3.time - K 1.time)
T 1= S 1 * (1 - K 1 * tn )(1 + K 1 * bs )(1 + K 1 * ct )( K 1.value - K 0.value)
+ (1 - K 1 * tn )(1 - K 1 * bs )(1 - K 1 * ct )( K 2.value - K 1.value)
T 2 = (1 - K 2 * tn )(1 + K 2 * bs )(1 - K 2 * ct )( K 2.value - K 1.value)
+ S 2 * (1 - K 2 * tn )(1 - K 2 * bs )(1 + K 2 * ct )( K 3.value - K 2.value)
If K 1 is the first key position then K 0 does not exist. In this case T 1 is
T 1 = (1 - K 1 * tn )(1 - K 1 * bs )(1 - K 1 * ct )( K 2.value - K 1.value)
If K 2 is the last key position then T 2 becomes
T 2 = (1 - K 2 * tn )(1 + K 2 * bs )(1 - K 2 * ct )( K 2.value - K 1.value)
The next stage of our curve-fitting procedure is to calculate the Hermite
coefficients at the actual time. We are dealing here with a parametric
curve where the parameter t varies between 0 and 1. Now you may well
have two key positions with time values of 6.3 and 9.87. But we need to
scale this interval to 1.0. This is very easily done. Suppose we want to
know the value for t at time 7.8. First, we subtract the start time of the
interval and then calculate the segment duration.
t
= 7.8 - 6.3 = 1.5
dur = 9.87 - 6.3 = 3.57