博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个使用openGL渲染的炫丽Android动画库二(碎片化曲面动画)
阅读量:5250 次
发布时间:2019-06-14

本文共 2395 字,大约阅读时间需要 7 分钟。

MagicSurfaceView v1.1.0发布, 新增碎片化曲面动画

地址:https://github.com/gplibs/android-magic-surface-view

示例效果 :

image

新增 MagicMultiSurface

// 创建一个多曲面MagicMultiSurface对象MagicMultiSurface multiSurface = new MagicMultiSurface(view, 20, 10) // view为要进行动画操作的View, (20,10)表示将曲面分解成 20行 10列 共两百个子曲面        .setUpdater(mMultiUpdater)       // 设置 MagicMultiSurfaceUpdater 对子曲面进行动画操作 详情见 "MagicMultiSurfaceUpdater"        .setVisible(true)                // 设置模型是否要渲染 (默认为true)        .setShininess(64)                // 设置模型材质光泽度,默认64; 数值越大越光滑, 只对光照生效,无光照效果可忽略.        .setEnableBlend(true)            // 是否开启混合,为透明对象时需开启,(默认为开启)        .setEnableDepthTest(true);       // 是否开启深度测试,开启后会按三维坐标正常显示,如果关闭,绘制时将覆盖之前已经绘制的东西,(默认为开启)

及对应 MagicMultiSurfaceUpdater

MagicMultiSurfaceUpdater 对 MagicMultiSurface 中每个子模型进行矩阵变换及颜色值修改,

调用过程为 willStart -> didStart -> (updateBegin -> (update [遍历每个子模型]) -> updateEnd [此部分通过notifyChanged触发,循环调用直到 调用 Updater stop方法]) -> didStop

public class MyMultiSurfaceUpdater extends MagicMultiSurfaceUpdater {    // 在绘制第一帧之前调用 (可以在此方法里进行一些初始化操作)    @Override    protected abstract void willStart(MagicMultiSurface surface) {    }    // 在开始绘制后调用(绘制第一帧后调用,一般动画可以在此开始)     // 动画有更新时,需调用 notifyChanged()方法 通知框架可以调用 update 相关方法进行更新。    @Override    protected abstract void didStart(MagicMultiSurface surface) {    }    // 当调用 updater stop方法之后,真正停止后会回调此方法    @Override    protected abstract void didStop(MagicMultiSurface surface) {    }    // 每次各子模型更新之前调用    @Override    protected abstract void updateBegin(MagicMultiSurface surface) {    }    /**     * 修改r行 c列处子模型的矩阵matrix, 及子模型颜色color     * @param surface     * @param r 行     * @param c 列     * @param matrix 矩阵     * @param offset 偏移量 (跟MagicSurfaceMatrixUpdater中偏移量一样的意义,只是此处为某个子模型的偏移量)     * @param color 默认值为 rgba(1,1,1,1), 计算完成后的新颜色要更新到此变量 模型最终颜色计算方法参考 "顶点最终颜色计算过程"     */    @Override    protected abstract void update(MagicMultiSurface surface, int r, int c, float[] matrix, Vec offset, Vec color) {        // 重置矩阵        // reset(matrix);        // 平移        // translate(matrix, offset);        // 旋转        //rotate(matrix, mAxis, angle);        // 缩放        //scale(matrix, mScale);        // 修改颜色        // color.setColor(xxx);    }    // 每次所有子模型更新完成后调用    @Override    protected abstract void updateEnd(MagicMultiSurface surface) {        // 可以在此方法里判断动画是否结束,结束需调用 stop()方法,以结束updater.    }}

转载于:https://www.cnblogs.com/gplibs/p/6869785.html

你可能感兴趣的文章
P1107 最大整数
查看>>
多进程与多线程的区别
查看>>
Ubuntu(虚拟机)下安装Qt5.5.1
查看>>
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
查看>>
java 常用命令
查看>>
CodeForces Round #545 Div.2
查看>>
卷积中的参数
查看>>
51nod1076 (边双连通)
查看>>
Item 9: Avoid Conversion Operators in Your APIs(Effective C#)
查看>>
深入浅出JavaScript(2)—ECMAScript
查看>>
STEP2——《数据分析:企业的贤内助》重点摘要笔记(六)——数据描述
查看>>
ViewPager的onPageChangeListener里面的一些方法参数:
查看>>
Jenkins关闭、重启,Jenkins服务的启动、停止方法。
查看>>
CF E2 - Array and Segments (Hard version) (线段树)
查看>>
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
查看>>
SIGPIPE并产生一个信号处理
查看>>
CentOS
查看>>
Linux pipe函数
查看>>
java equals 小记
查看>>
爬虫-通用代码框架
查看>>