Android OpenGLES2.0——OpenGL中的平移旋转缩放
Posted 湖广午王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android OpenGLES2.0——OpenGL中的平移旋转缩放相关的知识,希望对你有一定的参考价值。
在前面的博客中,所有的例子都是一个对象,类似绘制圆锥绘制圆柱,我们都是传入一个参数,然后去控制那个圆面的位置,如果我们要绘制几个个正方形,它的位置、大小、方向都是不相同的,按照那种方式该多麻烦啊。所以我们需要更好的办法——矩阵变换。
什么是矩阵
其实在之前的博客中,我们也基本都用到了矩阵,投影的设置,就是根据参数生成一个4*4的矩阵,我们用长度为16的浮点型数组来存储,相机的设置也是如此。那么矩阵到底该怎么定义?
矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。 矩阵的运算是数值分析领域的重要问题。
在大学高数课程中也有学习矩阵的只是,矩阵也可以进行加减和乘法运算。在OpenGL中使用的向量为列向量,我们通过利用矩阵与列向量(颜色、坐标都可看做列向量)相乘,得到一个新的列向量。利用这点,我们构建一个的矩阵,与图形所有的顶点坐标坐标相乘,得到新的顶点坐标集合,当这个矩阵构造恰当的话,新得到的顶点坐标集合形成的图形相对原图形就会出现平移、旋转、缩放或拉伸、抑或扭曲的效果。矩阵和顶点相乘示例如下(如果用长度为16的float数组存储,则m序号-1即为其下标),那么如何构造合适的矩阵呢?
我们在 Android OpenGLES2.0(七)——着色器语言GLSL中提到了,OpenGLES中的矩阵有2*2、3*3和4*4三种矩阵。在本篇博客中只以4*4来进行分析。
OpenGL中常用矩阵
如(1)中公式所示,即为矩阵和顶点相乘的公式,如果矩阵取值恰当,则可实现图形的平移、旋转、缩放、拉伸等变换。在这里直接给出:
⎡⎣⎢⎢⎢100001000010δXδYδZ1⎤⎦⎥⎥⎥(平移变换矩阵)
OpenglES2.0 for Android:来画个立方体吧
Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合
Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合
OpenglES2.0 for Android:各种变换来一波