DirectX学习——数学基础(2)
来源:互联网 发布:win10 补丁安装软件 编辑:程序博客网 时间:2024/05/21 18:30
矩阵的基本运用:
矩阵的作用是对点和向量进行变换(例如平移之类的操作)
DirectX使用4x4矩阵,因为通常在把向量和点扩展一维变成一个4D向量(最后一维分别为0或1,0是向量,1是点)
因为最后一维为0则,平移矩阵对向量影响为0,联系平移矩阵的特点容易得出该结论。
创建并使用4*4矩阵:
#include <Windows.h>#include <D3dx9math.h>#include <d3dx11.h>int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow){ //声明矩阵 D3DMATRIX m; m._11 = 1, m._12 = 0, m._13 = 0, m._14 = 0; m._21 = 0, m._22 = 1, m._23 = 0, m._24 = 0; m._31 = 0, m._32 = 0, m._33 = 1, m._34 = 0; m._41 = -1, m._42 = -2, m._43 = -3, m._44 = 1; D3DXMATRIX m1(m); D3DXMATRIX m2(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1); //单位矩阵 D3DXMATRIX m3; D3DXMatrixIdentity(&m3); //矩阵转置 D3DXMATRIX _m2; D3DXMatrixTranspose(&_m2,&m2); //矩阵求逆 D3DXMATRIX _m1; D3DXMatrixInverse(&_m1, 0, &m1); D3DXMatrixInverse(&_m2, 0, &m2); //创建平移矩阵 D3DXMATRIX TranMatrix; FLOAT x = 1.0f; FLOAT y = 0.2f; FLOAT z = 0.3f; D3DXMatrixTranslation(&TranMatrix, x, y, z); //创建旋转矩阵,分别绕x,y,z轴,右手系 D3DXMATRIX xMatrix; D3DXMatrixRotationX(&xMatrix, 3.14/2);//逆时针旋转 D3DXMATRIX yMatrix; D3DXMatrixRotationY(&yMatrix, 3.14/2);//逆时针旋转 D3DXMATRIX zMatrix; D3DXMatrixRotationZ(&zMatrix, 3.14/2);//逆时针旋转 //创建比例变换矩阵 D3DXMATRIX sMatrix; D3DXMatrixScaling(&sMatrix, 1.5f, 1.4f, 1.3f); //点变换函数 D3DXVECTOR3 dot(1.0f, 1.0f, 1.0f); D3DXVec3TransformCoord(&dot, &dot, &TranMatrix); //向量变换函数 D3DXVECTOR3 vx(0.0f, 1.0f, 1.0f); D3DXVec3TransformNormal(&vx, &vx, &xMatrix); D3DXVECTOR3 vy(1.0f, 0.0f, 1.0f); D3DXVec3TransformNormal(&vy, &vy, &yMatrix); D3DXVECTOR3 vz(1.0f, 1.0f, 0.0f); D3DXVec3TransformNormal(&vz, &vz, &zMatrix); return 0;}
矩阵的转置和求逆函数
//获取单位矩阵D3DXINLINE D3DXMATRIX* D3DXMatrixIdentity ( D3DXMATRIX *pOut )//矩阵转置D3DXMATRIX* WINAPI D3DXMatrixTranspose ( D3DXMATRIX *pOut, CONST D3DXMATRIX *pM );//矩阵求逆,如果求逆失败返回NULL值D3DXMATRIX* WINAPI D3DXMatrixInverse ( D3DXMATRIX *pOut, FLOAT *pDeterminant, CONST D3DXMATRIX *pM );//创建平移矩阵,指定x,y,z的平移距离D3DXMATRIX* WINAPI D3DXMatrixTranslation ( D3DXMATRIX *pOut, FLOAT x, FLOAT y, FLOAT z );//创建旋转矩阵,分别创建绕x,y,z轴逆时针旋转的矩阵,指定旋转角度D3DXMATRIX* WINAPI D3DXMatrixRotationX ( D3DXMATRIX *pOut, FLOAT Angle );D3DXMATRIX* WINAPI D3DXMatrixRotationY ( D3DXMATRIX *pOut, FLOAT Angle );D3DXMATRIX* WINAPI D3DXMatrixRotationZ ( D3DXMATRIX *pOut, FLOAT Angle );//创建比例变换矩阵,指定x,y,z的变换比例D3DXMATRIX* WINAPI D3DXMatrixScaling ( D3DXMATRIX *pOut, FLOAT sx, FLOAT sy, FLOAT sz );//点变换函数D3DXVECTOR3* WINAPI D3DXVec3TransformCoord ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, CONST D3DXMATRIX *pM );//向量变换函数D3DXVECTOR3* WINAPI D3DXVec3TransformNormal ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, CONST D3DXMATRIX *pM );
0 0
- DirectX学习——数学基础(2)
- DirectX学习——数学基础(1)
- directx数学基础2
- directx数学基础
- directx数学基础
- directX 数学基础-向量
- directX 数学基础-矩阵
- directx数学基础1
- DirectX笔记 数学基础
- C# Managed DirectX 和 XNA 数学基础
- 深度学习——数学基础
- DirectX学习——序章
- DirectX函数学习:几个数学函数问题
- 深度学习——数学与机器学习基础
- 【零基础学习DirectX】之一:编译Freakout.cpp——关于 VC++ 配置SDK的说明
- 数学基础—ML
- DirectX SDK 2006学习笔记2——顶点缓冲
- 机器学习基础(十二)—— 数学基本理论拾遗
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- 哈弗曼树
- Android开发,获取手机IP地址的两种方式
- JSON的操作之js中json转换
- Conic section
- DirectX学习——数学基础(2)
- 在Caffe上利用自己的数据集进行微调
- web前端开发框架
- 惠普测试工具UFT的安装过程
- Java归并排序
- Activity
- NodeJS优缺点及适用场景讨论
- 数据结构基础7_链队的实现
- [每日一答] [20151016] MySQL中的数值函数