Direct3D数学基础函数
来源:互联网 发布:怎么申请淘宝网账号 编辑:程序博客网 时间:2024/04/30 01:25
一、向量:
1.直接
相等加减直接
D3DXVec3Length
D3DXVec3Normalize
数乘直接
2.点乘D3DXVec3Dot
点乘D3DXVec3Dot,主要计算夹角(投影角)
V1( x1, y1).V2(x2, y2) = x1*x2 + y1*y2
A.B = |A||B|Cos(θ)
FLOAT D3DXVec3Dot(
_In_ const D3DXVECTOR3 *pV1,
_In_ const D3DXVECTOR3 *pV2
);
3.叉乘D3DXVec3Cross
叉乘D3DXVec3Cross,主要计算平面的法向量
|A x B| = |A||B|Sin(θ)
a= [a1, a2, a3] =a1i+ a2j+ a3k
b= [b1,b2,b3]=b1i+ b2j+ b3k ;
则
a × b= [a2b3-a3b2,a3b1-a1b3, a1b2-a2b1]
D3DXVECTOR3* D3DXVec3Cross(
_Inout_ D3DXVECTOR3 *pOut,
_In_ const D3DXVECTOR3 *pV1,
_In_ const D3DXVECTOR3 *pV2
);
二、矩阵:
1.直接
相等加减直接
数乘直接
矩阵乘以矩阵:
矩阵乘以矩阵:
D3DXMATRIX* D3DXMatrixMultiply( _Inout_ D3DXMATRIX *pOut, // 矩阵相乘所得结果 _In_ const D3DXMATRIX *pM1,// 输入矩阵1 _In_ const D3DXMATRIX *pM2 // 输入矩阵2);
2.单位/转置/逆矩阵
单位矩阵:D3DXMatrixIdentity
D3DXMATRIX* D3DXMatrixIdentity(
_Inout_ D3DXMATRIX *pOut
);
转置D3DXMatrixTranspose
D3DXMATRIX* D3DXMatrixTranspose(
_Inout_ D3DXMATRIX *pOut,
_In_ const D3DXMATRIX *pM
);
逆D3DXMatrixInverse
D3DXMATRIX* D3DXMatrixInverse(
_Inout_ D3DXMATRIX *pOut,
_Inout_ FLOAT *pDeterminant, // 行列式的值,如果行列式值为NULL也是可以的,否则用伴随矩阵/行列式值求得矩阵的逆
_In_ const D3DXMATRIX *pM
);
3.平移D3DXMatrixTranslation
D3DXMATRIX* D3DXMatrixTranslation( _Inout_ D3DXMATRIX *pOut, _In_ FLOAT x, _In_ FLOAT y, _In_ FLOAT z);
4.旋转D3DXMatrixRotationX/Y/Z
D3DXMATRIX* D3DXMatrixRotationX( _Inout_ D3DXMATRIX *pOut, _In_ FLOAT Angle // 弧度角,旋转方向是从旋转轴的正方向往原点看的顺时针方向);
5.缩放D3DXMatrixScaling
D3DXMATRIX* D3DXMatrixScaling( _Inout_ D3DXMATRIX *pOut, _In_ FLOAT sx, _In_ FLOAT sy, _In_ FLOAT sz);6. 3D点/向量乘以矩阵实现真正物体变换
点乘矩阵:D3DXVec3TransformCoord将结果向量第四个设置为1,D3DXVec3TransformNormal将结果向量第四个设置为0.
//Coordinate是坐标系,基于坐标点的变换,需要将向量解释为2D/3D点//变换向量将第四位置为1,需要考虑平移(pV->x, pV->y, pV->z, 1)
D3DXVECTOR3* D3DXVec3TransformCoord( _Inout_ D3DXVECTOR3 *pOut, _In_ const D3DXVECTOR3 *pV, _In_ const D3DXMATRIX *pM // 都是考虑平移的矩阵);
// Normal是法向量,就是纯向量的变换,向量是只有大小和方向的,需要将向量解释为2D/3D纯向量
//变换向量将第四位置为0,也就是忽略平移(pV->x, pV->y, pV->z, 0)
D3DXVECTOR3* D3DXVec3TransformNormal( _Inout_ D3DXVECTOR3 *pOut, _In_ const D3DXVECTOR3 *pV, _In_ const D3DXMATRIX *pM //都是考虑平移的矩阵
);
点数组和向量数组乘以矩阵:D3DXVec3TransformCoordArray/D3DXVec3TransformNormalArray.
D3DXVECTOR3* D3DXVec3TransformCoordArray( _Inout_ D3DXVECTOR3 *pOut, _In_ UINT OutStride, // 输出数组元素的字节步长,sizeof(D3DVECTOR3)或者sizeof(VERTTEX)都可以 _In_ const D3DXVECTOR3 *pV, _In_ UINT VStride, // 输入数组元素的步长sizeof(D3DXVECTOR3) _In_ const D3DXMATRIX *pM, _In_ UINT n);
D3DXVECTOR3* D3DXVec3TransformNormalArray( _Inout_ D3DXVECTOR3 *pOut, _In_ UINT OutStride,// 输出数组步长 _In_ const D3DXVECTOR3 *pV, _In_ UINT VStride, // 输入数组步长 _In_ const D3DXMATRIX *pM, _In_ UINT n);D3DXVec3TransformNormalArray参数和CoordArray一样。
0 0
- Direct3D数学基础函数
- Direct3D数学基础函数
- Direct3D基础
- Direct3D基础
- 数学基础-母函数
- python基础--数学函数
- Direct3D游戏开发学习笔记3——D3D数学基础(初级篇)
- JAVA数学函数基础练习
- Direct3D基础:D3DPRESENT_PARAMETERS
- Direct3D基础回顾
- Direct3D之代码基础
- Direct3D 11 教程1:Direct3D 11基础
- Direct3D中常用的数学计算方法总结
- Direct3D中常用的数学计算方法
- SQL基础(廿三)--- 数学函数
- Direct3D基础-灯光D3DLIGHT9
- Direct3D基础-材质D3DMATERIAL9
- 【Direct3D基础篇】之基本概念
- cocos2dx-3.2之创建精灵和简单运动
- Linux与windows的不同
- 开发OS二日目之必要汇编指令
- Pascal's Triangle
- 最小乘积
- Direct3D数学基础函数
- 最大并发数
- 剑指offer系列源码-合并两个排序的链表
- python 树的遍历实现
- Solr查询详解
- TI CC2540 USB Dongle
- 选择器
- Java多线程学习笔记—线程停止
- 智慧石资源