实现功能:特定的距离,如100-10000米范围显示所创建要素,其他距离隐藏。
#基础用法,创建一个BoxGeometry,赋予指定的坐标位置上空,赋予指定的显示范围。
var viewer = new Cesium.Viewer("cesiumContainer",{ baseLayerPicker:false, imageryProvider:goo,//goo为地图底层url terrainProvider:new Cesium.createWorldTerrain() });
//#创建geometryInstance实例 var instance = new Cesium.GeometryInstance({ geometry:new Cesium.BoxGeometry({
//根据需要选择BoxGeometry类的创建方法,cesium提供了非常多的实用方法供选择 minimum:new Cesium.Cartesian3(0,0,0), maximum:new Cesium.Cartesian3(100000,100000,100000),
//顶点构成方式,几何还没有回去看书,现在只能照搬,暂时是这么理解:
//ALL方式: 用全部属性构建with well-known attributes: position, normal, st, tangent, and bitangent.
//DEFAULT:用这些属性构建position, normal, and st attributes
//POSITION_ONLY:只用点属性
//这里用的POSITION_AND_NORMAL,因为api这么说兼容PerInstanceColorAppearance
vertexFormat:Cesium.VertexFormat.POSITION_AND_NORMAL }),
//#模型转换矩阵,直白说就是将模型转至真实空间的转换,这是见到的最容易使用的Matix4,将模型转到相应的经纬度和高
//属性{1、颜色要用ColorGeometryInstanceAttribute几何图形实例,这里是几何图形了
// 2、distanceDisplayCondition:距离显示条件,英文命名很容易理解
modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame( Cesium.Cartesian3.fromDegrees(111, 33.03883)), new Cesium.Cartesian3(0.0, 0.0, 0), new Cesium.Matrix4()), id:"modelbox",
} attributes:{
color:Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED), distanceDisplayCondition : new Cesium.DistanceDisplayConditionGeometryInstanceAttribute(100, 100000.0) } });
//#添加到viewer.scene.primitives中,进入viewer.scene就能显示 var box_primitive = viewer.scene.primitives.add(new Cesium.Primitive({ geometryInstances:instance, appearance:new Cesium.PerInstanceColorAppearance({ //外形使用perInstanceColorAppearance方式,应该要主要与vertexFormat兼容,今后使用时要注意 translucent:false, closed:true })})); alert(box_primitive);//#提醒object说明创建成功,如果看不见,那么这个问题不会很大,在材料,位置,颜色等上找
#更多的个性化设置(真的是更多的个性化设置)
api的地址:http://127.0.0.1:8081/Build/Documentation/Material.html,后面就不一一贴了。
#继续上面的case,设置materail为棋盘,棋盘的格式横竖10与5,颜色为红色和白色。
&使用更个性化的vertexFormat,这里更改vertexFormat : Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
vertexFormat : Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT 名字中是有ellipsioid,但是api写的很清楚“which supports all materials”,这种模式不考虑材质阴影,所以会加载生成加载快一些;
同样,也可以使用MaterialAppearance,考虑阴影,会有些重影。
&个性化材质,这里要去Cesium.Material的api查设置,刚开始去了CheckerboardMaterialProperty的api,
后者api是evenColor、oddColor,前者是lightColor、daraColor!
同样的,设置其他材质也要一起materail里面使用响应的参数
appearance:new Cesium.EllipsoidSurfaceAppearance({
material:Cesium.Material.fromType("Checkerboard",{
lightColor:new Cesium.Color(1, 0, 0, 0.5),
darkColor:new Cesium.Color(0, 1, 0, 0.5),
repeat:new Cesium.Cartesian2(5.0, 10.0)
})})
MaterialAppearance下生成的模式