cesium 文本标注被遮挡_使用cesium中的scene.open中遇到的几个问题

有些服务是发在场景(scene)下的,超图提供了一个很方便的方法:scene.open,这个方法会将场景中所有的图层(无论是OSGB还是影像和地形)加载进来。同时这个方法会自带一个自动地位功能,具体实现不深究。

这个方法虽然很方便,省去了循环遍历场景下图层的代码,但是也会因此导致出现一些问题。

1、删除图层的问题

使用scene.open的首要问题就是如何删除图层。因为这个方法会将场景下面的所有图层一次性的加载进来,不需要我们单独进行台南佳。那么这个方法的内部在加载图层之初必然会进行判定,根据图层的不同调用不同的方法进行图层的叠加。目前我用到的图层的不同类型有:

a、OSGBLayer

这个图层是用来加载三维模型,目前还未单独使用进行添加。不过推测单独添加的方法应该如下:

1 var promise = scene.addS3MTilesLayerByScp('http://localhost:8090/iserver/services/3D-zj/rest/realspace/datas/zj/config', {name : 'base'});2 promise.then(function(layer){3 layer.visible = false;4 });

这个方法依旧是由超图进行了封装。

删除的方法如下:

1 scene.layers.remove(layerName)

可见图层是加载了Layers中,所以才能使用layers.remove移除图层。

b、ImageFileLayer

影像文件图层,用来加载影像,单独加载方法如下:

1 let imageryLayer =viewer.imageryLayers.addImageryProvider(imageryProvider);2 imageryLayer.getViewableRectangle().then(function(rectangle) {3 if(rectangle ==undefined){4 return;5 }else{6 let cur_rectangle = viewer.camera.computeViewRectangle(); //获取当前视角边界

7 let inter_rectangle = Cesium.Rectangle.intersection(cur_rectangle,rectangle); //取得当前视角边界和影像图层边界的交集

8 //若边界的交集不存在,说明所加载的影像图层不再视界范围内,这时候需要使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Cesium获取模型实时坐标,可以使用以下步骤: 1. 加载模型。可以使用Cesium的Model类加载模型,代码示例如下: ``` var viewer = new Cesium.Viewer('cesiumContainer'); var model = viewer.scene.primitives.add(Cesium.Model.fromGltf({ url : 'path/to/model.gltf' })); ``` 2. 在顶点着色器解算模型坐标。要在顶点着色器获取模型坐标,需要先在JavaScript代码获取模型实例对象,并将其传递给顶点着色器使用。代码示例如下: ``` var modelMatrix = model.modelMatrix; var modelNormalMatrix = Cesium.Matrix3.transpose(Cesium.Matrix3.inverse(modelMatrix, new Cesium.Matrix3()), new Cesium.Matrix3()); model.vertexShaderSource = '\ attribute vec3 position;\ attribute vec3 normal;\ attribute vec2 st;\ varying vec3 v_position;\ varying vec3 v_normal;\ varying vec2 v_st;\ uniform mat4 u_modelMatrix;\ uniform mat3 u_modelNormalMatrix;\ void main() {\ v_position = vec3(u_modelMatrix * vec4(position, 1.0));\ v_normal = normalize(u_modelNormalMatrix * normal);\ v_st = st;\ gl_Position = czm_modelViewProjection * vec4(v_position, 1.0);\ }\ '; model.uniforms = { u_modelMatrix : modelMatrix, u_modelNormalMatrix : modelNormalMatrix }; ``` 在上述代码使用Cesium的Matrix3和Matrix4类对模型矩阵进行了处理,然后将处理后的矩阵传递给了顶点着色器的uniform变量。在顶点着色器使用u_modelMatrix和u_modelNormalMatrix对顶点进行了变换,从而获取了模型坐标。 注意,上述代码使用Cesium的内置变量czm_modelViewProjection,它是Cesium的一个变换矩阵,用于将模型坐标转换为屏幕坐标。使用该变量可以确保在不同的场景都能正确地显示模型。 希望这些代码示例能够帮助你在Cesium获取模型实时坐标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值