使用产品:iserver 9D 操作系统:win10 x64 浏览器:谷歌71
S3M数据说明:隧道数据;
问题描述:
开发WebGL 三维地图(非IDeskTop),隧道中可以进去,有一部分的物体可以通过鼠标左键拖拽,穿越山体或者墙壁,代码见以下代码。
我希望的功能:可以进入隧道,但不能碰到任何物体并穿越过去,等同用IDeskTop打开的效果;
核心代码如下
//创建一个查看器(Viewer widget)
var _viewer = new Cesium.Viewer("cesiumContainer", {});
this.viewer = _viewer;
let scene = _viewer.scene;
scene.screenSpaceCameraController.enableCollisionDetection = true;
scene.screenSpaceCameraController.enableIndoorColliDetection = true;
//移除logo
var credit = _viewer.scene.frameState.creditDisplay;
credit.container.removeChild(credit._imageContainer);
var widget = this.viewer.cesiumWidget;
var scene = this.viewer.scene;
var canvas = this.viewer.canvas;
var clock = this.viewer.clock;
var camera = this.viewer.scene.camera;
var entities = this.viewer.entities;
//打开的必须是切片的图层
let mainLayerName = this.curTunnelData.jgLayer;
console.log(mainLayerName, "mainLayerName");
var mainS3MUrl =
urlIP +
"/iserver/services/3D-BSMap3D-SDM/rest/realspace/datas/" +
mainLayerName +
"/config";
console.log(mainS3MUrl, "mainS3MUrl");
var promise2 = scene.addS3MTilesLayerByScp(mainS3MUrl, {
name: mainLayerName,
cullEnabled: false
});
//then方法的第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数。
promise2.then(
function(layer) {
console.log(layer, "layer");
if (!scene.pickPositionSupported) {
// alert("不支持深度纹理,无法拾取位置!");
console.log("不支持深度纹理,无法拾取位置!");
}
},
function(e) {
//Promise对象状态发生变化 变为rejected
if (widget._showRenderLoopErrors) {
var title =
"加载SCP失败,请检查网络连接状态或者url地址是否正确?";
widget.showErrorPanel(title, undefined, e);
}
}
);