OpenGL向量、矩阵相关
2020-07-17 本文已影响0人
ugpass
向量
定义:既有大小,又有方向的一个几何对象。
单位向量:不论方向,大小为1的向量
向量大小(长度/模)的计算公式
![](https://img.haomeiwen.com/i1395687/58864705b05b176a.gif)
非单位向量(x, y, z)转化为单位向量
![](https://img.haomeiwen.com/i1395687/6992aaae1049cda6.gif)
向量的点乘
-
点乘只能发生在两个单位向量之间,如果不是单位向量,需要转化成单位向量才能点乘。
-
点乘的结果是一个标量,在[-1,1]之间,是两个向量夹角的cos值。
-
math3d.h
中点乘提供了两个函数:-
m3dDotProduct3(const float *u, const float *v)
:返回两个向量之间夹角的cos值。 -
m3dGetAngleBetweenVectors3(const float *u, const float *v)
:返回两个向量之间夹角对应的弧度。
-
向量的叉乘
两个向量和
叉乘得到的结果仍然是一个向量
,该向量
垂直于两个向量
和
所构成的平面。
-
math3d.h
中叉乘提供了两个函数:m3dCrossProduct3(float *result, const float *u, const float *v)
矩阵(Matrix)
矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合。可以用一维或二维数组表示,在OpenGL中习惯使用一维数组。
矩阵的运算
-
加减法。只要两个矩阵行和列相等,则对应位置的元素进行加减即可。
-
点乘。两个矩阵行数和列数相等,对应位置的元素相乘即为结果矩阵对应位置的元素。
-
叉乘。只有第一个矩阵A的列数和第二个矩阵B的行数相等时相乘才有意义。
单位矩阵
主对角线值为1,其余值为0的矩阵称为单元矩阵。
OpenGL矩阵变换
![](https://img.haomeiwen.com/i1395687/c270eba5c254b13f.png)
行矩阵:逐行读取
![](https://img.haomeiwen.com/i1395687/a67e37d354785976.gif)
列矩阵:逐列读取
![](https://img.haomeiwen.com/i1395687/5c33e7a7f7db3bbb.gif)
行矩阵通过矩阵转置后可以得到列矩阵。
在数学中,习惯使用行矩阵来进行运算,此时mpv的顺序为position * m * v * p
。
在OpenGL中,习惯使用列矩阵来进行运算,此时mpv相乘的顺序为p * v * m * position