OpenGL中向量和矩阵浅析

向量

向量:在3D笛卡尔坐标系中,一个顶点就是由XYZ定义的,这样的顶点就是向量。(有方向的点就是向量)
向量长度(模)的计算方式:

向量长度计算.png

标量:没有方向只有大小

  • 单位向量:长度为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);

视图变换

视图变换就是切换视觉坐标系,通俗点说就是人看一个物体,这个物体的中心就是坐标原点,视图变化就是看物体的另外一面。所以在进行其他任何模型变换之前,必须先做视图变换。

模型变换:

用于操纵模型与其中某特定变换. 这些变换将对象移动到需要的位置. 通过旋转,缩放,平移。


模型变换.png
  • 平移
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);

你可能感兴趣的:(OpenGL中向量和矩阵浅析)