Vector的各种算法

1.加法

D3DXVECTOR3 * D3DXVec3Add(
  D3DXVECTOR3 * pOut,
  CONST D3DXVECTOR3 * pV1,
  CONST D3DXVECTOR3 * pV2
);

2.减法:

D3DXVECTOR3 * D3DXVec3Subtract(
  D3DXVECTOR3 * pOut,
  CONST D3DXVECTOR3 * pV1,
  CONST D3DXVECTOR3 * pV2
);
3.点积

FLOAT D3DXVec3Dot(
  CONST D3DXVECTOR3 * pV1,
  CONST D3DXVECTOR3 * pV2
);
4.叉积,叉积的结果值是另一个向量。通过把两个向量 uv相乘得到另一的向量 p,向量 p垂直于 uv。也就是说向量 p垂直于 u并且垂直于 u

D3DXVECTOR3 * D3DXVec3Cross(
  D3DXVECTOR3 * pOut,
  CONST D3DXVECTOR3 * pV1,
  CONST D3DXVECTOR3 * pV2
);
D3DXVECTOR3 v;
    
v.x = pV1->y * pV2->z - pV1->z * pV2->y;
v.y = pV1->z * pV2->x - pV1->x * pV2->z;
v.z = pV1->x * pV2->y - pV1->y * pV2->x;
    
*pOut = v;
5.得到向量的长度

FLOAT D3DXVec3Length(
  CONST D3DXVECTOR3 * pV
);
6.返回在一个三角形中的重心

指定3个point,并给出U,V(权值)

D3DXVECTOR3 * D3DXVec3BaryCentric(
  D3DXVECTOR3 * pOut,
  CONST D3DXVECTOR3 * pV1,
  CONST D3DXVECTOR3 * pV2,
  CONST D3DXVECTOR3 * pV3,
  FLOAT f,
  FLOAT g
);

7.将向量标准化,标准化向量是让向量的大小等于1,即被叫作单位向量

D3DXVECTOR3 * D3DXVec3Normalize(
  D3DXVECTOR3 * pOut,
  CONST D3DXVECTOR3 * pV
);
8、 D3DXVec3TransformCoord函数变换点同时设置向量第4个成员为1(用于 变换点向量

D3DXVECTOR3 *D3DXVec3TransformCoord(

              D3DXVECTOR3*pOut, // 返回的点向量

              CONSTD3DXVECTOR3* pV, // 点向量

              CONSTD3DXMATRIX* pM // 变换矩阵

);

D3DXMATRIXT(...); // 初始化矩阵

D3DXVECTOR3p(...); // 初始化点

D3DXVec3TransformCoord( &p, &p, &T);// 变换一个点

9、D3DXVec3TransformNormal函数变换向量并且设置第4个成员为0(用于变换方向向量

D3DXVECTOR3 *WINAPI D3DXVec3TransformNormal(

              D3DXVECTOR3*pOut, //返回的方向向量

              CONSTD3DXVECTOR3 *pV, // 方向向量

              CONSTD3DXMATRIX *pM //变换矩阵

);

D3DXMATRIXT(...); // 初始化变换矩阵

D3DXVECTOR3v(...); // 初始化方向向量

D3DXVec3TransformNormal( &v, &v,&T); // 变换方向向量

注意:D3DX库也提供D3DXVec3TransformCoordArray和D3DXVec3TransformNormalArray来分别变换一个点数组和向量数组

10、向量缩小放大函数

D3DXVECTOR3 * D3DXVec3Scale(
  D3DXVECTOR3 * pOut,
  CONST D3DXVECTOR3 * pV,
  FLOAT s
);

10、根据interpolate算出两个向量的线性插值

D3DXVECTOR3 * D3DXVec3Lerp(
  D3DXVECTOR3 * pOut,
  CONST D3DXVECTOR3 * pV1,
  CONST D3DXVECTOR3 * pV2,
  FLOAT s
);
[in, out] pOut:指向 D3DXVECTOR3 结构的操作结果。

[in] pV1:指向 D3DXVECTOR3 结构的源向量。

[in] pV2:指向 D3DXVECTOR3 结构的源向量。

[in] s:两个向量插值参数。

11、 D3DXVec3Hermite:艾米插值

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

12、D3DXVec3CatmullRom 函数:Catmull-Rom插值

D3DXVECTOR3 * D3DXVec3CatmullRom(
  D3DXVECTOR3 * pOut,
  CONST D3DXVECTOR3 * pV0,
  CONST D3DXVECTOR3 * pV1,
  CONST D3DXVECTOR3 * pV2,
  CONST D3DXVECTOR3 * pV3,
  FLOAT s
);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值