it编程 > 游戏开发 > 动画

SuperMap iClient3D for WebGL Canvas(二)彩球动画

100人参与 2024-08-06 动画

前言

上篇文章介绍了利用canvas实现场景数字流效果(链接: ),接下来我们来聊一聊canvas的一些炫酷动画效果。对于初学者来说,自己编写canvas动画有很大难度,这里小编推荐大家下载别人已做好的动画模板,然后将其应用到webgl中,下面我主要介绍webgl如何对接canvas动画

一、下载动画模板

下载动画模板后,会得到一个html文件和附带的脚本文件和样式文件,直接运行,html页面就会出现动画了
在这里插入图片描述

二、webgl对接

1.在项目里创建div,并创建画布对象

<div id="toolbar" class="param-container tool-bar">
  //创建画布对象
  <canvas id="mycanvas"></canvas>
</div>

2.将执行动画的其它代码拷贝到标签中,运行页面,效果如下:
在这里插入图片描述
3.通过entity创建实体面对象,先不给材质,因为后续会将canvas动画作为材质

var colorball = viewer.entities.add({
  polygon: {
    hierarchy: cesium.cartesian3.fromdegreesarrayheights([
      116.38589023755107, 39.99395534891072, 20,
      116.3870772324375, 39.99398849759101, 20,
      116.38703644447938, 39.99482961445326, 20,
      116.38589703087074, 39.994816365544665, 20
    ]),//拾取的面节点位置
    perpositionheight: true, //使用每个位置的高度
  },
});

4.创建函数,将canvas运行动画代码全部拷贝到函数体中进行封装

//灯的参数
var linghter = {
  x: 400,
  y: 270,
  r: 50,
  vx: 5,
  vy: 4
};
//封装运行函数
function writeballoncanvas() {
  var cns = document.createelement('canvas'); //创建canvas标签
  var cxt = cns.getcontext("2d");
  cns.width = 500;
  cns.height = 500;
  //定义一个灯
  // 清除画布
  cxt.clearrect(0, 0, 500, 500);
  //当前位置填充黑色的矩形框
  cxt.fillstyle = "rgba(255, 255, 0, 0)";
  cxt.fillrect(0, 0, 500, 500);
  //存储状态
  cxt.save();
  //绘制一个圆
  cxt.beginpath();
  cxt.arc(linghter.x, linghter.y, linghter.r, 0, math.pi * 2);
  cxt.fillstyle = 'yellow';
  cxt.fill();
  cxt.closepath();
  //剪切 --画布中在该区域的数据才会被显示
  cxt.clip();
  //恢复
  cxt.restore();
  linghter.x += linghter.vx;
  linghter.y += linghter.vy;
  //判断临界点
  if (linghter.x < linghter.r || linghter.x > (500 - linghter.r)) {
    linghter.vx *= -1;
  }
  //y方向
  if (linghter.y < linghter.r || linghter.y > (500 - linghter.r)) {
    //反向
    linghter.vy *= -1;
  }
  return cns
}

5.为实体面创建材质,并通过callback监听函数变化,上一步每次函数变化,都会返回一个新的canvas对象,对应新的图片,将新的图片赋予实体面

material: new cesium.imagematerialproperty({
  image: new cesium.callbackproperty(writeballoncanvas, false),//回调canvas
  transparent: true
}),

在这里插入图片描述
了解原理后,就可以做更炫酷的效果了

在这里插入图片描述

完整demo地址:

链接:https://pan.baidu.com/s/1uidfvvxx_9kl3lylr4qfdw
提取码:6655

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

【SwiftUI模块】0016、SwiftUI搭建一个水波纹动画效果

08-06

AnimationClip介绍

08-06

Unity 3D 导入三维模型||Unity 3D 动画系统简介(Mecanim)

08-06

unity中的DG.Tweening详解

08-06

制作立体图像实用软件:3DMasterKit 10.7 Crack

08-06

播进「小亿俱乐部」,家居品牌如何借 AI 做好直播内容运营

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论