作者:kele
一、背景
SuperMap Hi-Fi 3D SDK(2023 11i) for Unity推出新功能:支持矢量面同時貼地形圖層和模型圖層,并且能實現(xiàn)數(shù)據(jù)點擊查詢屬性、更改初始填充顏色、初始邊框線顏色、選中填充顏色、選中邊框線顏色、控制顯示高度等效果。
二、功能介紹
SuperMap Hi-Fi 3D SDK(2023 11i) for Unity支持矢量面疊加模型緩存、地形使用,并且支持設(shè)置矢量面填充顏色、線框顏色、選中顏色、可見高度等參數(shù)
三、實現(xiàn)步驟
1、制作矢量面數(shù)據(jù)
準(zhǔn)備好矢量面數(shù)據(jù),使用 SuperMap iDesktopX 桌面軟件將數(shù)據(jù)添加到場景中,通過【風(fēng)格設(shè)置】將數(shù)據(jù)前景色、線顏色都設(shè)置成白色
保存場景,對場景右鍵【生成場景瓦片】,S3M版本選擇【S3M 1.0】格式,得到瓦片數(shù)據(jù)
2、Unity中添加矢量面瓦片數(shù)據(jù)
選擇矢量面配置文件(*.scp)后,點擊【添加圖層】
之后以同樣的方式,添加一份傾斜攝影瓦片數(shù)據(jù),運行場景
可以看到,傾斜攝影瓦片和矢量面瓦片都添加到場景中了,但是矢量面瓦片并沒有貼在模型上,也沒有初始化顏色,下面咱們通過代碼來控制矢量面的初始顏色、選中顏色,以及顯示高度。
3、設(shè)置矢量面顯示風(fēng)格、貼模型對象、貼地
找到并打開 SupermapGIS 腳本,在 SceneAddLayer 方法中插入以下代碼:
//設(shè)置矢量面數(shù)據(jù) 貼傾斜
var s3mLayer = info.Layer as Layer3DS3MFile;
if (s3mLayer.DataType == S3MType.ObliquePhotogrammetry3DModel)
s3mLayer.ClampVector = true;
//設(shè)置矢量面數(shù)據(jù)填充顏色、邊框顏色、選中風(fēng)格
if (s3mLayer != null && s3mLayer.Type == Layer3DType.S3M && s3mLayer.Name.Contains("社"))
{
//設(shè)置矢量面初始風(fēng)格:面顏色、半透;貼地矢量面的邊框顏色;執(zhí)行貼地
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;
//設(shè)置選中風(fēng)格
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、根據(jù)相機高度,控制矢量面顯隱
找到并打開 SupermapGIS 腳本,在 PlayingUpdate 方法中插入以下代碼:
//當(dāng)相機高度小于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("社")) //找到社區(qū)矢量面圖層
{
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、查詢屬性
打開屬性查詢功能,通過鼠標(biāo)點擊矢量面進行屬性查詢文章來源:http://www.zghlxwxcb.cn/news/detail-777409.html
四、最終效果
文章來源地址http://www.zghlxwxcb.cn/news/detail-777409.html
到了這里,關(guān)于SuperMap Hi-Fi 3D SDK for Unity矢量面貼地貼模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!