1. 问答社区常见三维问题整理
作者:吆鸡
校对:haixin
关键字:精模、倾斜摄影模型、三维管线、SuperMap问答社区 、iDesktop
1.1. 前言
SuperMap问答社区上线,面向大众、服务大众,无论您问的问题是多么浅显易懂,我们都会热情洋溢回复您;又或者您问的问题是多么的高深难解,我们仍会尽一切能力资源去找出问题的原因,给您最终的解决方案。几个月以来,不仅积累了一定的用户量,而且积累了不少有代表性的问题。尤其是三维问题,截止发贴,已经249个问题了。
三维 | iDesktop | JavaScript | iServer | iClent | iObject |
---|---|---|---|---|---|
249 | 134 | 133 | 117 | 106 | 65 |
在此分产品总结一下GISer们常问的三维问题,希望能帮助到需要帮助的人。
1.2. 桌面三维
1.2.1. 精模导入问题
- 超图3dsMax插件导入模型出错(3dsMax崩溃等),提示“发生了错误,应用程序将立即关闭。……”如下图:
- 升级新一点的超图3dsMax插件版本导导试试。
- 可能是数据有超图插件不支持的类别,比如实体(辅助线等)。在3dsMax中按快捷键“CTRL+A”选中所有东西,左下角提示“选则了XX个对象”,能正常导出;如果左下角提示的是“选择了XX个实体”,实体是导不出去的,就可能导致崩溃。
- 可能是您数据太大,导出时内存不够用,导致程序崩溃。这时需要把max文件分为多个文件再导。
- 3dsMax模型数据导入到数据集添加到场景发现模型呈白色(颜色丢失)或者贴图丢失。
- 3dsMax中模型颜色可以设置对象颜色,也可以通过材质球,设置漫反射颜色,然后把这个材质赋给对象,对比如下图:
目前已知的是“对象颜色”导到超图桌面会丢失。因此如果模型对象不需要贴图,只想着色,请通过材质球的漫反射颜色设置,再导便正常了。 - 贴图丢失可能的原因较多,如:
(1)贴图文件放在了多个文件夹,而超图3dsMax插件导出数据时纹理路径只能指定一个文件夹。
(2)贴图文件目录指定错了,或者贴图文件本身丢失。
解决以上2个问题的终极办法是把贴图文件放在您的3dsMax模型文件(*.max)同一个目录。
(3)贴图文件使用了不支持的格式。
目前支持的贴图文件格式有:bmp、jpg、tif、png、tga、gif,其他格式是不支持的,需要转换成支持的格式才行。建议贴图纹理长、宽均为2的n次幂像素值;建筑物纹理尺寸控制在1024×1024以内,地形纹理尺寸控制在512×512以内。除此之外,确保您的贴图文件颜色模式是RGB模式和8位通道的图片,具体可以在photoshop中查看:
(4)使用了不支持的材质球。
目前SuperMap平台中支持的max材质只有标准(Standard)和多维子材质(Multi/Sub-Object)(可以包含多个标准材质),其他材质导出均不能正常显示。
(5)贴图文件名称有“括号” 、“空格”等不字符。
目前已知这些符号有时也会导致贴图丢失,建议取名不要用括号和空格,下划线是可以的。
- 3dsMax模型数据导入到数据集添加到场景发现模型与模型之间相对位置有偏差。如下两幅图所示:
- 原因可能是模型建模的时候参考了某个坐标系,如图:
但在超图3dsMax插件中导出时是“场景投影信息”选择的是插入点信息,如图:
如此导出的结果会发现摄像头偏差栏杆一些距离。原因可解释为数据导出过程中从投影坐标系变换到经纬度坐标系这个投影变换过程产生了误差,而且较大。解决办法是通过自定义投影告诉插件即将要转的数据是基于什么投影坐标系建模而来的(前提是您知道这个数据是基于某个坐标系建的,比如测试数据,图中有摄像头那个数据,是WGS84椭球的高斯3度带某带的投影,下图中xml格式的投影文件可以在iDesktop中导出),可以按下图所示方式设置使得结果正确:
结果图片:
- 如果确实是不知道原始数据是什么坐标系的,可以在3dsMax中选中所有对象,将它们整体平移到原点附近,然后插入点信息设置经纬度导出,也能避免这种问题。
- 3dsMax模型数据导入到数据集添加到场景发现缩放到图层时看不见模型或者模型很小,如图:
- 原因可能是离这个数据很远的地方还有数据。最可能导致这个问题的操作是本来画了一点点模型,但是发现画的坐标没对,删了,又到正确坐标画模型去了。问题就出在删的那一步,比如没删干净,留了一个很小的对象,在导到超图平台的时候一起导过去了,导致数据集范围过大,只能定位到很小,甚至有定位不出来但是属性表能看见的情况。解决办法是在3dsMax中排除那些对象,重新导。如果从属性表能判断出来哪些是不要的,可直接在iDesktop属性表中删除,删除后对数据集进行重新计算范围操作。
- 3dsMax模型数据导入到数据集添加到场景设置图层风格为贴地却没有贴地,如图:
- 这是因为在3dsMax模型对象本身就有高度信息,导到超图平台时,设置绝对高度为0或者贴地时其实是大概是3dsMax看见中那个高度,如测试数据要贴地需要把高度设置为-100以上。在3dsMax中建模的时候把z值调为0附近就能避免这个情况。
- sketchup等其他格式模型怎么导入超图平台?
- 这类模型不一定能直接导入超图平台,一般思路是先转为通用交换格式(如*.FBX格式),然后用3dsMax打开,如贴图丢失,需要重新在3dsMax中重新贴图,最后超图3dsMax插件导入到超图平台。
精模问题可参考的资料:
- 超图平台模型制作规范。
- 超图平台常见的三维模型问题整理和解决办法。
- 超图平台中三维模型烘焙的处理。
- 超图平台中精模匹配地形处理思路。
- 超图公开课精品系列之《三维建模介绍及实战》第二讲 精模篇。
- 超图平台3dsMax插件下载地址。
- 超图平台3dsMax2014插件下载地址。
超图3dsMax2014插件手动安装方法: (1)下载解压,将"您的路径\Bin_x64_max_53805"添加到环境变量path中。(需要放在第一个位置) (2)拷贝文件"您的路径\Bin_x64_max_53805\SuMax2014Plugin.gup"到3dsMax2014安装目录如“D:\Program Files\Autodesk\3ds Max 2014\stdplugs”中。
1.2.2. 倾斜摄影模型问题
- 生成配置文件成功加载到场景看不见模型。
- 双击图层能定位,但是看不见,数据可能在地下开启地下场景即可。操作步骤:“场景”菜单→“地下”组中“开启/关闭”下拉框选为开启,然后设置“透明度”为100%。
- 开启场景地下模式也看不见数据,可能航拍数据转OSGB格式出了问题,常见的问题是坐标系选得不对。一般不能直接选择4326(WGS84)经纬度的坐标系,要选ENU的经纬度坐标系或者是基于WGS84的投影坐标系(如高斯投影、UTM投影)。
- 生成配置文件成功加到场景发现明显异常,如下图:
- 类似上图中模型呈现遍布全球的碎片、或者遍布局部(但变形很严重)一般都是生成配置文件时指定了和数据导出时不一致的坐标系。解决办法,指定正确的坐标系,正确的坐标系一般在数据处理软件的工程输出目录会有个名叫“metadata.xml”的文件里面记录了正确的坐标系信息。
- 成配置文件成功加到场景发现模型颜色不正常,如变黑白、失真等。
- 生成scp配置文件之后,再进行一次“纹理压缩”操作即可。步骤“倾斜摄影”菜单→“PC端”组→“压缩纹理”,选择scp配置文件,并指定目标路径(不要与scp文件同一个目录)。
- 进行“模型单体化”(特指“ID单体化”,“倾斜摄影”菜单中“WebGL客户端”组中的“模型单体化”功能)后的倾斜摄影模型没有选中效果。
- 可能是您的数据坐标系是投影坐标系。目前“模型单体化”(ID单体化)只支持地理(经纬度)坐标系的数据,投影坐标系的数据还不支持。
倾斜摄影模型问题可参考的资料:
- 菜鸟都应该知道的倾斜摄影测量知识。
- SuperMap iDesktop 8C 技术文档 ——倾斜摄影模型提取矢量面。
- SuperMap iDesktop 8C 技术文档 ——倾斜摄影模型生成DSM、DOM操作流程。
- 超图公开课精品系列之《三维建模介绍及实战》第三讲 倾斜摄影篇。
- 超图公开课之《倾斜摄影时代三维GIS软件技术新进展》。
1.2.3. 管线问题
- 请问带有流向的管线动画是如何制作的?
- “工作空间管理器”中,展开“资源”节点,打开线“型符号库”对话框,“编辑”菜单,选择“新建三维线型”。在三维线型符号编辑器中,画一个圆形截面,然后在属性设置,设置GIF贴图即可。注意,流向的方向是矢量化的方向,即按照绘制顺序,按照第一个点开始到最后一个点。
管线问题可参考的资料:
1.2.4. 桌面其他问题
- 桌面新建场景立即闪退(崩溃)。
- 原因可能是您的电脑只有很普通的集成显卡,解决办法:更换独立显卡。或者有独立显卡,但驱动程序太老,解决办法:升级显卡驱动。
- 场景中对象渲染、或者三维分析结果渲染明显不正确。
- 检查显卡驱动是否是最新,或者您有双显卡,而没把独立显卡设置为主要显卡。
- 场景性能优化。
- 条件允许的情况下,尽量升级显卡,显卡(GPU运算)对三维渲染至关重要。
- 对场景生成缓存,建议生成OSGB格式的缓存。
- 对场景进行“性能诊断”,根据诊断结果有针对性的进行优化操作。其结果信息包括:重要、普通和建议。其中,重要提示对场景性能影响较大,其次是普通提示,建议提示则对场景性能影响较小。
- 显卡等硬件已经极好的情况下,场景仍然不流畅,一般是模型建得过于精细,目前硬件条件渲染还比较吃力。可打开“场景属性”,“其他属性”中勾上“帧率信息”,显示场景的“帧率”、“三角面数量”信息,观察帧率是否过低(一般30以上较流畅),三角面数量是否过高(一般情况数据不太大,但其值高于几千万属建模太精细)。如证实为建模太精细,可考虑从建模层面优化模型(模型简化),如减少顶点数,模型面数,控制贴图纹理大小等。
- 倾斜摄影模型数据优化可以考虑对scp文件进行“合并根节点”、“压缩纹理操作”。在桌面的“倾斜摄影”菜单中能够找到这两个功能。
- iDesktop 8C生成场景缓存里没有OSGB缓存选项是什么情况?
- 原因可能是直接对数据集右键进行生成“生成场景缓存”操作(对数据集生成场景缓存),这样在选格式的时候是不能选OSGB格式缓存的。解决办法:把数据集添加到场景,保存场景取名“场景A”,然后在“工作空间管理器”中的“场景”节点下找到“场景A”,对它右键再选“生成场景缓存”(对整个场景生成缓存),在弹出对话框中即可对想生成的矢量面设置为OSGB格式的缓存。
1.3. 组件三维
- 组件生成场景缓存怎么设置缓存类型为OSGB格式?
- 生成缓存前,获取到场景的图层,设置Layer3DDataset.IsBuildOSGBCache属性。
示例:
foreach(layer3D in sceneControl.Scene.Layers)
{
if (layer3D is Layer3DDataset)
{
Layer3DDataset layer3DDataset = layer3D as Layer3DDataset;
layer3DDataset.IsBuildOSGBCache = true;
}
}
- 超图平台支不支持WPF进行三维应用开发?
- 支持。只是并没有从WPF层面实现控件,引用的类库和winform开发引用的类库一样,通过WindowsFormsHost来绑定控件的。
在xaml的Window标签添加
xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
<Grid>
<wfi:WindowsFormsHost x:Name="hostSceneControl" DataContext="{Binding}" HorizontalAlignment="Stretch"></wfi:WindowsFormsHost>
</Grid>
>构造函数中添加 ```csharp ... m_sceneControl = new SceneControl(); hostSceneControl.Child = m_sceneControl; ... ```
- 场景中画一个圆,把圆内的模型高亮显示思路。
- 这可总结为一个周边查询的实际案例,会用到空间分析思路。由于目前精模数据(从3dsMax软件等导入的模型数据)无法直接参与空间查询,所以目前一个较好的实现思路是提取模型的底面(矢量面,保存好对应关系),用画的圆和矢量面进行空间分析(包含或者相交算子),得到结果后,用对应关系找到需要高亮的模型,进行高亮显示即可。提取模型底面示范代码传送门。(跳转后在超图代码中寻找。)
1.4. 客户端三维
1.4.1. 插件客户端
- 插件客户端支持的浏览器。
- 插件客户端支持IE内核的浏览器(IE11需要设置兼容性代码为IE8或者IE10)和支持开启“NPAPI”设置的浏览器,如谷歌45版本以下的浏览器。
- 安装了插件,浏览器仍然提示找不到插件。
- 确保浏览器没有屏蔽“SuperMapRealspace”插件,IE浏览器打开一个插件客户端范例页面,“工具”菜单→“管理加载项”查看“SuperMapRealspace”插件的状态是否已启用。
- 卸了重新安装一遍。不行的话请手动注册插件:(1)在附件中以管理员权限运行命令提示符;(2)输入注册命令regsvr32,然后空格;(3)将“C:\SuperMap\SuperMap iClient\SuperMap iClient3D for Plugin\npSuperMapRealspace.dll”或“C:\SuperMap\SuperMap iClient\SuperMap iClient3D for Plugin (x64)\npSuperMapRealspace.dll”(64位)拖拽到CMD中,然后回车。
- 插件客户端初始化三维球浏览器报“Invalid Arguments”错误。
- 在html页面<head>标签添加兼容性代码:
<meta http-equiv="x-ua-compatible" content="IE=8">
- 插件客户端连续按F5刷新导致浏览器崩溃.
- 连续按F5刷新会导致浏览器占用的显存越来越大,最终承载不过来导致浏览器崩溃。建议调试程序的时候关闭浏览器之后重新打开浏览器调试。
- 插件客户端HTML元素怎么叠加到三维球上?
- 由于ActiveX控件机制,HTML的div等元素是会被ActiveX压盖的,微软目前都没有完美的解决办法。较好的办法是把元素加到iframe标签,再把iframe叠加到三维球上,这样不会被压盖,但iframe确实也没办法设置为透明的。
- 插件客户端怎么更改模型对象颜色?
- OSGB缓存格式的图层可以在插件客户端设置颜色,注意设置某个对象的颜色前最好是先移除这个对象的选择集颜色。
var layer3Ds = sceneControl.get_scene.get_layer3Ds();
var layer3D = layer3Ds.get_item(0); // 假设OSGB图层是第一个图层
var selection3Ds = sceneControl.get_scene.findSelection3Ds(false);
var length = selection3Ds.length;
if (lengthtt>0) {
var selectID = [Number(selection3Ds[0].get_item(0))];
var changeColor = new SuperMap.Web.Core.Color(255,0,0,255);
layer3D.get_selection3D().removeAll();
layer3D.setObjectsColor(selectID, changeColor);
}
- 插件客户端怎么实现管线的净距分析。
- 目前插件客户端没有开放相关API,不过有范例可参考。净距分析示范传送门。(跳转后在超图代码中寻找。)
插件客户端可参考的资料:
1.4.2. WebGL客户端
- WebGL客户端支持的浏览器有哪些?
- 只要支持WebGL的浏览器都支持WebGL客户端,包括IE(10以上版本)、Chrome、Firefox、Opera、Safari等。移动端iPhone5及其以上系列、iPad Air及其以上系列、三星 Galaxy S6及以上系列、小米3及以上系列、华为荣耀6Plus及以上系列。未列出的设备(浏览器)请在这个页面测试是否支持WebGL:SuperMap Earth。如果跳转页面能看到三维球说明支持,反之不支持或者需要更新显卡驱动。
- WebGL客户端打开三维服务场景使用失败。
- WebGL页面需要把整个包放在发布的目录(如Tomcat的Webapp中)在浏览器输入页面地址访问,而不能直接用浏览器打开html文件。
- WebGL客户端设置对象颜色、透明化对象。
- 用到的API是S3MTilesLayer.setObjsColor(ids, color)。其中Cesium.Color第4个参数代表透明度(0~1)。
// Name Type Description
// ids Array 要设置颜色的对象ID列表。
// color Color 要设置的颜色。
var color = new Cesium.Color(1.0, 0.0, 0.0, 1.0);
var ids = [12, 22, 65, 98];
S3MTilesLayer.setObjectsColor(ids, color);
WebGL客户端可参考的资料:
1.5. 后记
欢迎访问超图问答社区检索问题、提出问题,如问题着急请直接拨打超图支持热线010-59896655.