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 函数可用作另一个函数的参数。

要求

要求
标头
D3dx9math.h

D3dx9.lib

另请参阅

数学函数