Fonction D3DXVec3Hermite (D3DX10Math.h)

Notes

La bibliothèque utilitaire D3DX10 est déconseillée. Nous vous recommandons d’utiliser DirectXMath à la place.

Effectue une interpolation de spline Hermite à l’aide des vecteurs 3D spécifiés.

Syntaxe

D3DXVECTOR3* D3DXVec3Hermite(
  _Inout_       D3DXVECTOR3 *pOut,
  _In_    const D3DXVECTOR3 *pV1,
  _In_    const D3DXVECTOR3 *pT1,
  _In_    const D3DXVECTOR3 *pV2,
  _In_    const D3DXVECTOR3 *pT2,
  _In_          FLOAT       s
);

Paramètres

pOut [in, out]

Type : D3DXVECTOR3*

Pointeur vers le D3DXVECTOR3 qui est le résultat de l’opération.

pV1 [in]

Type : const D3DXVECTOR3*

Pointeur vers une structure D3DXVECTOR3 source, vecteur de position.

pT1 [in]

Type : const D3DXVECTOR3*

Pointeur vers une structure D3DXVECTOR3 source, vecteur tangente.

pV2 [in]

Type : const D3DXVECTOR3*

Pointeur vers une structure D3DXVECTOR3 source, vecteur de position.

pT2 [in]

Type : const D3DXVECTOR3*

Pointeur vers une structure D3DXVECTOR3 source, vecteur tangente.

s [in]

Type : FLOAT

Facteur de pondération. Consultez la section Notes.

Valeur de retour

Type : D3DXVECTOR3*

Pointeur vers une structure D3DXVECTOR3 qui est le résultat de l’interpolation spline Hermite.

Notes

La fonction D3DXVec3Hermite interpole de (positionA, tangentA) vers (positionB, tangentB) à l’aide de l’interpolation spline Hermite.

L’interpolation spline est une généralisation de la spline ease-in et ease-out. La rampe est une fonction de Q(s) avec les propriétés suivantes.

Q(s) = As³ + Bs² + Cs + D (et par conséquent, Q'(s) = 3As² + 2Bs + C)

a) Q(0) = v1, donc Q'(0) = t1

b) Q(1) = v2, donc Q'(1) = t2

v1 est le contenu de pV1, v2 dans le contenu de pV2, t1 est le contenu de pT1 et t2 est le contenu de pT2.

Ces propriétés sont utilisées pour résoudre les problèmes de 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)

Branchez les solutions pour A, B, C et D pour générer des Q(s).

A = 2v1 - 2v2 + t2 + t1
B = 3v2 - 3v1 - 2t1 - t2
C = t1
D = v1

Cela donne :

Q(s) = (2v1 - 2v2 + t2 + t1)s³ + (3v2 - 3v1 - 2t1 - t2)s² + t1s + v1

Qui peut être réorganisé comme suit :

Q(s) = (2s³ - 3s² + 1)v1 + (-2s³ + 3s²)v2 + (s³ - 2s² + s)t1 + (s³ - s²)t2

Les splines d’hermite sont utiles pour contrôler l’animation, car la courbe traverse tous les points de contrôle. En outre, étant donné que la position et la tangente sont explicitement spécifiées aux extrémités de chaque segment, il est facile de créer une courbe continue C2 tant que vous vous assurez que votre position de départ et votre tangente correspondent aux valeurs de fin du dernier segment.

La valeur de retour pour cette fonction est la même valeur retournée dans le paramètre pOut. De cette façon, la fonction D3DXVec3Hermite peut être utilisée comme paramètre pour une autre fonction.

Spécifications

Condition requise Valeur
En-tête
D3DX10Math.h

Voir aussi

Fonctions mathématiques