当前位置: 首页 > news >正文

在安卓中基于OpenGL ES实现随风飘荡3D动画效果

一、 背景

        之前在一款金融APP上看到了类似A波浪一样的3D背景动画效果,觉得还挺好玩的,于是打算自己复刻一个出来玩玩。

二、分析和方案:

       我希望做一个随时间变化的3D波浪动画,因此涉及的变量有:时间、每一个三维坐标的浪高z。而如果需要z轴的值根据x,y的坐标值不同有渐变的波浪作为规律基地,那么把z的值以sin(x + t) + cos(y + t)作为基础模板使得z和x,y,t都产生关系,即通过x,y的值获取波浪初始浪高,t作为相位移动波浪,结果赋予z值,即可产生波浪在波动的效果。后续通过叠加二维三角函数和调整参数符合自己效果即可。

        实现方案1:通过在CPU计算上述规则,每一次drawCall都发起重新计算一次坐标的z值,重新buffer给显存。

        实现方案2:初始化一个z值为0的平面,在vertex shader中通过传入的t值计算z值,最后再乘以变换矩阵。

        显然第二种方法更适合这种对并行度有要求的事情,基本解放了CPU。

三、实现代码:

 这里只放一个vertex shader,因为其余代码都只是模板代码而已:

        uniform mat4 uMVPMatrix;uniform float uTimeStamp;attribute vec4 vPosition;varying float vDepth;void main() {vec4 point = vec4(vPosition);float t = uTimeStamp / 400.0;float z0 = ( sin(radians(vPosition.x * 100.0) + t) + cos(radians(vPosition.y * 50.0) + t / 2.0) ) * 0.5;float z1 = ( sin(radians(vPosition.x * 50.0) + t / 4.0) + cos(radians(vPosition.y * 60.0) + t / 3.0) ) * 0.5;point.z = z0 + z1;gl_Position = uMVPMatrix * point;vDepth = point.z;}

四、最终效果:

在vertex shader上用三角函数做大波浪玩玩

http://www.dtcms.com/a/528098.html

相关文章:

  • Java坐标转换技术详解
  • AWS Systems Manager:批量服务器管理的隐藏利器
  • 如何分析对手网站关键词网页版游戏平台
  • 招聘网站建设初衷远程数据库 wordpress
  • 驱动隔离芯片:电子系统的安全与效能守护者
  • 【经验】Word/WPS|用邮件合并批量填写表格或教案,单个Word导出成多个文件
  • Git工作流
  • 简单企业网站青岛天元建设集团网站
  • C#/.NET 微服务架构:从入门到精通的完整学习路线
  • 从 MySQL 过渡到 PostgreSQL 学习计划(暂定)
  • JAVA算法练习题day53
  • 在 C# .NETCore 中使用 RabbitMQ 实现发布、订阅示例
  • 【MySQL-笔记】数据库MySQL的安装与卸载
  • 网站没有域名wordpress修改鼠标
  • LeetCode 刷题【133. 克隆图】
  • [人工智能-大模型-74]:模型层技术 - 模型训练六大步:③神经网络,预测输出:基本功能与对应的基本组成函数
  • 机器学习锂离子电池!预估电池!
  • Redshift历史SQL运行记录查询
  • 告别信息孤岛:工业无线网桥实现跨车间、跨厂区统一组网
  • 7.2 按钮实验
  • 多语言网站思路柳州市安全教育平台
  • 触摸未来2025-10-25:蓝图绘制
  • 面向对象——设计模式(行为型)
  • 06-MySQL基础查询
  • 蓬莱网站建设哪家专业苏州智能网站开发
  • 医院慢病管理软件系统问题域需求分析文档(示例)
  • Java 大视界 -- Java 大数据机器学习模型在舆情分析中的情感倾向判断与话题追踪
  • 用于小样本故障增量学习的多视图 Shapelet 原型网络
  • 动态规划思想的延伸:计数模式再升级——巧妙捕捉「优美子数组」
  • 徐州提供网站建设要多少钱杭州房产网我爱我家官网