Android OpenGL基础4——变换

前面的三篇文章中讲述了OpenGL中的一些基本概念、物体的创建、着色及纹理的应用,使物体的细节表现的更丰富,但是它始终还是一个静态物体,那么如何使物体动起来了,一种方案是在每一帧中改变物体的顶点属性值,重新渲染,这个可以实现功能,但每次都要重新想GPU传递数据,这个性能上会有很大的浪费,于是就催生了一种新的方案,通过一定方式(通常是数学中的矩阵运算来动态变换一个物体。这就是本篇的主题——变换。这里主要介绍变换时长用到的一些数学概念及这些概念涉及到的数学运算,主要就是向量和矩阵。

系列文章

Befroe

在介绍这些数学概念之前,先了解下Typora中如何使用数学公式,具体参考下面文章:

向量

向量有一个方向(Direction)和大小(Magnitude)。向量可以是任意维度的,但通常指研究二维到四维向量。由于向量是一个方向,所以有些时候会很难形象地将它们用位置(Position)表示出来。为了让其更为直观,我们通常设定这个方向的原点为(0, 0, 0),然后指向一个方向,对应一个点,使其变为位置向量(Position Vector)。

向量与标量运算

标量只是一个数字(或者是仅有一个分量的向量)。当把一个向量加减乘除一个标量是,可以简单的把向量的每个分量分别进行该运算,下面演示一下向量的加法:

上面的加号可以换成 “+”、“-”、“·” 、“÷”。其中“-”、“÷”运算是不能调换前后属性(即不能换成 标量 -/÷ 向量),因为这样颠倒是没有意义的。其实数学上是没有向量和标量相加这个运算的,只不过许多线性代数的库提供了对它的支持。

向量取反

向量取反就是对象量的每个分量进行取反,如 取反操作后得到的就是

向量加减

向量的加法可以定义为向量每个分量相加,即,那么的结果为:(4 + 1, 2+ 2) = (5, 4)。

向量的减法相当于,其结果为:(4-1, 2-1) = (3,1)。

注意向量加减后的结果认为向量。

向量长度

二维向量的长度是通过利用勾股定理来计算出来的,例如向量,那么的长度就为:,所以向量的长度为5。类似的三维向量的长度计算公式为:

说道向量长度,这里要说一下一个特殊的向量,单位向量(即长度为1的向量),用表示。

由于单位向量的长度为1,那么很容易将普通向量转换为单位向量,具体方式就是,用向量的每一个分量除以这个向量的长度即可。这个过程叫标准化过程(想想OpenGL的坐标系统的范围)

向量相乘

矩阵

矩阵向量相乘