一、坐标变换
3D坐标系统是坐标换的基础,OpenGL中的坐标系大体是右手坐标系,而Direct3D中大体是左手坐标系。
OpenGL中坐标的表示使用齐次坐标,即(x,y,z,w),其中表示点时w=1;表示向量时w=0;
矩阵相乘也经常叫作合并,它可以用于将一系列矩阵变换合并成一个矩阵;我们需要经常将相同的一系列矩阵变换应用到场景中的每个点上。通过预先一次计算好这些矩阵的合并,就可以成倍减少总的矩阵运算量;计算矩阵的逆矩阵的运算量很大,应该尽量避免。
平移矩阵
缩放矩阵
缩放矩阵用于改变物体的大小或者将点向原点相反方向移动。
缩放还可以用来切换坐标系。例如,我们可以用缩放来在给定右手坐标系的情况下确定左手坐标。
旋转矩阵
围绕任何轴的旋转都可以表示为绕X、Y、Z轴旋转的组合。围绕这3个轴的旋转角度被称为欧拉角。
实践中,当3D空间中旋转轴不穿过原点时,物体使用欧拉角进行旋转需要几个额外的步骤:
(1)平移旋转轴以使它经过原点;
(2)绕X、Y和Z轴旋转适当的欧拉角;
(3)复原步骤(1)中的平移。
旋转矩阵都是正交矩阵,反向旋转的矩阵恰等于其转置矩阵。
万向节死锁
四元数
相机的LookAt矩阵
其中: P(x, y, z)是坐标原点的坐标,在View空间中,即为camera 的position。
二、向量
点积
点积最重要也最基本的应用是求解两向量夹角。设有向量V和W,当V和W为单位向量时,
叉积
三、矩阵堆栈
需要清楚API的旋转实现是改变坐标系还是改变物体,如果是动坐标系,则应该使用矩阵右乘;如果是静态坐标系,则应该使用矩阵左乘,这样才能达到叠加旋转的效果
四、矩阵行主序、列主序
OpenGL在内存中默认是列主序的,而D3D默认是行主序的。
https://www.jianshu.com/p/bfc8327eaad3