[D3D9] 世界坐标转换矩阵的获取:旋转矩阵、平移矩阵、缩放矩阵
2017-05-10 16:31
519 查看
图元做世界坐标转换时,需要设置世界矩阵、视图矩阵、投影矩阵。其中世界矩阵由旋转矩阵、平移矩阵、缩放矩阵相乘后得到。
注意,因为矩阵的乘法不支持交换率,所以平移、旋转、缩放这几个矩阵相乘时的顺序不同,最终的运行效果也不一样,比如:
1、先平移后旋转:图元偏离中心,绕着轴做公转
2、先旋转后平移:图元偏离中心,绕着自己做自转
旋转矩阵的获取
弧度与角度的换算公式:弧度 = 角度 * π / 180
平移矩阵的获取
如果是POSITION (D3DFVF_XYZ),x移动1.f,表示向x轴正方形移动宽度的一半(y和z同理)
如果是SV_POSION (D3DFVF_XYZRHW),x移动1.f,表示向x轴正方形移动一个像素(y和z同理)
缩放矩阵的获取
设置世界坐标转换矩阵
注意,因为矩阵的乘法不支持交换率,所以平移、旋转、缩放这几个矩阵相乘时的顺序不同,最终的运行效果也不一样,比如:
1、先平移后旋转:图元偏离中心,绕着轴做公转
2、先旋转后平移:图元偏离中心,绕着自己做自转
旋转矩阵的获取
const DWORD duration = 4000; // 旋转的周期是4秒钟 float tmp = float(GetTickCount() % duration) / float(duration) * 360; tmp = tmp * (float)3.1415926 / 180; D3DXMATRIX wld; D3DXMatrixRotationZ(&wld, tmp);注意:D3DXMatrixPerspectiveFovLH、D3DXMatrixRotationX/Y/Z 这几个函数中,旋转参数的单位都是弧度。
弧度与角度的换算公式:弧度 = 角度 * π / 180
平移矩阵的获取
D3DXMATRIX* D3DXMatrixTranslation(D3DXMATRIX *pOut, FLOAT x, FLOAT y, FLOAT z);网上很多教程都说参数x、y、z是代表平移的像素。但是根据我的实际测试,当坐标系不同时,这几个参数的意义是不一样的。
如果是POSITION (D3DFVF_XYZ),x移动1.f,表示向x轴正方形移动宽度的一半(y和z同理)
如果是SV_POSION (D3DFVF_XYZRHW),x移动1.f,表示向x轴正方形移动一个像素(y和z同理)
缩放矩阵的获取
D3DXMATRIX * D3DXMatrixScaling(D3DXMATRIX *pOut, FLOAT sx, FLOAT sy, FLOAT sz);这个没什么好说的,sx等几个参数就是原始宽高的缩放比例
设置世界坐标转换矩阵
Device->SetTransform(D3DTS_WORLD, &wld);
相关文章推荐
- Nyoj 298 点的变换[利用矩阵求解坐标点的转换,平移,绕原点旋转,沿x,y轴翻转]
- D3D坐标系统下3D世界坐标映射到2D屏幕坐标的平移矩阵
- 旋转坐标转换的矩阵推导
- 世界坐标变换要先缩放、后旋转、再平移的原因
- 世界坐标变换要先缩放、后旋转、再平移的原因
- 传感器获取旋转矩阵R,机身坐标系和世界坐标系的映射remapR,获得旋转角度 orientationValues;
- OpenGL 旋转平移之后的坐标获取
- 【第三弹】从矩阵中提取平移、旋转、缩放矩阵
- 世界坐标变换要先缩放、后旋转、再平移的原因
- 旋转坐标转换的矩阵推导
- 如何把获取的gps数据转换成google地图上显示的坐标
- 当前已保存的用户坐标系坐标点到世界坐标系的转换
- 坐标变换_世界坐标系与用户坐标系之间的转换
- 获取墙的一个侧面,并且将上的点坐标转换到XOY面在墙侧面上的坐标系
- adb shell getevent中获取到的屏幕事件的坐标转换
- OpenGL中矩阵的平移与旋转的顺序问题
- 向量坐标转换、旋转矩阵以及视图转换
- 屏幕坐标到opengl世界坐标转换
- XCode数据类型转换代码 文件读取,写入,XY坐标获取,ASCII转换等
- MFC界面 坐标获取/转换 及 区域获取