首页 > 其他分享 >Cesium:entity闪烁(点、面以及billboard)

Cesium:entity闪烁(点、面以及billboard)

时间:2023-03-27 15:22:35浏览次数:45  
标签:function false var billboard Cesium new entity flog

entity的闪烁主要是通过回调函数CallbackProperty,控制样式改变或是否显示

1. 点的闪烁

function f2(){
	var x=1;
	var flog=true;
	viewer.entities.add({
		name:"圆点point闪烁",
		position:Cesium.Cartesian3.fromDegrees(116.20+0.03,39.53+0.03,0),
		point : {
			show : true, // default
			color :new Cesium.CallbackProperty(function () {
				if(flog){
					x=x-0.05;
					if(x<=0){
						flog=false;
					}
					}else{
						x=x+0.05;
						if(x>=1){
						flog=true;
						}
					}
					return Cesium.Color.RED.withAlpha(x);
				},false),
			pixelSize : 10, // default: 1
			outlineWidth :0
		}
	});
}

  2. 面的闪烁

function f1() {
    var x = 1;
    var flog = true;
    viewer.entities.add({
        name: "圆形区域闪烁",
        position: Cesium.Cartesian3.fromDegrees(116.20, 39.53, 0),
        ellipse: {
            semiMinorAxis: 2000.0,
            semiMajorAxis: 2000.0,
            height: 0,
            material: new Cesium.ColorMaterialProperty(new Cesium.CallbackProperty(function () {
                if (flog) {
                    x = x - 0.05;
                    if (x <= 0) {
                        flog = false;
                    }
                } else {
                    x = x + 0.05;
                    if (x >= 1) {
                        flog = true;
                    }
                }
                console.log(x)
                return Cesium.Color.RED.withAlpha(x);
            }, false))
        }
    });
}

  3. billboard图片的闪烁

function f1() {
var x = 1;
    var flog = true;
    viewer.entities.add({
        name: 'singleWarning',
        position: Cesium.Cartesian3.fromDegrees(116.20, 39.53),
        billboard: {
            image: '预警定位.png',
            name: 'singleWarning',
            show: new Cesium.CallbackProperty(function () {
                if (flog) {
                    x = x - 0.05;
                    if (x <= 0) {
                        flog = false;
                    }
                } else {
                    x = x + 0.05;
                    if (x >= 1) {
                        flog = true;
                    }
                }
                return x >= 0.5;
            },false),
            width: 100,
            height: 100,
            distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 6.8e10)
        },
    })
}

 

  

实现原理

    1. 动态圆
      semiMinorAxissemiMajorAxis指定一个CallbackProperty对象,并返回半径大小。由于要做的是要给圆,长短轴相同,可以抽出一个共同的方法getRadius()。 在CallbackProperty的回调函数中,不断的调整半径的大小,这个就和我们平时常用的requestAnimationFrame一样了。

    2. 颜色渐变
      使用ColorMaterialProperty,根据半径的大小,调整透明度。半径越大,透明度越高。

      var r = 0,
            up = true
      
          const pos = Cesium.Cartesian3.fromDegrees([120.191, 30.255, 100])
      
          const maxRadius = 50
          const minRadius = 10
          const step = 1
      
          function getRadius() {
            return new Cesium.CallbackProperty(function (time, result) {
              if (up) {
                r += step
              } else {
                r -= step
              }
      
              if (r >= maxRadius) {
                up = false
              }
      
              if (r <= minRadius) {
                up = true
              }
              return r
            }, false)
          }
      
          viewer.entities.add({
            position: pos,
            ellipse: {
              semiMinorAxis: getRadius(),
              semiMajorAxis: getRadius(),
              material: new Cesium.ColorMaterialProperty(
                new Cesium.CallbackProperty(function (time, result) {
                  return new Cesium.Color(1, 0, 0, 1 - r / maxRadius)
                })
              ),
              height: this.target[2],
              outline: false
            }
          })
      

       

       var viewer = new Cesium.Viewer('cesiumContainer', 
              {
                  imageryProvider: new Cesium.SingleTileImageryProvider({
                     url: '../img/worldimage.jpg'
                  }),
                  homeButton: false,
                  baseLayerPicker: false,
                  navigationHelpButton: false,
                  animation: false,
                  timeline: false,
                  fullscreenButton: false,
                  vrButton: false
              });
              function computeCircle(radius) {
                  var positions = [];
                  for (var i = 0; i < 360; i++) {
                      var radians = Cesium.Math.toRadians(i);
                      positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians)));
                  }
                  return positions;
              }
              var startTime = Cesium.JulianDate.now();
              var redTube = viewer.entities.add({
                  name : 'Red tube with rounded corners',
                  polylineVolume : {
                      positions : Cesium.Cartesian3.fromDegreesArray([-85.0, 32.0,
                                                                      -85.0, 36.0,
                                                                      -89.0, 36.0]),
                      shape : computeCircle(6000.0),
                       material : new Cesium.ColorMaterialProperty(new Cesium.CallbackProperty(function() { 
                          return Cesium.Color.fromRandom({
                              minimumRed : 0.75,
                              minimumGreen : 0.75,
                              minimumBlue : 0.75,
                              alpha : 1.0
                          });
                          
                      }, false))
                  }
              });
      
              viewer.zoomTo(viewer.entities);
      

        

       

标签:function,false,var,billboard,Cesium,new,entity,flog
From: https://www.cnblogs.com/zany-hui/p/17261637.html

相关文章

  • Cesium 与 Babylon.js 可视化 glsl 特效篇(十八)
    我决定不从Babylonjs基础来讲了直接整合cesium与babylonjs可视化来讲我整合一个类库后续不断更新中npmi@haibalai/cesium-babylonjs初始化cesium-babylonjs类库,map......
  • cesium导航
    推荐:将 ​​NSDT场景编辑器​​ 加入你的3D开发工具链今天看到GoogleEarth上的导航栏,想起百度地图,高德地图,leaflet(插件)等等好像都有提供导航条,但是cesium官方包里面......
  • 仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值
    #情景今天在做达梦数据库(DM7)的适配工作,发现了如上错误,#原因主要原因就是达梦数据库和oracle比较类似,你目前设置了主键自增,然后呢,现在还想手动设置主键,这咋能行呢#解......
  • Persistent entity ‘Users‘ should have primary key
    #情景:在使用springjpa,想要根据实体类自动生成代码的时候,实体类名称报错#检查鼠标移入实体类名称,实体类的类名下面是不是有一条下划线显示内容如下所示:Persistententity......
  • Can not set java.lang.String field com.jsedc.log.pojo.entity.voSyslogV0.happenT
    未加泛型约束的result,其List中的实体对象会被序列化为LinkedHashMap,实际结构为Result<List<LinkedHashMap<String,String>>>导出excel时对象赋值失败......
  • Cesium官方教程——Fabric
    1、简介Fabric是Cesium中定义的描述材质Material的JSON结构体。Material代表了一个物体的外观。材质Material可以是比较简单的,比如直接将一张图片赋予表面,或者使用条......
  • C# 上传接口返回错误: (413) Request Entity Too Large问题解决
    问题报错:Failedtoloadresource:theserverrespondedwithastatusof413(RequestEntityTooLarge)找了很多方法,说什么反向代理配置啥的其实很多项目并没有开反......
  • Cesium贴地线和不贴底线
    贴地线:entity和primitive。entity只需要clampToGround为true。Primitive方式贴地,需要使用GroundPolylinePrimitive和GroundPolylineGeometry来创建Primitive与Geometry对......
  • Cesium 与 Babylon.js 可视化 glsl 特效篇(四十三)
    我决定不从Babylonjs基础来讲了直接整合cesium与babylonjs可视化来讲我整合一个类库后续不断更新中npmi@haibalai/cesium-babylonjs 初始化cesium-babylonjs......
  • Cesium近地天空盒,解决图片旋转问题
    前言当我们使用官网的例子设置天空盒后,会发现天空云彩是斜的,比如下边这张图:通过查阅网上资料,需要修改cesium的源码,以下是修改后skybox的源码,在自己的项目中引入即可:实......