Android OpenGL ES绘图教程之五 :加入运动

        在屏幕上面绘制对象是OpenGL的一个非常好的基本功能,但是你也可以在其他的Android图形框架上面实现这些功能,比如Canvas和Drawable对象。OpenGL ES提供了额外的功能在三维坐标系里移动和变换绘制的对象或者用其他特殊的方式创建复杂的用户体验。
    在本教程里,通过学习如何给图形添加旋转运动,使你对OpenGL ES有更加深入的了解。

    1. 旋转图形

       在OpenGL ES 2.0旋转一个绘制的对象是比较简单的。在renderer类中,创建另一个变换矩阵(旋转矩阵),然后将它与投影和相机视图矩阵结合:
private float[] mRotationMatrix = new float[16];
public void onDrawFrame(GL10 gl) {
    float[] scratch = new float[16];
    ...
    // Create a rotation transformation for the triangle
    long time = SystemClock.uptimeMillis() % 4000L;
    float angle = 0.090f * ((int) time);
    Matrix.setRotateM(mRotationMatrix, 0, angle, 0, 0, -1.0f);

    // Combine the rotation matrix with the projection and camera view
    // Note that the mMVPMatrix factor *must be first* in order
    // for the matrix multiplication product to be correct.
    Matrix.multiplyMM(scratch, 0, mMVPMatrix, 0, mRotationMatrix, 0);
    // Draw triangle
    mTriangle.draw(scratch);
}


       如果你的三角形在添加了上述的更改后没有旋转,确保你注释掉了GLSurfaceView.RENDERMODE_WHEN_DIRTY设置,具体原因后面会讲到


    2. 启用连续渲染

       如果你已经努力遵守示例中的代码,确保你注释掉了设置渲染模式为有改变才绘制的那一行,否则OpenGL只会旋转图形一次,然后就会等待GLSurfaceView调用requestRender().


public MyGLSurfaceView(Context context) {
    ...
    // Render the view only when there is a change in the drawing data.
    // To allow the triangle to rotate automatically, this line is commented out:
    //setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}


        除非你需要对象在没有任何用户交互的情况下改变,将这个开关打开通常是个不错的注意。准备好取消这行代码的注释,因为下一节将会使这个调用重新可用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值