D3DXQuaternionSquadSetup 函数

来源:互联网 发布:linux e45 编辑:程序博客网 时间:2024/05/30 22:53

D3DXQuaternionSquadSetup 函数


建立球面四边形插值的控制点。

定义:

void WINAPI D3DXQuaternionSquadSetup(      

    D3DXQUATERNION *pAOut,
    D3DXQUATERNION *pBOut,
    D3DXQUATERNION *pCOut,
    const D3DXQUATERNION *pQ0,
    const D3DXQUATERNION *pQ1,
    const D3DXQUATERNION *pQ2,
    const D3DXQUATERNION *pQ3
);

参数:

pAOut

[out] 指向 AOut.

pBOut

[out] 指向 BOut.

pCOut

[out] 指向 COut.

pQ0

[in] 指向输入控制点Q0.

pQ1

[in] 指向输入控制点Q1.

pQ2

[in] 指向输入控制点 Q2.

pQ3

[in] 指向输入控制点Q3.

返回值:

没有。

说明:

这个函数中要提供四个控制点pQ0,pQ1,pQ2和pQ3。 函数就会改变这些值沿着曲线,找出最短路径。q0,q2和q3值如下计算:

q0 = |Q0 + Q1| < |Q0 - Q1| ? -Q0 : Q0
q2 = |Q1 + Q2| < |Q1 - Q2| ? -Q2 : Q2
q3 = |Q2 + Q3| < |Q2 - Q3| ? -Q3 : Q3

如果Q计算出来,AOut,BOut和COut的值就用下面的公式计算:

AOut = q1 * e[-0.25 *( Ln[Exp(q1)*q2] + Ln[Exp(q1)*q0] ) ]

BOut = q2 * e[-0.25 *( Ln[Exp(q2)*q3] + Ln[Exp(q2)*q1] ) ]

COut = q2

注意  Ln API函数D3DXQuaternionLn Exp API 函数D3DXQuaternionExp

例如:

例子里有点 (Q0, Q1, Q2, Q3) 来计算内插球面四边形的点 (A, B, C)。这里假定正切值是连续通过这段曲线的。

        A     B
  Q0    Q1    Q2    Q3

下面就说明Q1和 Q2之间内插值:

// 关于z轴旋转
D3DXQUATERNION Q0 = D3DXQUATERNION(0,  0, 0.707f, -.707f);
D3DXQUATERNION Q1 = D3DXQUATERNION(0,  0, 0.000f, 1.000f);
D3DXQUATERNION Q2 = D3DXQUATERNION(0,  0, 0.707f, 0.707f);
D3DXQUATERNION Q3 = D3DXQUATERNION(0,  0, 1.000f, 0.000f);
D3DXQUATERNION A, B, C, Qt;
FLOAT time = 0.5f;
 
D3DXQuaternionSquadSetup(&A, &B, &C, &Q0, &Q1, &Q2, &Q3);
D3DXQuaternionSquad(&Qt, &Q1, &A, &B, &C, time);

注意:

·   C +/- Q2 正负号主要看函数的返回值。

·   Qt 是函数返回值。

这里结果是每隔0.5绕着Z轴旋转45度。

函数信息:

Header

d3dx9math.h

Import library

d3dx9.lib

Minimum operating systems

Windows 98

相关函数:

D3DXQuaternionSquad