Android openGl学习笔记二,gl的旋转、位移、放大缩

2017-05-24  本文已影响226人  无灬痕

这章文章是对上一篇的进一步学习,最终以达到类似动画效果的目的。
不管什么时候参考资料放在第一位:<a href="http://blog.csdn.net/zhoudailiang/article/details/50176143">学习参考资料</a>
这个是本人经过层层筛选后感觉比较全且比较易懂的文章了,学习记录将按照此链接的博客逐步深入学习,在此感谢博主。

与动画一样的套路,glTranslates、glRotatef、glScalef分别对应位移、旋转、缩放。理所当然的,这些方法都是可以组合使用的,但是~但是!代码的前后,即执行的顺序不同,便会出现不同的效果。
例子:盗用一下链接的图:

image.png

文中出现两个函数 glPushMatrix()和glPopMatrix();
glPushMatrix()在执行glTranslates()、glRotatef()、glScalef()前调用
目的是保存当前矩阵
glPopMartrix()在以上函数执行后调用,目的是恢复原先的矩阵设置
(亲测。这两个函数单写一个或者忽略不写的情况下,暂未发现不妥之处。)

接下来研究下glTranslates、glRotatef、glScalef三个函数对应的xyz值代表的含义
首先先理解XYZ轴的关系,其实很好理解,就是高中时候的三维坐标在,
具体的:x轴、y轴分别对应手机屏幕的宽、高。而z轴是垂直于手机屏幕的(可以理解成眼睛正对于手机平面的视角,即手机与眼睛练成的线就是Z轴,手机屏幕正面是正数,屏幕背后是负数)即z轴的值越小,这个图形就越小。z轴的值越大即图形越大甚至超出屏幕(超出屏幕就看不到了,具体是否是这样有待考察)。以笔记一的方块正方形为例,gl(0,0,-1);z轴是-1的时候,视图才会在屏幕中出现....
z轴与视图的x、y息息相关,(有点类似将整体坐标轴向后拉的感觉,默认屏幕中心为原点,右边为X 正1 左边为X轴 -1 ,即从原点到屏幕边缘默认长度为1)
上两个Z轴坐标-10 和-20的图做对比

![Uploading QQ图片20170523162014_642574.png . . .] image.png

接下来是-20的


QQ图片20170523162008.png image.png

通过观察,同样的X轴移动3f,在Z轴的值为-10、-20时产生的效果是不一样的,对比第一张图,正方形显示不全,第二张图显示完全并且与手机屏幕的右侧相距一定的距离,这感觉就像是正方向整个视图被拉远了产生的效果,这也是我之前提到的视线.....以此为基础,更改Y轴的值产生的效果是一样的。
这也就可以理解为什么在第一张贴图先平移后缩放跟先缩放后平移的效果产生的差异的原因了。(可以理解成:位移21=2, 然后再缩小0.5倍,而调换顺序后 是缩小0.5倍之后, 再位移20.5=1 ,这样就产生了差异化)

补充一下:onDrawFrame(GL10 gl) 这个方法大概13-21秒执行 一次,其中16-17毫秒居多。

上一篇下一篇

猜你喜欢

热点阅读