Android代码-一个使用openGL渲染的炫丽Android动画库 MagicSurfaceView

  • P6_141121
    了解作者
  • 50.9KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-17 08:18
    上传日期
android-magic-surface-view 这是一个 android 动画特效库, 可以实现各种炫酷动画。 1. 安装 gradle: dependencies { compile 'com.gplibs:magic-surface-view:1.1.1' } 2. 一些示例效果 此文档只做一些简单说明, 具体使用方法还请参考 示例项目. 示例项目源码: 示例项目apk: Download 以下是示例项目中的一些效果 (gif图片帧数低,使用真机运行效果更好): 启动及退出动画 : 模仿MacWindow动画 : 碎片化曲面动画 : 其他示例效果,可以下载示例项目运行查看。 3. 概述 一个MagicSurfaceView只能同时渲染一个MagicScene 一个MagicScene可以包含多个MagicSurface 一个MagicSurface可以对应一个View或者Bitmap对象 场景创建及渲染 // 创建一个MagicSurface对象 MagicSurface surface = new MagicSurface(view) //
Android代码-一个使用openGL渲染的炫丽Android动画库 MagicSurfaceView.zip
内容介绍
# android-magic-surface-view 这是一个 android 动画特效库, 可以实现各种炫酷动画。 _**1. 安装**_ _gradle:_ ```Gradle dependencies { compile 'com.gplibs:magic-surface-view:1.1.1' } ``` <br /> --- _**2. 一些示例效果**_ 此文档只做一些简单说明, 具体使用方法还请参考 示例项目.<br/> 示例项目源码: <https://github.com/gplibs/android-magic-surface-view-sample> <br/> 示例项目apk: [Download](https://github.com/gplibs/resources/raw/master/android/magic-surface-view/apk/magic-surface-view-sample-release.apk) _以下是示例项目中的一些效果 (gif图片帧数低,使用真机运行效果更好):_ 启动及退出动画 :<br/> ![image](https://github.com/gplibs/resources/raw/master/android/magic-surface-view/readme/launch.gif) 模仿MacWindow动画 :<br/> ![image](https://github.com/gplibs/resources/raw/master/android/magic-surface-view/readme/mac_window_anim.gif) 碎片化曲面动画 :<br/> ![image](https://github.com/gplibs/resources/raw/master/android/magic-surface-view/readme/scrap_anim.gif) 其他示例效果,可以下载示例项目运行查看。 <br /> --- _**3. 概述**_ 一个MagicSurfaceView只能同时渲染一个MagicScene<br/> 一个MagicScene可以包含多个MagicSurface<br/> 一个MagicSurface可以对应一个View或者Bitmap对象<br/> _场景创建及渲染_ ```Java // 创建一个MagicSurface对象 MagicSurface surface = new MagicSurface(view) // view为要进行动画操作的View .setVisible(true) // 设置模型是否要渲染 (默认为true) .setShininess(64) // 设置模型材质光泽度,默认64; 数值越大越光滑, 只对光照生效,无光照效果可忽略. .setGrid(30, 40) // 设置网格模型行列数,行列数越多效果越精致,但也更耗性能; 默认 30,30 .setEnableBlend(true) // 是否开启混合,为透明对象时需开启,(默认为开启) .setEnableDepthTest(true) // 是否开启深度测试,开启后会按三维坐标正常显示,如果关闭,绘制时将覆盖之前已经绘制的东西,(默认为开启) .setModelUpdater(modelUpdater) // 设置模型更新器, 可以执行顶点坐标及颜色相关动画操作; 详情见 "5. 模型更新器 MagicSurfaceModelUpdater" .setMatrixUpdater(matrixUpdater) // 设置矩阵更新器, 可以执行矩阵变换相关动画操作; 详情见 "6. 矩阵更新器 MagicSurfaceMatrixUpdater" .drawGrid(false); // 设置绘制时是否只绘制网络,默认false. (调试动画找问题时可以只画网格,可能有点帮助) // 创建一个多曲面MagicMultiSurface对象 MagicMultiSurface multiSurface = new MagicMultiSurface(view, 20, 10) // view为要进行动画操作的View, (20,10)表示将曲面分解成 20行 10列 共两百个子曲面 .setUpdater(mMultiUpdater) // 设置 MagicMultiSurfaceUpdater 对子曲面进行动画操作 详情见 "7. MagicMultiSurfaceUpdater" .setVisible(true) // 设置模型是否要渲染 (默认为true) .setShininess(64) // 设置模型材质光泽度,默认64; 数值越大越光滑, 只对光照生效,无光照效果可忽略. .setEnableBlend(true) // 是否开启混合,为透明对象时需开启,(默认为开启) .setEnableDepthTest(true); // 是否开启深度测试,开启后会按三维坐标正常显示,如果关闭,绘制时将覆盖之前已经绘制的东西,(默认为开启) // 创建场景 MagicScene scene = new MagicSceneBuilder(myMagicSurfaceView) .addSurfaces(surface, multiSurface) // 添加Surface对象;可以添加多个 如: addSurfaces(surface, surface1, surface2) .ambientColor(0XFF222222) // 设置场景环境光, 默认为0XFFFFFFFF .addLights(light) // 添加光源对象,类型可以为PointLight或者DirectionalLight; 可以添加多个 如: addLights(light, light1, light2) .setUpdater(sceneUpdater) // 添加场景更新器, 可以执行场景相关变量的动画操作; 详情见 "4. 场景更新器 MagicSceneUpdater" .build(); // 渲染 myMagicSurfaceView.render(scene); ``` _模型更新器 MagicSurfaceModelUpdater 动画原理_ MagicSurfaceModelUpdater 原理相对麻烦些,单独说明如下: 渲染使用openGL;每个MagicSurface对象都包含一个SurfaceModel,这个SurfaceModel即是openGl要绘制的曲面模型;<br/> SurfaceModel中包含着openGL绘制时需要的一些必要元素, 顶点坐标集合、顶点索引集合、法向量集合等;<br/> 构造MagicSurface时传入View后,会转为Bitmap 作为纹理绑定到曲面模型上。<br/> 曲面模型的生成,及纹理绑定过程都由此库自动完成。 我们可以做的是:<br/> SurfaceModel中的顶点集合,是一个 r(行) * c(列) 的一个矩形网格;<br/> 我们修改这个矩形网格上每个点的属性,渲染效果就会有相应的变化;(网格的点与点之间每像素点的属性,由openGL根据我们设置的网格关键点的属性进行插值计算自动完成)<br/> 网格上每个点可以修改的属性包含: 1. 顶点坐标。修改网格上某一点的顶点坐标后,绑定在该点上的纹理也会跟着发生相应的形变。<br/> 2. 顶点颜色。修改网格上某一点的顶点颜色后,该点上的最终颜色会按 "_顶点最终颜色计算过程_" 那样进行变化。<br/> <br/> _顶点最终颜色计算过程 为:_ **顶点最终颜色 = 原始颜色 * 顶点颜色 * 场景环境光颜色 + 原始颜色 * 顶点颜色 * 灯光颜色**<br/> 原始颜色:构建MagicSurface时传入的View或者Bitmap生成的纹理在对应坐标的颜色值.<br/> 顶点颜色:默认为rgba(1,1,1,1); 可以由 模型更新器 修改.<br/> 场景环境光颜色:默认为rgba(1,1,1,1); 可以由 MagicSceneUpdater 修改.<br/> 灯光颜色:构建MagicScene时传入的灯光对象集合,在模型对应顶点产生的光照颜色值; 如果未设置灯光,灯光颜色值为rgba(0,0,0,0); 可以由 MagicSceneUpdater 修改. 颜色相乘算法为:(其中r,g,b,a都为0 ~ 1的浮点数, 对应整形颜色值0 ~ 255)<br/> color1(r1, g1, b1, a1) * color2(r2, g2, b2, a2) == color3(r1* r2, g1* g2, b1* b2, a1* a2) <br/> 颜色相加算法为:(其中r,g,b,a都为0 ~ 1的浮点数, 对应整形颜色值0 ~ 255)<br/> color1(r1, g1, b1, a1) + color2(r2, g2, b2, a2) == color3(r1+r2, g1+g2, b1+b2, a1+a2)<br/> <br/> _场景坐标(即openGL坐标):_ 跟坐标相关的动画操作都使用场景坐标,与Android的View的坐标系无关<br/> MagicSurfaceView的中心即为场景坐标原点(0,0,0) x轴向右 y轴向上 z轴向屏幕外 <br/> MagicSurface网格模型各点坐标z轴默认为0<br/> MagicSurfaceView 及 MagicSurface 相关点场景坐标获取方法 参考 "_**5. 模型更新器 MagicSurfaceModelUpdater**_" <br/> _关于偏移量:_ 当一个MagicSurface上同时使用模型更新器和矩阵更新器时.<br /> 两个只能有一个应用偏移量,不然位置会出现偏差。 偏移量具体说明,参考 模型更新器 和 矩阵更新器。 <br/> _Updater性能优化:_ MagicSceneUpdater, MagicSurfaceModelUpdater及MagicSurfaceMatrixUpdater 都为 MagicUpdater 的子类<br/> 当同时有多个MagicUpdater运行时,可以考虑进行分组<br/> MagicUpdater都有一个可以传入分组参数的构造函数和一个setGroup方法可以对他们进行分组; (setGroup必须要在调用render方法之前执行)<br/> 如果不进行分组,它们会独自开启一线程更新。将一些计算量较少的MagicUpdater分到同一组,他们将在一个线程中执行,这样可以节约资源,提升性能。 <br /> --- _**4. 场景更新器 MagicSceneUpdater**_ MagicSceneUpdater 对场景变量进行修改; 场景变量包含 环�
评论
    相关推荐
    • NewtonsTimer
      一个简单的计时器应用程序,灵感来自牛顿的Gradle。 在Jetpack Compose中为创建。 :light_bulb: 动机与情境 目的是创建一些简单而有趣的工具,以演示(和评估)Jetpack Compose的功能。 结果是一个(最多)1分钟的...
    • ProjectFirst:它的泡泡游戏,需要 gradle 扩展来使用库。 代码也需要清理,很多注释掉的东西
      推荐使用 Netbeans,需要 Gradle 插件。 使用和来格式化这个自述文件。 当前目标(TODO): 重大的 物理 随机速度/加速度 屏幕 主/启动画面,点击进入游戏画面 次要的 音乐 - 在运行时从目录中获取音乐文件列表,而...
    • Android GIF 动画
      Android GIF 动画
    • Android loading动画
      Android loading动画,跳动的省略号,比较适合添加到等待页面
    • plusMenu:底部弹出 仿微博、酷安点击加号揭露动画弹出菜单+背景模糊效果
      注意:在gradle中开启renderscript,支持模糊效果(高斯模糊也叫毛玻璃) defaultConfig { applicationId "com.dsy.plusmenu" ... renderscriptTargetApi 25 renderscriptSupportModeEnabled true } 参考项目
    • 动画侧滑菜单
      先用动画实现一遍侧滑菜单,弹出动画的效果,自行处理
    • android 动画资源
      网上搜索到的一些资源 关于android的一些主要动画的展示共享了
    • PicturePreview-master.zip
      BigImage + ImageView + ViewPager = ...v0.0.5新增:可设置缩放比例、缩放动画时间。 用法 添加依赖 Step 1. Add it in your root build.gradle at the end of repositories: allprojects { repositories {
    • PeriscopeLayout, 带有像潜望镜的动画的布局.zip
      带有像潜望镜的动画的布局 PeriscopeLayout带有像潜望镜的动画的布局一个类似Periscope点赞效果的Layout,效果如下: 对应的实现文章在这里:一步一步教你实现Periscope点赞效果添加依赖项 Gradlecompile '
    • 粒子动画demo
      粒子动画demo,满足日常修改所需用到的粒子动画合集,比较适用