地形建模可能算是三維gis的一個難點。之前在學校時做過一個簡單的學校三維模型,本來是想做加上地形的,不過後來發現並不是那麼容易所以就放棄了。最後做出來的學校模型除了建築就只有幾棵樹,效果不是那麼好。
今天來介紹一下超圖三維的地形建模的相關知識。地形建模會分爲三部分介紹
1.TIN地形的生成
2.TIN拉伸成模型
3.地形貼紋理
由於時間和其他方面的一些限制,文章可能會更新得有點慢。
一、地形效果圖展示
先來看下超圖三維地形的效果圖:
從地理空間數據雲(http://www.gscloud.cn)下載免費的30m分辨率的dem以柵格的方式導入到超圖平臺,直接將dem添加到場景中。效果如下:
加載在線的天地圖隱藏影像再看下效果:
可以看下河流道路一些地物的匹配情況:
總體來說,整體效果還行。不過這種地形其實是柵格(Grid)地形,相比TIN地形精度是遠遠不夠的。
再來看一下的TIN地形與柵格(Grid)地形對比圖
(由於天地圖加載到一定精度就不給顯示,所以我加了osm對比,左邊TIN地形,右邊柵格地形):
對比效果還是比較明顯的,左邊在表現地形方面更精細,更能準確地表達地形。
二、TIN地形的生成
其實TIN地形的生成也很簡單,只需要簡單的幾行代碼就行。
主要的接口如下:
int BeginLevel { get; set; } 起始層;一般默認
string CacheName { get; set; } 緩存名稱;需要自己定義
GeoRegion ClipRegion { get; set; } 裁剪面;可默認,可自定義裁剪面
DatasetGrid Dataset { get; set; } 柵格數據集;生成TIN地形的dem數據
int EndLevel { get; set; } 結束層;一般默認
bool IsBuildNormalMap { get; set; } 是否生成法線;如果沒有法線加載到場景中看不到明 暗效果
int NormalSize { get; set; } 法線塊大小;默認64(x64)一般32(x32)、 64(x64)、 128(x128),值越大,生成的文件越大
string OutputFolder { get; set; } 輸出路徑
bool BuildTIN(); 執行生成TIN; 成功返回true;否則,發揮false;
主要代碼:
class Program
{
private static Datasource m_datasource;
private static CacheBuilderTIN m_CacheBuilderTin;
static void Main(string[] args)
{
m_datasource = new Datasource(EngineType.UDB);
DatasourceConnectionInfo info = new DatasourceConnectionInfo();
//本地udb文件型數據源
info.Server = @"D:\BaiduYunDownload\dem\dem.udb";
info.Alias = Path.GetFileNameWithoutExtension(info.Server);
if (m_datasource.Open(info))
{
Console.WriteLine("成功打開數據源{0}", m_datasource.Alias);
//務必確認dem.udb的第0個數據集爲柵格數據集
m_CacheBuilderTin = new CacheBuilderTIN();
m_CacheBuilderTin.Dataset = m_datasource.Datasets[0] as DatasetGrid;
m_CacheBuilderTin.IsBuildNormalMap = true;
m_CacheBuilderTin.OutputFolder = @"E:\tin";
//進度條
m_CacheBuilderTin.Stepped += m_CacheBuilderTin_Stepped;
m_CacheBuilderTin.BuildTIN();
m_CacheBuilderTin.Stepped -= m_CacheBuilderTin_Stepped;
}
Console.ReadKey();
}
private static void m_CacheBuilderTin_Stepped(object sender, SteppedEventArgs e)
{
//每百分之10輸出一次
if (e.Percent % 10 == 0)
{
Console.WriteLine("已完成{0}%,剩餘時間:{1}", e.Percent, e.RemainTime);
}
}
}
生成過程:
生成後TIN緩存目錄結構:
加載到場景後的效果圖:
好了,今天的介紹就到這裏了。