错误类型是:
DeveloperError
,错误信息是:
cartesian is required
,见下图:
原因分析
这个问题早在去年就已经发现了,但是当时一直没找到解决方案,而且在有的电脑上能正常运行,有的电脑上就会报错,起初怀疑是Cesium的bug或是显卡兼容性的问题;直到现在,原本在我电脑上能正常运行的代码突然复现了之前的错误,我最近电脑除了前两天把HDMI接口重新插拔外没有改过任何环境和配置,于是我意识到很有可能是显卡的问题。由于项目需要,在使用射线求交时,地形表面会增加一些冗余判断,因此在运算前隐藏地表可以大幅减少运算时间、提高效率。
viewer.scene.globe.show = false
我尝试过将这行代码注释掉,程序就能正常运行,不会报错;还有一个将我思考方向定位到GPU的事件是,在我重插HDMI数据线后,VUE的编译速度明显比以前慢了很多。我打开任务管理器发现现在所有的程序都是用我的核显运行,独显不参与工作,所以我猜测有没有可能是GPU的问题,于是尝试将程序运行的GPU切换到独显。
解决方案
首先我的工作环境是两台显示器,一台显示器连接主机核显接口,一台显示器连接主机独显接口,打开任务管理器,观察当前测试使用的Web浏览器所用的GPU引擎,可以看到浏览器是运行在GPU0上,也就是核显。
在桌面“右键”,点击“显示设置”,在“屏幕”设置里“多显示器”中将连接了独显的显示器设为主显示器。
关闭浏览器再重新打开,此时会发现浏览器已经运行在GPU1,也就是独显环境下了。
然后再次运行上面报错的代码,现在已经可以正常运行了~