您的位置:首页 > 移动开发 > Android开发

Android培训课:添加动作

2013-06-12 08:19 239 查看
在屏幕上绘制对象是OpenGL最基本的功能,不过也可以用其他的Android绘图框架的类来做绘制,这些类包括Canvas和Drawable对象等。OpenGL ES提供了更加强大的功能来支持移动和转换被绘制的对象,以三维的方式或其他独特的方式来创建非常有新引力的用户体验。

在本节课,你将迈向OpenGL ES的更深一步,通过学习如何给绘制对象添加旋转动作。


旋转一个形状

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设置注释掉了。


启动持续渲染

如果你跟随示例代码到了这里,那么确定你注释掉了仅在requestRender()调用时进行渲染的设置。否则,OpenGL 只会对形状做一下旋转然后就一直等待来自GLSurfaceView容器的requestRender()调用:
public MyGLSurfaceView(Context context) {
...
// 仅当绘制数据发生改变时执行渲染
//setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); // 为执行旋转而注释掉
}


如果绘制对象不会在无任何用户交互动作下发生改变,那么通常将RENDERMODE_WHEN_DIRTY设置开启是个比较好的选择。准备好取消注释这行代码吧!因为下节课会重新让该设置可用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android OpenGL ES 图形