Android培训课:添加动作

在屏幕上绘制对象是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设置开启是个比较好的选择。准备好取消注释这行代码吧!因为下节课会重新让该设置可用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值