OpenGL和3D图形一般都是基于向量和矩阵数学。…此处省略50字…

一旦有矩阵数据的基础,就可以继续学习OpenGL的教程了。

向量

数学向量是一种表示由多个部分组成的值的方法,可以用与表示一些带有大小和方向的事物。 要理解这些意思的最好方法是看一个例子。

这里有一个点,x=2, y=3。怎么用向量表示这个点?像这样:

2 3

就是这样。向量真的仅是表示值的方法,这个值由多部分组成,像我们刚才的情况就是表示一个由x和y 组成的一个点的位置。

多边形

现在这个有用吗?看,在OpenGL(和大多其他3D图像API)中,所有非常漂亮的东西都是作为一个多边形的几何被渲染。那么就会有人问这样一个问题:“在计算机里怎样表示一个多边形?” 我画这样一个三角形:

它可以用一个点的数组来表示。

这可以表示为向量的数组: 1 1 3 3 5 1

这可以被OpenGL使用,渲染一个多边形。 这个很重要,因为在3D图形中多边形被用于表示3D对象。

一个简单的无色立方提的3D模型仅仅一个大数字的数组。

const float cubeModel =
{
 //Front
 -1.f, -1.f,  1.f,
 1.f, -1.f,  1.f,
 1.f,  1.f,  1.f,
 -1.f,  1.f,  1.f,

 //Back
 -1.f, -1.f, -1.f,
 1.f, -1.f, -1.f,
 1.f,  1.f, -1.f,
 -1.f,  1.f, -1.f,

 //Top
 -1.f,  1.f,  1.f,
 1.f,  1.f,  1.f,
 1.f,  1.f, -1.f,
 -1.f,  1.f, -1.f,

 //Bottom
 -1.f, -1.f,  1.f,
 1.f, -1.f,  1.f,
 1.f, -1.f, -1.f,
 -1.f, -1.f, -1.f,

 //Left
 -1.f, -1.f, -1.f,
 -1.f,  1.f, -1.f,
 -1.f,  1.f,  1.f,
 -1.f, -1.f,  1.f,
 
 //Right
 1.f, -1.f, -1.f,
 1.f,  1.f, -1.f,
 1.f,  1.f,  1.f,
 1.f, -1.f,  1.f
};

上面这段代码用于渲染一个立方体。三一个一组的数字表示一个向量点,每4个向量的集合表示立方体 一个面的四个角。

3D向量

现在你已经知道了在2D空间的x/y坐标,那么在3D空间中又是怎么呢?在上面立方体模型的代码中, 每个点的第三个数字是z位置。左右方向是X的位置,上下方向是Y的位置,前后方向是Z的位置。

另为需要注意的是哪个是x,y和z的正方向。右边是X的正方向,左边是负方向。上边是Y的正方形,下边是负方向。朝向你的是Z的正方形,远离你的是负方向。这就是使用最多的“右手规则”。

向量算数

参考资料: