D3DXVec3Hermite 函数 (D3dx9math.h)
注意
D3DX 实用工具库已弃用。 建议改用 DirectXMath 。
使用指定的 3D 向量执行 Hermite 样条内插。
语法
D3DXVECTOR3* D3DXVec3Hermite(
_Inout_ D3DXVECTOR3 *pOut,
_In_ const D3DXVECTOR3 *pV1,
_In_ const D3DXVECTOR3 *pT1,
_In_ const D3DXVECTOR3 *pV2,
_In_ const D3DXVECTOR3 *pT2,
_In_ FLOAT s
);
参数
-
pOut [in, out]
-
类型: D3DXVECTOR3*
指向操作结果的 D3DXVECTOR3 结构的指针。
-
pV1 [in]
-
类型: const D3DXVECTOR3*
指向源 D3DXVECTOR3 结构(位置向量)的指针。
-
pT1 [in]
-
类型: const D3DXVECTOR3*
指向源 D3DXVECTOR3 结构(正切向量)的指针。
-
pV2 [in]
-
类型: const D3DXVECTOR3*
指向源 D3DXVECTOR3 结构(位置向量)的指针。
-
pT2 [in]
-
类型: const D3DXVECTOR3*
指向源 D3DXVECTOR3 结构(正切向量)的指针。
-
s [in]
-
类型: FLOAT
加权系数。 请参阅“备注”。
返回值
类型: D3DXVECTOR3*
指向 D3DXVECTOR3 结构的指针,该结构是 Hermite 样条内插的结果。
备注
D3DXVec3Hermite 函数使用 Hermite 样条内插从 (positionA、tangentA) 到 (positionB、tangentB) 。
样条内插是缓入、缓动样条的通用化。 渐变是 Q () 的函数,具有以下属性。
Q () = Asл + Bs² + Cs + D (,因此,Q' () = 3As² + 2Bs + C)
a) Q (0) = v1,因此 Q' (0) = t1
b) Q (1) = v2,因此 Q' (1) = t2
v1 是 pV1 的内容,v2 在 pV2 的内容中,t1 是 pT1 的内容,t2 是 pT2 的内容。
这些属性用于求解 A、B、C、D。
D = v1 (from a)
C = t1 (from a)
3A + 2B = t2 - t1 (substituting for C)
A + B = v2 - v1 - t1 (substituting for C and D)
插入 A、B、C 和 D 解决方案以生成 Q () 。
A = 2v1 - 2v2 + t2 + t1
B = 3v2 - 3v1 - 2t1 - t2
C = t1
D = v1
这会生成:
Q (s) = (2v1 - 2v2 + t2 + t1) sー + (3v2 - 3v1 - 2t1 - t2) s² + t1s + v1
可重新排列为:
Q (s) = (2sー - 3s² + 1) v1 + (-2sー + 3s²) v2 + (s 2 - 2s² + s) t1 + (sー - s²) t2
隐士样条曲线可用于控制动画,因为曲线穿过所有控制点。 此外,由于位置和切线在每个段的末尾显式指定,因此,只要确保起始位置和切线与最后一段的结束值匹配,就很容易创建 C2 连续曲线。
此函数的返回值与 pOut 参数中返回的值相同。 这样, D3DXVec3Hermite 函数可用作另一个函数的参数。
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|
另请参阅