IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> SuperMap iClient3D for WebGL Canvas(一)数字流特效 -> 正文阅读

[游戏开发]SuperMap iClient3D for WebGL Canvas(一)数字流特效

作者: kele

最近了解了一些关于canvas的知识,我们都知道canvas能做出很复杂且炫酷的动画效果,那么如果将canvas动画应用到gis应用,将会擦除什么样的火花呢?我们一起来看下吧

在这里插入图片描述

一、实现思路

本篇文章将介绍图中数字流特效的实现思路,彩球动画效果可参考另一篇文章(链接: 跳转地址
总所周知,我们可以在canvas上绘制各种东西,但是要让canvas展示在三维场景中,必须要依赖一个载体,我们可以在场景中用面对象作为载体,将动画效果当作纹理展示:

1.通过entity绘制一个面对象
2.将canvas以图片的形式作为材质赋予面对象
3.循环改变标签的像素值位置,并使用CallbackProperty函数监听变化实时渲染

二、关键代码

1.绘制面实体

先不给材质,因为后续会将canvas动画作为材质

var textGreen = viewer.entities.add({
    polygon: {
        hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights([
            116.383434881692,39.992315273588524, 40,
            116.3833273079725,39.99232011844418, 40,
            116.3833273079725,39.99232011844418, 1000,
            116.383434881692,39.992315273588524, 1000,
        ]),
        perPositionHeight: true, //使用每个位置的高度
    },
});

2.编写canvas内容,并指定规则

将每个文本旋转,其位置按照像素值递减,实现文字自下而上的流动,每次变化都会返回新的canvas对象

function writeGreenTextOnCanvas() {
            var cns = document.createElement('canvas'); //创建canvas标签
            var ctx = cns.getContext("2d");
            cns.width = 30;
            cns.height = 1600;
            //改变每个文本的位置
            if (perY > -700) {
                y = perY;
                for (let i = 0; i < text.length; i++) {
                    const str = text.slice(i, i + 1).toString();
                    if (str.match(/[A-Za-z0-9]/) && (y > 0)) { // 非汉字 旋转
                        ctx.font = "50px 微软雅黑";
                        ctx.fillStyle = "rgb(0 255 127)";
                        ctx.save();
                        ctx.translate(x, y);
                        ctx.rotate(Math.PI / 180);
                        ctx.textBaseline = 'bottom';
                        ctx.fillText(str, 0, 0);
                        ctx.restore();
                        y += ctx.measureText(str).width + letterSpacing; // 计算文字宽度
                    } else if (str.match(/[\u4E00-\u9FA5]/) && (y < 576)) {
                    } else {
                        ctx.font = "50px 微软雅黑";
                        ctx.fillStyle = "rgb(0 255 127)";
                        ctx.save();
                        ctx.translate(x, y+1500);
                        ctx.rotate(Math.PI / 180);
                        ctx.textBaseline = 'bottom';
                        ctx.fillText(str, 0, 0);
                        ctx.restore();
                        y += ctx.measureText(str).width + letterSpacing; // 计算文字宽度
                    }
                }
                perY-= 2;
            } else {
                perY = 100
            }
            return cns
        }

3.将canvas作为材质赋予实体面

使用Callback函数监听canvas对象,接收变换后的对象,作为imang材质赋予实体面,并将材质背景设置为透明

material: new Cesium.ImageMaterialProperty({
    image: new Cesium.CallbackProperty(writeGreenTextOnCanvas, false),//回调canvas
    transparent: true
}),

4.添加尾迹线

以上步骤即可实现数字流的动态显示效果,在此基础上还可以增添尾迹线材质,使效果更炫

polyline: {
    positions: Cesium.Cartesian3.fromDegreesArrayHeights([
        116.38512143191338,39.995666690542585, 20,
        116.38512143191338,39.995666690542585, 1000
    ]),
    width: 3, // 线的宽度,像素为单位
    material: new Cesium.PolylineTrailMaterialProperty({ // 尾迹线材质
        color: Cesium.Color.fromCssColorString("rgb(255,255,255)"), //给一个颜色值
        trailLength: 0.3,
        period: 3
    })
}

完整demo地址:

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

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:25:15  更:2022-09-24 21:26:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/17 3:50:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码