注:本文旨在记录笔者的学习过程,仅代表笔者个人的理解,如果有表述不准确的地方,欢迎各位指正!因为涉及到的概念来源自网络,所以如有侵权,也望告知!
前言
在开发过程我们涉及到图形变换,就会涉及到矩阵、向量的计算,所以本文就简单地理解一下向量跟矩阵的概念。
正文
什么是向量
从几何意义上说,向量是具有大小和方向的有向线段。在 3D 笛卡尔坐标系, 基本上⼀个顶点就是XYZ 坐标空间上的⼀个位置。⽽在空间中给定的⼀个位置,恰恰是由⼀个单独的 XYZ 定义的, ⽽这这样的 XYZ 就是向量。
向量的点乘
定义:已知两个非零向量a,b,作OA=a,OB=b,则∠AOB称作向量a和向量b的夹角,记作θ并规定0≤θ≤π。两个向量的点乘是一个标量(没有方向),记作a·b。若a、b不共线,则
。 我们称为⻓度为1的向量为单位向量。

OpenGL运用:math3d 库中提供了关于点乘的API
向量的叉乘
同样向量⾥有另外⼀个在开发中使⽤价值⾮常⾼的操作,叫做“叉乘”。
定义:两个向量a和b的叉乘向量的几何表示是一个向量,记作a×b。若a、b不共线,则a×b的模是:∣a×b∣=|a|·|b|·sin〈a,b〉;a×b的方向是:垂直于a和b,且a、b和a×b按这个次序构成右手系。若a、b垂直,则∣a×b∣=|a|*|b|(此处与数量积不同,请注意),若a×b=0,则a、b平行。向量积即两个不共线非零向量所在平面的一组法向量。
简单理解,2个向量之间叉乘就可以得到另外⼀个向量,新的向量会与原来2个向量定义的平⾯垂直. 同时进⾏叉乘,不必为单位向量。
OpenGL运用:math3d 库中提供了关于叉乘的API
什么是矩阵

记作:这m×n 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数 aij为(i,j)元的矩阵可记为(aij)或(aij)m × n,m×n矩阵A也记作Amn。
那么在OpenGL中我们怎么定义矩阵?在其他编程标准中,许多矩阵库定义⼀个矩阵时,使⽤⼆维数组。OpenGL的约定⾥,更多倾向使⽤ ⼀维数组, 这样做的原因是: OpenGL 使⽤的是 Column-Major(以列为主)矩阵排序的约定。
矩阵计算
我们知道,在OpenGL中我们将图形渲染到屏幕上,中间经历了很多矩阵变换,其中最常涉及到的变化是模型矩阵变换、视图矩阵变换、投影矩阵变化。例如下列公式:
