Android OpenGLES2.0——OpenGL中的平移旋转缩放

Posted 湖广午王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android OpenGLES2.0——OpenGL中的平移旋转缩放相关的知识,希望对你有一定的参考价值。

在前面的博客中,所有的例子都是一个对象,类似绘制圆锥绘制圆柱,我们都是传入一个参数,然后去控制那个圆面的位置,如果我们要绘制几个个正方形,它的位置、大小、方向都是不相同的,按照那种方式该多麻烦啊。所以我们需要更好的办法——矩阵变换。

什么是矩阵

其实在之前的博客中,我们也基本都用到了矩阵,投影的设置,就是根据参数生成一个4*4的矩阵,我们用长度为16的浮点型数组来存储,相机的设置也是如此。那么矩阵到底该怎么定义?

矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。 矩阵的运算是数值分析领域的重要问题。

在大学高数课程中也有学习矩阵的只是,矩阵也可以进行加减和乘法运算。在OpenGL中使用的向量为列向量,我们通过利用矩阵与列向量(颜色、坐标都可看做列向量)相乘,得到一个新的列向量。利用这点,我们构建一个的矩阵,与图形所有的顶点坐标坐标相乘,得到新的顶点坐标集合,当这个矩阵构造恰当的话,新得到的顶点坐标集合形成的图形相对原图形就会出现平移、旋转、缩放或拉伸、抑或扭曲的效果。矩阵和顶点相乘示例如下(如果用长度为16的float数组存储,则m序号-1即为其下标),那么如何构造合适的矩阵呢?

x1y1z11=m1m2m3m4m5m6m7m8m9m10m11m12m13m14m15m16xyz1=m1x+m5y+m9z+m13m2x+m6y+m10z+m14m3x+m7y+m11z+m15m4x+m8y+m12z+m16(1)
我们在 Android OpenGLES2.0(七)——着色器语言GLSL中提到了,OpenGLES中的矩阵有2*2、3*3和4*4三种矩阵。在本篇博客中只以4*4来进行分析。

OpenGL中常用矩阵

如(1)中公式所示,即为矩阵和顶点相乘的公式,如果矩阵取值恰当,则可实现图形的平移、旋转、缩放、拉伸等变换。在这里直接给出:

1000010000100001()
100001000010δXδYδZ1()
OpenglES2.0 for Android:来画个立方体吧

Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合

Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合

OpenglES2.0 for Android:各种变换来一波

Android OpenGLES2.0——纹理贴图之显示图片

OpenglES2.0 for Android:来画个球吧