向量
向量:在3D笛卡尔坐标系中,一个顶点就是由XYZ定义的,这样的顶点就是向量。(有方向的点就是向量)
向量长度(模)的计算方式:
标量:没有方向只有大小
- 单位向量:长度为1的向量就是单位向量
- 向量标准化:将向量的长度缩减到1的过程就叫标准化,也叫单位化向量。
-
如何单位化向量量?
(x/|xyz|, y/|xyz|, z/|xyz|); 使用一个⾮零向量除以它的模(向量的⻓长度), 就可以得到方向相同的单位向量; -
向量点乘
目的:求两个向量之间的夹角
前提条件: 2个向量必须为单位向量;
动作: 2个三维向量之间进行点乘
结构: 返回一个[-1,1]范围的值. 这个值其实就是 夹角的cos值(余弦值) -
向量叉乘(叉乘不满足乘法交换律 矩阵1矩阵2 !=矩阵2矩阵1 )
目的:求法线
前提: 2个普通向量
动作: 向量与向量叉乘
结果: 向量(垂直于原来2个向量定义的平面的向量)
矩阵
*矩阵只有⼀行或者⼀列都是合理的. 只有一行或者一列数字可以称为向量. 也可以称为矩阵;
-
转置矩阵:将矩阵的行列互换得到的新矩阵称为转置矩阵,转置矩阵的行列式不变。
*OpenGL 使⽤的是 Column-Major(以列为主)矩阵排序的约定
列向量的标注:矩阵最后一行都是0,只有最后一个数是1 -
单元矩阵:单元矩阵是一个对角线为非零元素,其它元素为零的方形矩阵。
初始化方式:void m3dLoadIdentity44f(M3DMatrix44f m);
视图变换
视图变换就是切换视觉坐标系,通俗点说就是人看一个物体,这个物体的中心就是坐标原点,视图变化就是看物体的另外一面。所以在进行其他任何模型变换之前,必须先做视图变换。
模型变换:
用于操纵模型与其中某特定变换. 这些变换将对象移动到需要的位置. 通过旋转,缩放,平移。
- 平移
void m3dTranslationMatrix44(M3DMatrix44f m, floata x, float y, float z);
- 旋转
m3dRotationMatrix44(m3dDegToRad(45.0), floata x, float y, float z);
- 缩放
void m3dScaleMatrix44(M3DMatrix44f m, floata xScale, float yScale, float zScale);
- 综合效果
void m3dMatrixMultiply44(M3DMatrix44f product, const M3DMatrix44f a, const M3DMatrix44f b);