老是爱弄混淆,然后今天就整理下发在博客上
设两个向量P(Xp,Yp,Zp) Q(Xq,Yq,Zq)
标量集 ( dot product)
P*Q = XpXq + YpYq + ZpZq = |P||Q|cos⊙ ⊙为向量的夹角
一般来说,标量集是判断两个向量夹角是否为90度以上的一个重要的值。只有当夹角为0到90度和270度到360度的时候才为正值。
然后贴出标量集的D3D函数
在MSDN中我查到它的原型如下:
- FLOAT D3DXVec3Dot(
- _In_ const D3DXVECTOR3 *pV1,
- _In_ const D3DXVECTOR3 *pV2
- );
举一个实例吧:
- pMatrix->_42 =-D3DXVec3Dot(&m_vUpVector, &m_vCameraPosition); // -P*U
向量集(也叫叉积)(cross product)
P X Y = (PyQz - PzQy ,PzQx - PxQz , PxQy - PyQx)
叉积运算的最大特点是运算结果为两个向量相交的向量值,两个向量进行向量积运算可以求得两个向量P,Q所形成的面的法线向量。
贴出向量积的D3D函数
在MSDN中我们查到它原型如下:
- D3DXVECTOR3* D3DXVec3Cross(
- _Inout_ D3DXVECTOR3 *pOut,
- _In_ const D3DXVECTOR3 *pV1,
- _In_ const D3DXVECTOR3 *pV2
- );
第一个参数依然是计算的结果。第二和第三两个参数当然就是填参加叉乘运算的两个向量了。
另外需要注意,D3DXVec3Cross函数的返回值和第一个参数pOut 参数是一样的,为指向D3DXVECTOR3 结构的两个向量叉乘结果。
依然是一个实例:
- D3DXVec3Cross(&m_vRightVector, &m_vUpVector,&m_vLookVector); // 右向量与上向量垂直