Cesium学习笔记13--绘制对象-Entity方式

标签:
cesiumentity |
分类: Cesium |
前面几篇博客我们学习了cesium构造场景的基本知识:影像加载、地形加载、模型加载、鼠标操作。我们可以构造一个基本的三维场景并且可以和场景进行交互操作。三维引擎想做的远不止这些,我们最迫切的需求就是在三维场景中绘制我们的空间对象(数据),本节我们就一起学习下cesium是如何绘制空间对象。
viewer.entities.add({
position :
Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),
point : {
pixelSize
: 10,
color :
Cesium.Color.YELLOW
}
});
viewer.entities.add({
name: 'Blue box',
position:
Cesium.Cartesian3.fromDegrees(homePOsition[0], homePOsition[1],
0),
box: {
dimensions: new Cesium.Cartesian3(400000.0, 300000.0,
500000.0),
material:
Cesium.Color.BLUE
}
});
viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(111.0,
40.0, 150000.0),
name: 'Green circle at height',
ellipse: {
semiMinorAxis: 300000.0,
semiMajorAxis: 300000.0,
height:
200000.0,
material:
Cesium.Color.GREEN
}
});
viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(103.0,
40.0),
name: 'Red ellipse on surface with
outline',
ellipse: {
semiMinorAxis: 250000.0,
semiMajorAxis: 400000.0,
material:
Cesium.Color.RED.withAlpha(0.5),
outline:
true,
outlineColor: Cesium.Color.RED
}
});
//Corridor
viewer.entities.add({
name: 'Red corridor on surface with rounded
corners and outline',
corridor: {
positions:
Cesium.Cartesian3.fromDegreesArray([
100.0,
40.0,
105.0,
40.0,
105.0,
35.0
]),
width:
200000.0,
material:
Cesium.Color.RED.withAlpha(0.5),
outline:
true,
outlineColor: Cesium.Color.RED
}
});
//Cylinder
viewer.entities.add({
name: 'Green cylinder with black outline',
position: Cesium.Cartesian3.fromDegrees(100.0,
40.0, 200000.0),
cylinder: {
length:
400000.0,
topRadius:
200000.0,
bottomRadius: 200000.0,
material:
Cesium.Color.GREEN.withAlpha(0.5),
outline:
true,
outlineColor: Cesium.Color.DARK_GREEN
}
});
//Cone
viewer.entities.add({
name: 'Red cone',
position: Cesium.Cartesian3.fromDegrees(105.0,
40.0, 200000.0),
cylinder: {
length:
400000.0,
topRadius:
0.0,
bottomRadius: 200000.0,
material:
Cesium.Color.RED
}
});
//Polygon
viewer.entities.add({
name: 'Red polygon on surface',
polygon: {
hierarchy:
Cesium.Cartesian3.fromDegreesArray([115.0, 37.0,
115.0,
32.0,
107.0,
33.0,
102.0,
31.0,
102.0,
35.0]),
material:
Cesium.Color.RED
}
});
//polyline
viewer.entities.add({
name: 'Red line on the surface',
polyline: {
positions:
Cesium.Cartesian3.fromDegreesArray([75, 35,
125,
35]),
width:
5,
material:
Cesium.Color.RED
}
});
//polylineVolume
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({
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(60000.0),
material:
Cesium.Color.RED
}
});
//rectangle
viewer.entities.add({
name: 'Red translucent rectangle with
outline',
rectangle: {
coordinates: Cesium.Rectangle.fromDegrees(80.0, 20.0, 110.0,
25.0),
material:
Cesium.Color.RED.withAlpha(0.5),
outline:
true,
outlineColor: Cesium.Color.RED
}
});
//Sphere
viewer.entities.add({
name: 'Red sphere with black outline',
position: Cesium.Cartesian3.fromDegrees(107.0,
40.0, 300000.0),
ellipsoid: {
radii: new
Cesium.Cartesian3(300000.0, 300000.0, 300000.0),
material:
Cesium.Color.RED.withAlpha(0.5),
outline:
true,
outlineColor: Cesium.Color.BLACK
}
});
//ellipsoid
viewer.entities.add({
name: 'Blue ellipsoid',
position: Cesium.Cartesian3.fromDegrees(114.0,
40.0, 300000.0),
ellipsoid: {
radii: new
Cesium.Cartesian3(200000.0, 200000.0, 300000.0),
material:
Cesium.Color.BLUE
}
});
//wall
viewer.entities.add({
name: 'Green wall from surface with
outline',
wall: {
positions:
Cesium.Cartesian3.fromDegreesArrayHeights([107.0, 43.0,
100000.0,
97.0,
43.0, 100000.0,
97.0,
40.0, 100000.0,
107.0,
40.0, 100000.0,
107.0,
43.0, 100000.0]),
material:
Cesium.Color.GREEN
}
});
针对空间对象可视化cesium提供了两类接口:entity和primitive。帮助文档解释:
entity:
primitive:
http://s11/mw690/006pZnPwzy7lfJFI2Lg4a&690
哪里都离不开英语,本人是一个六级都没过的,也只能看个大概:entity是一个相对高级的接口;primitive则更为复杂,包括geometry和appearance两部分。本节我们先学习entity。
哪里都离不开英语,本人是一个六级都没过的,也只能看个大概:entity是一个相对高级的接口;primitive则更为复杂,包括geometry和appearance两部分。本节我们先学习entity。
在示例程序中查看最简单的绘制point示例:
可以看到entity通过viewer中的entities加载到场景中,entities是entity的集合对象。这是一个最简单的示例,在场景中加一个点,可以看到需要以下属性:
position :点在场景中位置
point:指明该entity对象为point类型,其中大小为10、颜色为黄色。
在帮助文档中查看entity:
http://s15/mw690/006pZnPwzy7lfLcAKbc6e&690
可以看到entity的属性:id、name、availability、show、description、position、orientation、viewFrom、parent等其他表示entity类型。
可以看到entity的属性:id、name、availability、show、description、position、orientation、viewFrom、parent等其他表示entity类型。
//box
//Circle
//Ellipse
以上代码最终绘制大杂烩:
工程源码:github源码
我的学习公众号也开通,感兴趣的小伙伴们可以加关注:giserYZ2SS,代码交流小伙伴在公众号发消息,我会一一回复的。
http://s14/small/006pZnPwzy7q1bYCcFvad&690