首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >速读原著-Android应用开发入门教程(3D动画效果的实现)

速读原著-Android应用开发入门教程(3D动画效果的实现)

作者头像
cwl_java
发布2020-02-13 15:08:24
7210
发布2020-02-13 15:08:24
举报
文章被收录于专栏:cwl_Javacwl_Java

10.4 3D动画效果的实现

OpenGL 本身可以强大的实现动画的效果,在 Android 中实现动画,实际上只是将 OpenGL 动画需要使用的元素在 Android 中重新实现。 参考示例程序:Touch Rotate(Graphics=>OpenGL ES=>Textured Triangle) 源代码:src/com/example/android/apis/graphics/TriangleActivity.java

src/com/example/android/apis/graphics/TriangleRenderer.java 

Touch Rotate 程序的运行结果如图所示:

在这里插入图片描述
在这里插入图片描述

TriangleActivity.java 的内容如下所示:

    public class TriangleActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mGLView = new GLSurfaceView(this);
            mGLView.setEGLConfigChooser(false);
            mGLView.setRenderer(new TriangleRenderer(this));
            setContentView(mGLView);
        }
        @Override
        protected void onPause() { // 使其中的 View 停止
            super.onPause();
            mGLView.onPause();
        }
        @Override
        protected void onResume() { // 使其中 View 重新开始
            super.onResume();
            mGLView.onResume();
        }
        private GLSurfaceView mGLView;
    }

程序的在 onPause()onResume()中调用 View 的对应函数。 TriangleRenderer.java 的主要函数的内容如下所示:

    public TriangleRenderer(Context context) {
        mContext = context;
        mTriangle = new Triangle();
    }
    public void onDrawFrame(GL10 gl) {
        gl.glDisable(GL10.GL_DITHER);
        gl.glTexEnvx(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,
                GL10.GL_MODULATE);
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// 开始绘制
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glActiveTexture(GL10.GL_TEXTURE0);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureID);
        gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
                GL10.GL_REPEAT);
        gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
                GL10.GL_REPEAT);
// 获取系统时间
        long time = SystemClock.uptimeMillis() % 4000L;
        float angle = 0.090f * ((int) time);
        gl.glRotatef(angle, 0, 0, 1.0f); // 实现旋转
        mTriangle.draw(gl);
    }

OpenGL 本身带回动画绘制的功能,这里使用的 glRotatef()是进行旋转。mTriangle 是一个三角形,在onDrawFrame()根据 OpenGL 的上下文进行动画的绘制。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 10.4 3D动画效果的实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档