D3DXVec3Hermite 函数

D3DXVec3Hermite 函数


进行Hermite样条插值,这里是3D向量插值。

定义:

D3DXVECTOR3 *WINAPI D3DXVec3Hermite(      

    D3DXVECTOR3 *pOut,
    CONST D3DXVECTOR3 *pV1,
    CONST D3DXVECTOR3 *pT1,
    CONST D3DXVECTOR3 *pV2,
    CONST D3DXVECTOR3 *pT2,
    FLOAT s
);

Parameters

pOut

[in, out] 指向 D3DXVECTOR3 结构的操作结果。

pV1

[in] 指向 D3DXVECTOR3 结构的位置向量。

pT1

[in] 指向 D3DXVECTOR3 结构的切向量。

pV2

[in] 指向 D3DXVECTOR3 结构的位置向量。

pT2

[in] 指向 D3DXVECTOR3 结构的切向量。

s

[in] 权重系数,看说明。

返回值:

指向 D3DXVECTOR3结构的Hermite样条插值。

 

说明:

D3DXVec3Hermite函数用Hermite 进行从(positionA, tangentA) (positionB, tangentB) 插值,Hermite插值是导数值个数相等的情况下的插值多项式及插值余项。

因为样条很方面平滑地连接进去,又平滑地连接出来。坡度主要是由Q(s)属性来决定:

Q(s) = As3 + Bs2 + Cs + D (并且 Q'(s) = 3As2 + 2Bs + C) 
a) Q(0) = v1, so Q'(0) = t1
b) Q(1) = v2, so Q'(1) = t2

 

v1就是 pV1v2就是pV2, t1是pT1, t2是pT2

这些参数是用解出 A, B, C, D。

D = v1  (from a)

C = t1  (from a)

3A + 2B = t2 - t-1 (substituting for C)

A + B = v2 - v1 - t1 (substituting for C and D)

从上面算出A,B,C,D就可以写出Q(s)来。

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

 

然后就是:

Q(s) = (2v1 - 2v2 + t2 + t1)s3 + (3v2 - 3v1 - 2t1 - t2)s2 + t1s + v1.

 

//重新整理后:

 

Q(s) = (2s3 - 3s2 + 1)v1 + (-2s3 + 3s2)v2 + (s3 - 2s2 + s)t1 + (s3 - s2)t2.

 

Hermite插值在控制动画方面非常有用,因为它通过每个控制点,因为那些点就相当于每个关键帧,并且它是位置及切线已明确,所以你可以很方便匹配每段曲线的起点与终点创建C2连续的曲线。

函数返回值跟pOut 参数返回值是一样的。这样可以让函数D3DXVec3Hermite作为其它函数的参数使用。

 

函数信息:

Header

d3dx9math.h

Import library

d3dx9.lib

Minimum operating systems

Windows 98



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值