SuperMap Hi-Fi 3D SDK for Unity矢量面贴地贴模型

作者:kele

一、背景

SuperMap Hi-Fi 3D SDK(2023 11i) for Unity推出新功能:支持矢量面同时贴地形图层和模型图层,并且能实现数据点击查询属性、更改初始填充颜色、初始边框线颜色、选中填充颜色、选中边框线颜色、控制显示高度等效果。

二、功能介绍

SuperMap Hi-Fi 3D SDK(2023 11i) for Unity支持矢量面叠加模型缓存、地形使用,并且支持设置矢量面填充颜色、线框颜色、选中颜色、可见高度等参数

三、实现步骤

1、制作矢量面数据

准备好矢量面数据,使用 SuperMap iDesktopX 桌面软件将数据添加到场景中,通过【风格设置】将数据前景色、线颜色都设置成白色

保存场景,对场景右键【生成场景瓦片】,S3M版本选择【S3M 1.0】格式,得到瓦片数据

2、Unity中添加矢量面瓦片数据

选择矢量面配置文件(*.scp)后,点击【添加图层】

之后以同样的方式,添加一份倾斜摄影瓦片数据,运行场景

可以看到,倾斜摄影瓦片和矢量面瓦片都添加到场景中了,但是矢量面瓦片并没有贴在模型上,也没有初始化颜色,下面咱们通过代码来控制矢量面的初始颜色、选中颜色,以及显示高度。

3、设置矢量面显示风格、贴模型对象、贴地

找到并打开 SupermapGIS 脚本,在 SceneAddLayer 方法中插入以下代码:

csharp 复制代码
 	//设置矢量面数据  贴倾斜  
    var s3mLayer = info.Layer as Layer3DS3MFile;
    if (s3mLayer.DataType == S3MType.ObliquePhotogrammetry3DModel)
        s3mLayer.ClampVector = true;

   //设置矢量面数据填充颜色、边框颜色、选中风格
   if (s3mLayer != null && s3mLayer.Type == Layer3DType.S3M && s3mLayer.Name.Contains("社"))
   {
        //设置矢量面初始风格:面颜色、半透;贴地矢量面的边框颜色;执行贴地
        Style3D style = s3mLayer.Style;
        style.FillColor = new Color(02f, 0.4f, 0.1f, 0.5f); //蓝色
        style.LineColor = new Color(0.0f, 1.0f, 0.0f, 1.0f);//绿框
        style.AltitudeMode = AltitudeMode.ClampToGround;//贴地
        s3mLayer.Style = style;
        //设置选中风格
        Style3D selectstyle = s3mLayer.SelectStyle;
        selectstyle.FillColor = new Color(0.0f, 0.0f, 1.0f, 0.5f);   //蓝色
        selectstyle.AltitudeMode = AltitudeMode.ClampToGround;
        s3mLayer.SelectStyle = selectstyle;
        s3mLayer.UpdateData();
   }

4、根据相机高度,控制矢量面显隐

找到并打开 SupermapGIS 脚本,在 PlayingUpdate 方法中插入以下代码:

csharp 复制代码
	//当相机高度小于5000米时,显示矢量面,反之隐藏
    if (came.Altitude < 5000)
    {
    	for (int i = 0; i < Realspace.SceneControl.Scene.Layers.Count; i++)
        {
        	var layer = Realspace.SceneControl.Scene.Layers[i];
            if (layer.Type == Layer3DType.S3M && layer.Name.Contains("社")) //找到社区矢量面图层
            {
            	if (layer.IsVisible != true)
                {
                	layer.IsVisible = true; //矢量面图层可见性
                }
            }
            else if (layer.Type == Layer3DType.S3M && layer.Name.Contains("Config")) //找到倾斜摄影图层
            {
            	layer.IsVisible = true; //倾斜摄影图层可见性
            }
            else if (layer.Type == Layer3DType.S3M)
            {
            	if (layer.IsVisible == true)
                {
                	layer.IsVisible = false; //隐藏其它矢量面图层
                }
            }
        }
	}

5、查询属性

打开属性查询功能,通过鼠标点击矢量面进行属性查询

四、最终效果

相关推荐
Martina_032115 小时前
AI生成3D场景的霓虹灯一开就糊成光团?用6步检查Emissive、Bloom与曝光
人工智能·3d·ai·自然语言处理·游戏引擎·材质·贴图
Martina_03211 天前
AI生成3D场景从白模换成精模后镜头全偏了?用6步检查单位、枢轴与层级替换
图像处理·人工智能·3d·ai·自然语言处理·材质·1024程序员节
寂寞的船2 天前
【Unity知识速递】第8期 IL2CPP 托管堆内存碎片与原生堆交互机制深度解析
unity·游戏引擎·交互
时间的情敌2 天前
Cesium 加载 3D Tiles 倾斜摄影、压平、样式设置(Vue3 实战)
vue.js·3d·cesium
寂寞的船3 天前
【Unity知识速递】第5期 Unity 6.2 深度解析:AI Assistant 登场,World Space UI 与 Sentis 全面升级
人工智能·ui·unity
寂寞的船3 天前
【Unity知识速递】第4期 MCP for Unity:用 AI 自然语言控制编辑器
人工智能·unity·编辑器
淡海水3 天前
09-04-内存-Unity原生对象生命周期
unity·c#·游戏引擎·gc
寂寞的船3 天前
【Unity知识速递】第6期 URP性能优化完全指南:从内存到GPU的三维调优
unity·性能优化·编辑器
寂寞的船3 天前
【Unity Bug挑战】第10期 SerializeReference 内存泄漏之谜
unity·c#·游戏引擎·bug
AGI_Eval4 天前
AI 3D生成技术:从“可用”走向“可靠”还有多远?
人工智能·3d