一些基本概念
- entity和primitive比较
(1)面向图形开发人员的底层API,通常称为“Primitive API”。该API暴露最小限度的抽象,使用图形学术语,具有很大的灵活性,需要具有图形学编程的知识。
(2)高级别的数据驱动的API,称为“Entity API”。该API使用一致性设计的、高级别的对象来管理一组相关性的可视化对象,本质是用Primitive封装的api。 - primitive基础概念
Primitive由两个部分组成:
(1)几何形状(Geometry):定义了Primitive的结构,例如三角形、线条、点等。
(2)外观(Appearance ):定义Primitive的着色(Sharding),包括GLSL(OpenGL着色语言,OpenGL Shading Language)顶点着色器和片段着色器( vertex and fragment shaders),以及渲染状态(render state)。
primitive用法
//正常线
var scene = viewer.scene;
var primitive = new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.PolylineGeometry({
positions: Cesium.Cartesian3.fromDegreesArray([120.0,40.0,100.0,30.0]),
width:3.0,
vertexFormat:Cesium.PolylineColorAppearance.VERTEX_FORMAT
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED)
}
}),
appearance: new Cesium.PolylineColorAppearance({
translucent: false, //是否透明
})
});
scene.primitives.add(primitive);
//虚线
var primitive1 = new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.PolylineGeometry({
positions: Cesium.Cartesian3.fromDegreesArray([110.0,50.0,120.0,60.0]),
width:3.0,
vertexFormat:Cesium.PolylineColorAppearance.VERTEX_FORMAT
})
}),
appearance: new Cesium.PolylineMaterialAppearance({
material: Cesium.Material.fromType(Cesium.Material.PolylineDashType, {
color: Cesium.Color.CYAN, //线条颜色
gapColor:Cesium.Color.TRANSPARENT, //间隔颜色
dashLength:20 //短划线长度
})
})
});
scene.primitives.add(primitive1);
Material.fromType 参考Cesium Material 说明文档
效果展示
总结
使用Primitive画几何图形具有以下优势:
(1)性能:绘制大量Primitive时,可以将其合并为单个Geometry以减轻CPU负担、更好的使用GPU。合并Primitive由web worker线程执行,UI保持响应性。
(2)灵活性:Geometry与Appearance 解耦,两者可以分别进行修改。
(3)低级别访问:易于编写GLSL 顶点、片段着色器、使用自定义的渲染状态 。
同时,具有以下劣势:
(1)需要编写的代码比用Entity要冗长。
(2)需要对图形编程有更多的理解,特别是OpenGL的知识。