传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229
html
传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229
java
传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229android
在屏幕上绘制图像对于OpenGL来讲只是一个很是基本的功能,你也可使用其它的Android图形框架类来实现,好比使用Canvas和Drawable对象。可是OpenGL ES确有过人之处,它支持在三维空间上移动和变换绘制对象,或以其它独特的方式来创造极好的用户体验。
在这一节中,将介绍如何使用OpenGL ES为绘制的形状添加一个旋转运动的功能。
1、旋转一个形状
使用OpenGL ES 2.0旋转绘制对象也很简单。先建立另外一个变换矩阵(一个旋转矩阵),而后将它合并到投影和相机视图变换矩阵就能够了: 设计模式
private float[] mRotationMatrix = new float[16]; public void onDrawFrame(GL10 gl) { ... // 为三角形建立一个旋转变换 long time = SystemClock.uptimeMillis() % 4000L; float angle = 0.090f * ((int) time); Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f); // 将旋转矩阵合并到投影和相机视图矩阵 Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0); // 绘制三角形 mTriangle.draw(mMVPMatrix); }
在对程序作了这些改动以后,若是三角形仍是转不起来,请确认一下是否把GLSurfaceView.RENDERMODE_WHEN_DIRTY设置注释掉了,其中的原因将在下一节中描述。
2、启用持续渲染
说到这里,你应该在代码中注释掉了只有当数据发生改变时才渲染的渲染模式的代码。不然,OpenGL只能旋转一次,而后等待GLSurfaceView的容器调用requestRender()方法: 架构
private float[] mRotationMatrix = new float[16]; public void onDrawFrame(GL10 gl) { ... // 为三角形建立一个旋转变换 long time = SystemClock.uptimeMillis() % 4000L; float angle = 0.090f * ((int) time); Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f); // 将旋转矩阵合并到投影和相机视图矩阵 Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0); // 绘制三角形 mTriangle.draw(mMVPMatrix); }
除非你不想让绘制的对象与用户交互,不然启用这个渲染模式是一个很好的作法。如今准备解除去它的注释了,由于在下一节中会再次用到它。
框架