首页 / 浏览问题 / 三维GIS / 问题详情
WebGL 加载BIM模型丢失
58EXP 2019年06月19日

WebGL 在加载BIM的S3M缓存模型时,某个位置上的模型一直无法加载出来,请问这是什么原因呢?在iDesktop上显示是没问题的。

iDesktop:

webgl 

1个回答

您好,您第一张图中红框部分和左边的相同类型的模型是同一图层吗?图中箭头所指部分如果是同一个图层,您单独加载这个图层有问题吗?
如果不是一个图层,那么这个图层就没有被加载进来。您看一下在idesktop中加载这个缓存有没有问题,因为您图中我看不出来加载的是模型还是缓存

6,215EXP 2019年06月19日
是同一个图层的。在idesktop加载也是缓存的,是没问题的。

单独加载该图层怎么加呢?
使用idesktop加载iserver上的三维服务场景什么模型一个都看不到
我将这个图层缓存单独拿来发布,只加载该图层也是一样的结果。刚测试的时候,转到某个角度,模型会出来,但是,一出来整个页面都卡死了,直接奔溃了。

使用addSS3MTilesLayerByScp的方式加载

代码Scene.addS3MTilesLayerByScp(url, options);

url地址要使用config一级,比如

http://localhost:8091/iserver/services/3D-WhiteBuilding/rest/realspace/datas/WhiteBuilding@CBD_building/config

这个模型精细程度怎么样?机器配置如何呢?

您可以在相同位置做一个类似的白模模型检测一下是不是模型过于精细的问题
我通过idesktop再相同的位置添加白膜,还是展示不出来的
也是只添加了这一个模型吗?

我这边也测试了,并没办法重现您的问题,方便的话可以发我一份数据吗?我的邮箱是zhaoshuang@supermap.com
已经发你邮箱了, 压缩密码是map
你好,昨天给你发的数据有收到了吗?你那边会不会出现模型丢失的问题呢?

测试好了,没有丢失的问题

看了一下您给我发的数据,您切缓存的时候吧所有图层的缓存格式改为S3M,再重新发布一次

换成S3M的,重新发布还是会丢。你这是在idesktop上加载的吧?idesktop上不会丢,webgl上加载会丢
我这个是在webgl上加载的
那你可以把你发布的服务让我调一下吗?我试试调你的服务看看
不好意思,我这边没有做外网映射。

您切缓存时候注意一下,看看是不是所有图层都是S3M。或者您进到您的缓存目录中看一下,文件格式是S3M么
确认了,已经发布了很多次,看了很多遍了。
用的什么版本的webgl,是官网的最新版本吗
不是最新版本的,我也忘记了是哪个版本了。包的文件名称是《SuperMap_iClient3D_9D_for_WebGL_1901211048.zip》
官网上9.1.1版本的

使用官网上的最新版本9.1.2,加S3M的时候会报错。错误如下图:

这是您相对路径没有引用对。您检查一下js文件夹下的main.js中的引用对不对
我没有引用这个文件啊。我只引用了你们包里的Cesium.js,就直接报错了。

您看一下我们官网示例中的引用,至少需要引入

<link rel="stylesheet" href="../Build/Cesium/Widgets/widgets.css">
<script type="text/javascript" src="./js/require.min.js" data-main="js/main"></script>

main.js会根据里面的路径来引入Cesium.js和zlib.min.js

我用的是vue的框架,我直接在index.html引入zlib.min.js和Cesium.js是一样的吧。

会报下面的错误:

可以,不引入上面那个css也可以。

zlib.min.js在examples中的js文件夹下,如果您还找不到,搜索一下

这个9.1.2的包还很多有问题啊,特别是在S3MTilesParser.js这个文件。

<!--StartFragment -->

  <script type="text/javascript" src="./static/libs/Cesium/Cesium.js"></script>
  <script type="text/javascript">
    // zlib依赖require.js全局define方法
    var define = function () {};

  </script>
  <script type="text/javascript" src="./static/libs/Cesium/Workers/zlib.min.js"></script>
zlib要依赖

用了SuperMap_iClient3D_9D(2019)_SP2_for_WebGL_ENG的就没有问题。SuperMap_iClient3D_9D(2019)_SP2_for_WebGL_CHS这个有问题。

但是模型还是出不来
您把vue去掉,在普通的环境下加载一个看看
在普通环境下加载还是不出来的
你那可以加载出来的代码,能不能发我一份,我看看。我在我这边试试
嗯嗯发给您了
用你发给我的S3M缓存发布成服务,那个模型还是展示不出来。
function onload(Cesium) {
    var viewer = new Cesium.Viewer('cesiumContainer');
    var scene = viewer.scene;
    viewer.scene.undergroundMode = true;
    viewer.scene.globe.globeAlpha = 0.5;
    scene.open("http://localhost:8091/iserver/services/3D-test1/rest/realspace");

以上是我的代码

浏览器chrome 版本 74.0.3729.169(正式版本) (64 位)

显卡GTX1060

测试环境 官网示例

 window.onload = function (event) {
            var HzsDyrmyyRegionPoints = []
            var viewer = new Cesium.Viewer('app')
            var s3mServerUrl = 'http://172.100.100.200:8092/iserver/services/3D-test1/rest/realspace'
            //获取3维服务的异步请求对象promise
            let scene = viewer.scene;
                      
			scene.globe.undergroundMode = true;
			scene.globe.globeAlpha = 0.5;
		    scene.open(s3mServerUrl);  //打开iserver场景服务下所有图层
			var positions = [];
		  for (let point of HzsDyrmyyRegionPoints) {
			positions.push(point.x);
			positions.push(point.y);
			positions.push(point.z);
		  }

		  scene.globe.addExcavationRegion({
			name: "hzsdyrmyy",
			position: positions,
			height: 10000,
			transparent: false
		  });      

        }

以上是我的代码。

我用了你的代码,好像没有达到你截图出来的效果啊

浏览器也是:chrome版本 74.0.3729.169(正式版本) (64 位)

显卡也是GTX1060 6G。但是那个模型还是不出来

当我从Revit导出模型的设置中的高度值,设置为3.2及以上值的时候,该模型是可以出现的。但是低于3.1的话该模型就出不来了。

WebGL怎么设置S3MTiledLayer的图层高度呢?

您可以看下我们官网的API
地址:http://support.supermap.com.cn:8090/webgl/Build/Documentation/S3MTilesLayer.html?classFilter=s3m

这里面有个position属性可以设置高度

后面通过style3D完成设置了。

let style3D = new Cesium.Style3D();
 //设置底部高程。
style3D.bottomAltitude = 3.1499;
layer.style3D = style3D;
//设置后需刷新图层
layer.refresh();

但是要通过增加高度来显示模型,感觉不是很合理额。有没有其他什么解决方法呢

我再排查排查有消息给您反馈
...