cesium 引擎二次开发实现椭圆椎体

110 阅读1分钟

项目需求中需要实现椭圆椎体的几何体,但经过大量资料和api查阅,并未找到对应的解决办法,故在cesimu引擎中小试牛刀,自己实现了一个geo几何体来解决此问题

效果展示

实现代码

因为多种原因,暂不公布,但核心方式还是通过拆分椭圆为三角形的方式实现封装了Cesium.EllipseCylinderGeometry 类进行调用,下图为核心思路

调用实现

 var geometryInstance=new Cesium.GeometryInstance({
	 //Cesium.EllipseCylinderGeometry 此类官方项目未提供,需要自行封装
        geometry: new Cesium.EllipseCylinderGeometry({
          center: Cesium.Cartesian3.fromDegrees(120.0, 30.0, 200),
          length: 400000,
          topSemiMajorAxis: 2000.0,
          topSemiMinorAxis: 800.0,
          bottomSemiMajorAxis: 200000.0,
          bottomSemiMinorAxis: 80000.0,
          vertexFormat: Cesium.VertexFormat.POSITION_AND_ST,
        }),
        attributes: {
          color: Cesium.ColorGeometryInstanceAttribute.fromColor(
            Cesium.Color.BLUE.withAlpha(0.5)
          ),
        },
        modelMatrix :redCone.computeModelMatrix(viewer.clock.currentTime)
      })
     var ellipseCylinderGeometry= viewer.scene.primitives.add(
        new Cesium.Primitive({
          geometryInstances: geometryInstance,
          appearance: new Cesium.PerInstanceColorAppearance(),
          asynchronous: true,
        })
      );