SuperMap iClient3D for WebGL加载GIF动图


前言

SuperMap3D的billboard可以支持加载jpg、png等图片,但是在实际开发中可以会有需要加载gif动图的需求,遇到这种情况又该咋办呢?


一、思路

我们都知道GIF动图实际上是由很多张图片一帧一帧拼凑起来的,那么是否可以把GIF拆成多张图片,然后再用billboard添加再根据图片顺序更新呢?经过在网上的查找,发现libgif.js插件具有将GIF拆分的功能。

二、使用步骤

1.引入libgif.js

<script type="text/javascript" src="./js/libgif.js"></script>

2.创建gif实例

		//创建dom
        let gif = document.createElement('gif');
        gif.src = "images/R-C.gif";
        // 新建gif实例
        let gifInstance = new SuperGif({ gif: gif } );

3.解析gif动图并存入数组使用entity加载

			for (let i=1; i <= gifInstance.get_length(); i++) {
                // 遍历gif实例的每一帧
                gifInstance.move_to(i);

                let imgImage = new Image();
                //canvas生成base64图片数据
                imgImage.src = gifInstance.get_canvas().toDataURL('image/png',0.8);
                imgs.push(imgImage.src)

            }

            console.log(imgs)
			//entity绘制
            let gifEntity = viewer.entities.add({
                position: SuperMap3D.Cartesian3.fromDegrees(116,30),
                billboard: {
                    image: imgs[0],
                    scale: 0.5
                }
            });

4.播放gif动图

            viewer.clock.onTick.addEventListener(function(clock) {
                let seconds = clock.currentTime.secondsOfDay;
                let aa = Math.floor(seconds * 10.0) % imgs.length
                // gifEntity.billboard.imageIndex = aa;
                console.log(aa)
                gifEntity._billboard.image._value = imgs[aa]
                // console.log(aa)
            });

三、效果

1693884955312

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于你的问题,我可以给出以下建议: 1. 首先,确保你已经获得了 SuperMap iClient3D for WebGL 的许可证,并已经安装在你的系统上。 2. 然后,你需要创建一个基本的 HTML 页面,以便加载 SuperMap iClient3D for WebGL 的 JavaScript 文件。 3. 通过调用 SuperMap 的 JavaScript API,你可以使用 addLayer() 函数将场景加载到你的页面上。你可以使用以下代码示例来加载一个场景: var sceneLayer = new SuperMap.Layer.SceneLayer(); var layerUrl = "http://localhost:8090/iserver/services/3D-WebGL/rest/realspace"; sceneLayer.url = layerUrl; map.addLayer(sceneLayer); 4. 可以使用 setCameraPosition() 函数设置场景的相机位置和方向。你可以使用以下代码示例来设置相机位置和方向: var cameraPosition = new SuperMap.WebRealspace.CameraPosition(); cameraPosition.longitude = -95.34222; cameraPosition.latitude = 29.73972; cameraPosition.altitude = 2500; cameraPosition.heading = 25.0; cameraPosition.tilt = 25.0; cameraPosition.roll = 0.0; realspace.setCameraPosition(cameraPosition); 5. 最后,你可以使用 setCameraLookAt() 函数设置场景的观察位置。你可以使用以下代码示例来设置观察位置: var cameraLookAt = new SuperMap.WebRealspace.CameraLookAt(); cameraLookAt.longitude = -95.34222; cameraLookAt.latitude = 29.73972; cameraLookAt.altitude = 0; realspace.setCameraLookAt(cameraLookAt); 希望以上建议能够帮助你解决问题。如果你有任何其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值