地形建模(二)--TIN拉伸成模型并贴纹理

很久前,写了一篇“地形建模(一)—TIN地形的生成”的文章,现在来把这个坑填上。TIN地形生成后添加到场景,然后添加影像,效果如下:

TIN地形效果

TIN拉伸为模型主要有三个步骤:

1.提取TIN表面模型

2.拉伸提取到的模型

3.贴纹理

主要接口如下:

提取TIN指定层级表面模型

SuperMap.Realspace.ThreeDDesigner.CacheProcessor3D.ExtractTINSurface(string sctFile, int nLevel);

拉伸闭合,第一个参数为需要拉伸的模型,第二个为海拔

SuperMap.Realspace.ThreeDDesigner.ModelBuilder3D.Envelop(GeoModel3D geomodel, double dbZ);

骨架、材质及纹理相关接口

Skeleton、Material3D及TextureData

主要代码如下:

privatestaticvoidTestExtrudeAndAddTexture()

      {

          WorkspaceworkSpace=newWorkspace();

 

          //打开数据源

          DatasourceConnectionInfoconn=newDatasourceConnectionInfo();

          conn.Server=@"D:\数据\dalian\DL_TIN\xinghai_dem_da\TINTest.udb";

          conn.EngineType=EngineType.UDB;

          Datasourcedatasource=workSpace.Datasources.Open(conn);

 

          //新建数据集

          DatasetVectorInfodtInfo=newDatasetVectorInfo();

          dtInfo.Name="TinTest";

          dtInfo.Type=DatasetType.Model;

          DatasetVectordtVector=datasource.Datasets.Create(dtInfo);

          //设置为地理坐标系

         dtVector.PrjCoordSys=newPrjCoordSys(PrjCoordSysType.EarthLongitudeLatitude);

 

          //提取TIN表面模型,第二个参数为提取的层级,最精细层为最佳。

          GeoModel3DgeoModel3d=CacheProcessor3D.ExtractTINSurface(@"D:\数据\dalian\DL_TIN\xinghai_dem_da\xinghai_dem_da.sct",16);

          if(geoModel3d!=null)

          {

              //拉伸闭合,第二个参数为海拔(-100是为了防止拉伸失败)

             List<GeoModel3D>modelList=ModelBuilder3D.Envelop(geoModel3d,geoModel3d.MinZ-100);

              geoModel3d.Dispose();

              geoModel3d=null;

              geoModel3d=modelList[0];

 

              //贴纹理

              Modelmodel=geoModel3d.Model;

              Skeletonske=model.GetSkeleton(newSkeletonID(-1,0));

              Material3Dmat=ske.Material;

              TextureDatatxtData=newTextureData();

              txtData.Name=Guid.NewGuid().ToString();

             txtData.FromFile(@"D:\数据\dalian\DL_TIN\xinghai_dem_da\xinghai_dom.png")

             

              List<TextureData>txtDatas=mat.Textures;

              txtDatas.Add(txtData);

              mat.Textures=txtDatas;

              ske.Material=mat;

              model.Update(ske);

              geoModel3d.Model=model;

 

              //添加到数据集

              Recordsetrd=dtVector.GetRecordset(false,CursorType.Dynamic);

              rd.Edit();

              rd.AddNew(geoModel3d);

              rd.Update();

              mat.Dispose();

              geoModel3d.Dispose();

          }

      }

 

执行后用iDesktop打开效果如下:

 

 

TIN地形模型效果图

缓存与模型对比效果(左为TIN缓存,右为地形模型)

总的来说代码很简单。代码适用于SUperMap.iObject9D及以上版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值