1.定义
Primitive由两个重要部分组成:几何图形实例、外观,一个Primitive只能有一个外观,而可以有多个实例。几何图形定义了结构,外观定义了每个像素被如何着色,外观可能使用材质(Material)。
// 使用Primitive API 实现一个斑点的矩形;
var viewer = new Cesium.Viewer('cesiumContainer');
var scene = viewer.scene;
scene.primitives.add(new Cesium.RectanglePrimitive({
//绘制矩形
rectangle : Cesium.Rectangle.fromDegrees(-100.0, 20.0, -90.0, 30.0),
material : Cesium.Material.fromType('Dot') //设置材质
}))
// 使用Geometry和Appearance改写
var viewer = new Cesium.Viewer('cesiumContainer');
var scene = viewer.scene;
//GeometryInstance是Geometry的一个容器
var instance = new Cesium.GeometryInstance({
geometry : new Cesium.RectangleGeometry({
rectangle : Cesium.Rectangle.fromDegrees(-100.0, 20.0, -90.0, 30.0),
vertexFormat : Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
})
});
//使用抽象的Primitive而不是RectanglePrimitive
scene.primitives.add(new Cesium.Primitive({
geometryInstances : instance,
appearance : new Cesium.EllipsoidSurfaceAppearance({
material : Cesium.Material.fromType('Dot')
})
}));
- 代码量增多;
- 实现几何体与外观解耦,可以分别修改;
- 可以将多个geometry合并为一个Primitive,提高性能。
2.分类
类型 | 说明 |
---|---|
MaterialAppearance | 支持各种Geometry类型的外观,支持使用材质来定义着色 |
EllipsoidSurfaceAppearance | MaterialAppearance 的简化版本,假定几何体都和地球椭球体平行,就像多边形一样。使用这个可以在计算大量顶点属性的时候节省内存 |
PolylineMaterialAppearance | 支持在折线上设置材质 |
PolylineColorAppearance | 支持折线在每个顶点或者每一段设置不同颜色 |
PerInstanceColorAppearance | 每个instance使用不同的颜色去着色 |
3.属性有无对比
4.注意点:
- flat:平面着色,不考虑光线的作用,一个顶点用一个颜色,参考链接。
- faceForward:我的理解:观察者面对物体时,调整光源方向,使物体更清晰好看,参考链接。
- depthMask:用来改变深度缓冲的可写属性,false为只读,true为可写?没找到专门的文档。
- depthTest:同一个区域存在不同的物体叠加,层次不同,哪个在上哪个在下?开启隐藏面消除功能。参考链接;
- BlendingState:颜色、透明度混合方式的集合。参考链接;
- CullFace:剔除掉组成外观的三角形的正面|背面|正面和背面,以节省性能。参考链接;
-
vertexFormat:用Boolean表示的各种顶点属性的组合;坐标、纹理、颜色
法线、切线、副切线;
类型 | 说明 |
---|---|
position | 3维坐标 |
normal | 法线 |
st | 2维纹理 |
bitangent | 副切线 |
tangent | 切线 |
color | 颜色 |
打包:对象=>数组;
解包: 数组=>对象;
- EllipsoidSurfaceAppearance | MaterialAppearance | PolylineMaterialAppearance 可设置Material属性,
PerInstanceColorAppearance | PolylineColorAppearance 不可设置Material属性,只可更改颜色; - 多个几何体合并为一个Primitive时,通过设置appearance 为PerInstanceColorAppearance,可以修改任意几何体的颜色,颜色类型得是ColorGeometryInstanceAttribute;
- 两个形状必须具有匹配的vertexFormat,才能被合并到一个Primitive中;
- 不是所有的外观与属性都能匹配,图形要有外观需要的顶点格式;