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
- D3DXQuaternionSquadSetup 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- 函数
- Java异常处理之陋习
- 关于成功的想法
- Microsoft
- 初来乍到,先报个到!
- D3DXQuaternionSquad 函数
- D3DXQuaternionSquadSetup 函数
- D3DXQuaternionToAxisAngle 函数
- D3DXSHAdd 函数
- BeQ树控件调用示例:目录树创建
- D3DXVec2Add 函数
- 服务品质协议(Service Level Agreement,SLA)
- D3DXVec2BaryCentric 函数
- Ant的几大实践
- 创建分区表