PolylineVolumeGraphics

本节课程我们学习最后一个实体对象PolylineVolumeGraphics,线体积对象,它可以通过线数据挤出不同的形状,而成为体数据,比如我们希望在线绘制一根圆形的管道、绘制一堵围墙,那这样对象就能派上大用场了。
首先我们来看一个简单的效果图吧


简单的PolylineVolumeGraphics

实现代码如下

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;
                }
                viewer.entities.add({
                    id: "test",
                    polylineVolume: {
                        positions: Cesium.Cartesian3.fromDegreesArray([117.0, 32.0, 120.0, 36.0, 130.0, 36.0]),
                        material: Cesium.Color.YELLOW,
                        shape : computeCircle(6000.0),

                    }

                });
                viewer.flyTo(viewer.entities.getById("test"));

一、主要参数介绍

接下来我们来了解下PolylineVolumeGraphics的主要参数
1、positions:指定线对象的位置,一个点串对象,里面存储的是Cartesian3对象。
2、shape:要挤出的形状的数组,相当于是对象的切面形状
3、cornerType:角落样式的属性,默认是CornerType.ROUNDED,目前支持以下这种几种风格


cornerType

4、show:定义对象是否显示。
5、fill:是否用材质进行填充。
6、material:定义材质外观对象
7、material:对象的填充材质,就是对象的外观,可以是颜色,也可以是贴图等等
8、outline:一个布尔属性,指定矩形是否显示轮廓。
9、outlineColor:轮廓的颜色。
10、outlineWidth:轮廓的宽度。
11、shadows:指定矩形是否从每个光源投射或接收阴影。
12、distanceDisplayCondition:即是控制模型在什么相机位置下显示出来。例如设置distanceDisplayCondition:new Cesium.DistanceDisplayCondition(1500,5000),即是在相机距离1500-5000的位置范围内显示,其他范围模型都不显示。

二、综合使用

我们这里绘制挤出了三类图形,圆形管道,三角形管道、方形立体盒子,并且为数据都设置了贴图,接下来看下效果吧


综合使用

实现代码如下:

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;
                }
                function computeTriangle(radius) {
                    var jiaodu=60;
                    var hudu= Cesium.Math.toRadians(jiaodu);
                    var positions = [];
                    positions.push(new Cesium.Cartesian2(-radius*Math.cos(hudu),-radius*Math.sin(hudu)/2));
                    positions.push(new Cesium.Cartesian2(radius*Math.cos(hudu),-radius*Math.sin(hudu)/2));
                    positions.push(new Cesium.Cartesian2(0,radius*Math.sin(hudu)/2));
                    return positions;
                }
                function computeqiang(radius) {
                    var positions = [];
                    positions.push(new Cesium.Cartesian2(-radius/2,0));
                    positions.push(new Cesium.Cartesian2(radius/2,0));
                    positions.push(new Cesium.Cartesian2(radius/2,radius*10));
                    positions.push(new Cesium.Cartesian2(-radius/2,radius*10));
                    return positions;
                }
                viewer.entities.add({
                    id: "test",
                    polylineVolume: {
                        positions: Cesium.Cartesian3.fromDegreesArray([117.0, 32.0, 120.0, 36.0, 130.0, 36.0]),
                        material: new Cesium.ImageMaterialProperty({
                            image: "./img/arrow.png",
                            repeat: new Cesium.Cartesian2(200.0, 1.0),
                             }),
                        shape : computeCircle(6000.0),

                    }
                });
                
                viewer.entities.add({
                    id: "test2",
                    polylineVolume: {
                        positions: Cesium.Cartesian3.fromDegreesArray([117.0, 33.0, 120.0, 37.0, 130.0, 37.0]),
                        material: new Cesium.ImageMaterialProperty({
                            image: "./img/arrow.png",
                            repeat: new Cesium.Cartesian2(200.0, 1.0),
                             }),
                        shape : computeTriangle(6000.0),

                    }
                });
                viewer.entities.add({
                    id: "test3",
                    polylineVolume: {
                        positions: Cesium.Cartesian3.fromDegreesArray([118.0, 33.0, 118.2, 33]),
                        material: new Cesium.ImageMaterialProperty({
                            image: "./img/qiang.jpg",
                            repeat: new Cesium.Cartesian2(100.0, 10.0),
                             }),
                        shape : computeqiang(6000.0),

                    }
                });
                
                viewer.flyTo(viewer.entities.getById("test"));

好了,到这里我们所有的Entity对象都讲解完了,后续将会给大家讲解其他的内容,欢迎关注

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 服务器数据库等杂项 1.Unity连接数据库 需要得到Mono.Data.Sqlite.dll文件与 System...
    豆铮阅读 7,938评论 1 4
  • 本节继续学习RectangleGraphics对象,这个是一个矩形类型,对象属性相对较少,可以直接添加矩形对象,接...
    为梦齐舞阅读 4,413评论 1 1
  • 1.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作。 渲染管道中的很多步骤,都要将几何物体从...
    爱机车的异乡人阅读 3,793评论 0 1
  • 一:什么是协同程序?答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个...
    CrixalisAs阅读 6,353评论 1 7
  • 一:什么是协同程序? 答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一...
    好怕怕阅读 9,350评论 2 23

友情链接更多精彩内容