?/TD> |
Microsoft DirectX 9.0 |
Performs a Catmull-Rom interpolation, using the specified 3-D vectors.
Syntax
D3DXVECTOR3 *WINAPI D3DXVec3CatmullRom(
D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2, CONST D3DXVECTOR3 *pV3, CONST D3DXVECTOR3 *pV4, FLOAT s );
Parameters
- pOut
- [in, out] Pointer to the D3DXVECTOR3?B>structure that is the result of the operation.
- pV1
- [in] Pointer to a source. D3DXVECTOR3 structure, a position vector.
- pV2
- [in] Pointer to a source. D3DXVECTOR3 structure, a position vector.
- pV3
- [in] Pointer to a source D3DXVECTOR3 structure, a position vector.
- pV4
- [in] Pointer to a source. D3DXVECTOR3 structure, a position vector.
- s
- [in] Weighting factor. See Remarks.
Return Value
Pointer to a D3DXVECTOR3 structure that is the result of the Catmull-Rom interpolation.
Remarks
Given four points (p1, p2, p3, p4), find a function Q(s) such that:
Q(s) is a cubic function. Q(s) interpolates between p2 and p3 as s ranges from 0 to 1. Q(s) is parallel to the line joining p1 to p3 when s is 0. Q(s) is parallel to the line joining p2 to p4 when s is 1.The Catmull-Rom spline can be derived from the Hermite spline by setting:
v1 = p2 v2 = p3 t1 = (p3 - p1) / 2 t2 = (p4 - p2) / 2where v1 is the contents of pV1, v2 is the contents of pV2, p3 is the contents of pV3, and p4 is the contents of pV4.
Using the Hermite spline equation:
Q(s) = (2s3 - 3s2 + 1)v1 + (-2s3 + 3s2)v2 + (s3 - 2s2 + s)t1 + (s3 - s2)t2and substituting for v1, v2, t1, t2 yields:
Q(s) = (2s3 - 3s2 + 1)p2 + (-2s3 + 3s2)p3 + (s3 - 2s2 + s) (p3 - p1)/2 + (s3 - s2)(p4 - p2)/2This can be rearranged as:
Q(s) = [(-s3 + 2s2 - s)p1 + (3s3 - 5s2 + 2)p2 + (-3s3 + 4s2 + s)p3 + (s3 - s2)p4] / 2
Function Information
Header d3dx9math.h Import library d3dx9.lib Minimum operating systems Windows 98
See Also
D3DXVec2CatmullRom, D3DXVec4CatmullRom