首页 / 浏览问题 / WebGIS / 问题详情
webgl三维地图渲染总是有色差
7EXP 2023年08月21日

想问一下, 什么情况下会导致三维场景渲染有色差。真正的颜色应该是绿色的,不知为何随着业务的增加,变成了灰绿色。

1个回答

你好,请问发布的是什么三维数据?在桌面打开三维场景和iserver发布后预览的三维场景是否正常?
1,865EXP 2023年08月22日
就是倾斜摄影OSGB格式,然后通过idesktop转换成s3mb格式,通过iserver发布,然后在idesktop中预览是正常的,在客户端渲染开启天空盒子,然后颜色就变成灰色(原本的颜色是绿色的)

1、场景中除了开启天空盒子还有其他设置吗?比如光照、时间等。

2、官网测试并未出现模型颜色变化,可以在官网示例中测试看看,该示例中有夜景和普通天空盒:http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#White-box_Beautification_for_Cityview

1、开启天空盒子未开启光照,和时间。现在关闭天空盒子也渲染出现了色差问题。随着地图放大缩小,渲染过程中就会出现正常颜色和不正常的颜色同时出现,如问题描述里的图片。

2、您给的这个链接我修改为我们发布的三维地址,放上去后是正常的。不管放大缩小都是不变的。示例中使用的是:new SuperMap3D.Viewer。我本地代码使用的是:new Cesium.Viewer。不知道跟这个是否有关系?

3、不知道前端在使用过程中书写是否有什么特别需要注意的地方,或者应该注意的逻辑先后顺序?

1、当前使用的iclient3d for cesium是什么版本的?通过console.log(Cesium.SuperMapVersion)可以查看。也可以下载较新版本试一下,http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?id=2399 

2、现在示例中的是iclient3dfor webgl版本,也是三维地图引擎,加载方式一样,只是接口名可能有一些不同。你也可以使用该产品。

3、没有特殊要求,一般是初始化场景和一些环境设置,例如时间、光照等在前,业务接口在后。如果要在椭球模式下加载,需要将椭球模式参数放在初始化viewer之前。

1、Cesium.VERSION:1.67          iclient3d for cesium: 36284。

2、后来调试一下,给window.viewer.scene.skyBox 赋值的时候,需要是window级的变量给其赋值,这样地图渲染就不会变色了。不知这是为何?

window.blueSkyBox = new Cesium.SkyBox({

            sources:{

                positiveX:require('../../assets/images/SkyBox/bluesky/Right.jpg'),

                negativeX:require('../../assets/images/SkyBox/bluesky/Left.jpg'),

                positiveY:require('../../assets/images/SkyBox/bluesky/Front.jpg'),

                negativeY:require('../../assets/images/SkyBox/bluesky/Back.jpg'),

                positiveZ:require('../../assets/images/SkyBox/bluesky/Up.jpg'),

                negativeZ:require('../../assets/images/SkyBox/bluesky/Down.jpg')

            }

        });

window.viewer.scene.skyBox = window.blueSkyBox

不知道是否跟初始化有关系? window.viewer = new Cesium.Viewer('map')
如果是通过var来定义的变量会有作用域,当在函数内部定义的变量,在函数外就会失效。挂在window下就是全局对象,访问也不会出现命名冲突等问题。
...