Direct变换
来源:互联网 发布:悉尼大学回国就业 知乎 编辑:程序博客网 时间:2024/05/19 13:24
Objectives
1、理解如何用矩阵去表达线性(linear)和仿射(affine)变换。
2、学习坐标系变换,如缩放、旋转。
3、发现几个变换矩阵可以通过矩阵乘法转换成一个变换网络。
4、发现如何转换坐标系从一个坐标系到另外一个。怎么去用矩阵描述这样的坐标系变换。
5、熟悉DirectXMath库提供的函数来构造变换矩阵。
线性变换
考虑一个函数对于
那么我们说这个函数是一个线性变换。
矩阵拓展
给定一个向量
其中
故,我们有这样的结论:
所以,我们可以写成向量-矩阵乘法的形式。
我们可以说:矩阵A是线性变换
缩放
我们定义缩放像这样:
可以很容易的看出来,
旋转
从上图可以推导出:
接下来就是将其转化为线性变换矩阵模式,将单位向量代入即可。
令
可以发现旋转矩阵所有行向量的长度为1,且相互正交。
所以他的逆矩阵就等于转置矩阵。
这对于计算机的运算来说是非常效率的。
仿射变换
齐次坐标系(Homogeneous Coordinates)
因为我们对于向量只能表示方向或点,无法表达位移(translation)。换句话说,向量在进行位移时,不应该被改变。而齐次坐标系提供了一个方便的表达方式,来让我们同时表达向量和点。利用齐次坐标,我们使用4次来区分:
1、
2、
定义和矩阵表达
一个线性变换不能表达我们所有的变换。因此,我们增加一个向量:
如果我们增加齐次坐标
则这个4x4的矩阵被称为仿射变换的矩阵表达形式。
位移
仿射矩阵下的缩放和旋转
如果
缩放和旋转的4x4仿射矩阵表达:
坐标系之间的转换
对于点:
对于向量:
那么在齐次坐标系中,我们可以将他们表达在一起:
如果
Direct Math Transformation Functions
XMMATRIX XM_CALLCONV XMMatrixScaling(float ScaleX,float ScaleY,float ScaleZ);//构造一个缩放矩阵XMMATRIX XM_CALLCONV XMMatrixScalingFromVector(FXMVECTOR Scale); // Scaling factors (sx,sy,sz)XMMATRIX XM_CALLCONV XMMatrixRotationX(float Angle); //构造一个绕X轴旋转矩阵XMMATRIX XM_CALLCONV XMMatrixRotationAxis(FXMVECTOR Axis, float Angle);//构造一个绕Axis旋转Angle的矩阵XMMATRIX XM_CALLCONV XMMatrixTranslation(float OffsetX,float OffsetY,float OffsetZ);//构造一个平移XMMATRIX XM_CALLCONV XMMatrixTranslationFromVector(FXMVECTOR Offset);XMVECTOR XM_CALLCONV XMVector3TransformCoord(FXMVECTOR V, CXMMATRIX M); //V_w = 1;XMVECTOR XM_CALLCONV XMVector3TransformNormal(FXMVECTOR V, CXMMATRIX M);//V_w = 0;
0 0
- Direct变换
- Direct-X学习笔记--变换
- 变换
- 变换
- Direct X
- Direct 着色
- direct show
- direct show
- Ext.Direct
- Direct IO
- Direct UI
- direct io
- Wifi-direct
- direct-io
- wifi direct
- Direct UI
- Direct Draw
- direct yuv
- Codeforces Round #407 (Div. 2) C. Functions again(前缀和)
- (转)FragmentTabHost切换Fragment时避免重复加载UI
- 数据结构学习(二)
- 小车姿态获取
- 基础练习 芯片测试
- Direct变换
- Android之Glide获取图片Path、Bitmap用法
- 最优布线问题(俩方法)?!pulingmu...
- POJ 2101 Honey and Milk Land G++
- 在Windows中玩转Docker Toolbox(镜像加速)
- A
- mxnet修改网络输出num
- LOI Online Judge32. 【2017.4.1】派
- 0401