直到目前,我们介绍opengl 的工程准备,窗口建立,画第一个三角形,着色器,纹理贴图。所有这些,都寻求问题描述简单,看上去是平面的操作一样。下面我们要进入opengl 的3D,因此需要了解一些必要的数学知识。本文就此做些简单介绍,向量,矩阵及其运算。如果你不能很好理解,至少看一遍吧,以后碰到不懂的地方,可以回过头,再查看本文。
介绍完这些数学知识,简介opengl 程序中如何实战运用,GLM(OpenGL Mathematics)。
本文参照 https://learnopengl.com/ 和 https://learnopengl-cn.github.io/ 学习而来,同时包含自己的学习体会和图示在内。在visual studio 2010下完成代码测试的。由于不会文章中输入矩阵,我的描述虽然简单,但不如他们的清楚。
向量
向量最基本的定义就是一个方向。或者更正式的说,向量有一个方向(Direction)和大小(Magnitude,也叫做强度或长度)。你可以把向量想像成一个藏宝图上的指示:“向左走10步,向北走3步,然后向右走5步”;“左”就是方向,“10步”就是向量的长度。那么这个藏宝图的指示一共有3个向量。向量可以在任意维度(Dimension)上,但是我们通常只使用2至4维。如果一个向量有2个维度,它表示一个平面的方向(想象一下2D的图像),当它有3个维度的时候它可以表达一个3D世界的方向。
下面你会看到3个向量,每个向量在2D图像中都用一个箭头(x, y)表示。我们在2D图片中展示这些向量,因为这样子会更直观一点。你可以把这些2D向量当做z坐标为0的3D向量。由于向量表示的是方向,起始于何处并不会改变它的值。下图我们可以看到向量v¯和w¯是相等的,尽管他们的起始点不同:
由于向量是一个方向,所以有些时候会很难形象地将它们用位置(Position)表示出来。为了让其更为直观,我们通常设定这个方向的原点为(0, 0, 0),然后指向一个方向,对应一个点,使其变为位置向量(Position Vector)(你也可以把起点设置为其他的点,然后说:这个向量从这个点起始指向另一个点)。比如说位置向量(3, 5)在图像中的起点会是(0, 0),并会指向(3, 5)。我们可以使用向量在2D或3D空间中表示方向与位置.,和普通数字一样,我们也可以用向量进行多种运算。
向量与标量运算
标量(Scalar)只是一个数字(或者说是仅有一个分量的