3d圖片輪播代碼(3d旋轉(zhuǎn)輪播圖)
前言:為了能在建模軟件 Blender 中成功建立起3D模型,需要對高程數(shù)據(jù)進(jìn)行預(yù)處理。
高程數(shù)據(jù),你也可以叫 DEM(數(shù)字高程模型)數(shù)據(jù)。這種數(shù)據(jù)有多種表現(xiàn)形式,同樣也有多種儲存方式,或者說格式;最常見的就是以灰度值來表示高程的灰度柵格數(shù)據(jù) TIFF,后綴為 tif 的格式。
后文說的高程數(shù)據(jù)都是指高程灰度圖柵格數(shù)據(jù)。
Blender 就是通過讀取高程數(shù)據(jù)中各像素的灰度值來獲取相應(yīng)的高度信息,然后建立起3D模型。
Blender 僅讀取灰度值,對其空間坐標(biāo)信息不敏感,讀入到 Blender 中的空間坐標(biāo)信息就沒了,所以不一定非要 TIFF 數(shù)據(jù)才行,只要是灰度柵格圖像,比如 PNG 和 JPEG 格式,在保證像素類型正確的前提前,都是可以通過 Blender 建立3D模型的。
根據(jù)具體的情況和相應(yīng)的場景可能需要不同的格式,不過一般使用 TIFF 格式的就可以了。
數(shù)據(jù)處理分為以下4個部分,其中最后兩個部分是重中之重,所有的操作同時提供 ArcGIS 和 QGIS 兩種處理方式:
數(shù)據(jù)獲??;
合并-裁剪-投影-重采樣;
范圍拉伸;
轉(zhuǎn)換像素類型。
理論非常簡單,但是制作出的地形模型好壞的關(guān)鍵就在于數(shù)據(jù)處理。
第一步 數(shù)據(jù)獲取
制作3D模型需要高程數(shù)據(jù),現(xiàn)在獲取高程數(shù)據(jù)的有效途徑非常多,讀者可以根據(jù)自己的需要選擇合適分辨率的高程數(shù)據(jù);
如果你想制作小比例尺大范圍的地圖,最好選擇較大空間分辨率的高程數(shù)據(jù),比如1千米x1千米分辨率;
而如果你想制作大比例尺較為精細(xì)的地圖的話,就可以選擇10米x10米、甚至更小空間分辨率的高程數(shù)據(jù)。
展開全文
特別提醒一點(diǎn),小心使用保密數(shù)據(jù),盡量不用;你能在網(wǎng)上下載到的數(shù)據(jù)想怎么折騰都可以。
網(wǎng)上有很多關(guān)于高程數(shù)據(jù)的獲取指南,各位可以根據(jù)自己的實(shí)際情況獲取相應(yīng)的數(shù)據(jù)。
筆者目前使用較多的是下面這個網(wǎng)站:
http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm
該網(wǎng)站可以下載全球的高程數(shù)據(jù),其中中國區(qū)域高程數(shù)據(jù)的空間分辨率一般都是90米,最重要的是下載速度還行;打開網(wǎng)址可以看到很多小格子,點(diǎn)擊格子就可以下載這個格子范圍內(nèi)的 DEM 數(shù)據(jù),非常的直觀。
解壓后數(shù)據(jù)格式是 HGT 格式,可以直接用 ArcGIS 或者 QGIS 打開。
網(wǎng)站界面截圖第二步 合并-裁剪-投影-重采樣
其實(shí)這四個操作都是可選的,因?yàn)椴⒉皇撬袛?shù)據(jù)都需要全部走一遍這些流程,因?yàn)槟阃耆梢允褂靡粋€已經(jīng)處理好、同時已經(jīng)設(shè)置了投影系的 tif 數(shù)據(jù)。
并不是所有讀者都有 GIS 相關(guān)背景經(jīng)驗(yàn),可能有的讀者僅僅是興趣使然,所以為了不落下每一個人,這里還是講一下如何合并-裁剪-投影-重采樣,對此非常熟悉的讀者朋友可以跳過這一小節(jié),直接進(jìn)入第三步。
2.1 合并
通常來說,高程數(shù)據(jù)都是一塊一塊的矩形;所以你很有可能需要通過將多個矩形合并起來獲取目標(biāo)范圍區(qū)。
將周圍的高程數(shù)據(jù)添加進(jìn)來,將其合并(也叫鑲嵌)成一個整塊。
4塊高程數(shù)據(jù)(未鑲嵌)
工具位置
ArcGIS 可以使用鑲嵌至新柵格工具,該工具位于數(shù)據(jù)管理工具-柵格-柵格數(shù)據(jù)集-鑲嵌至新柵格。
QGIS 可以使用 Merge 工具可以鑲嵌柵格;該工具來自于 GADL 包。位于QGIS 右側(cè)工具欄,GDAL-Raster miscellaneous-Merge?;蛘咴谏戏焦ぞ邫谥锌旖荽蜷_:
2.2 裁剪
工具位置
ArcGIS 中使用裁剪工具;位于數(shù)據(jù)管理工具-柵格-柵格處理-裁剪;
QGIS 中依然在上方的 Raster 菜單中,依次點(diǎn)擊 Extraction- Clip raster by mask layer即可。
2.3 投影
在 Blender 讀取高程數(shù)據(jù)之前應(yīng)該確保高程數(shù)據(jù)已經(jīng)正確設(shè)置好了投影。不然 Blender 讀取的形狀就是扁的,因?yàn)檫@個扁扁的形狀才是投影前高程數(shù)據(jù)的真實(shí)情況。
那為什么 ArcGIS 中就顯示正常呢?因?yàn)?GIS 軟件會自動做一個投影顯示。所以設(shè)置投影系是必不可少的一步操作。
左:投影前的真實(shí)形狀,形狀更扁;右:投影后
工具位置
ArcGIS 中的投影工具在數(shù)據(jù)管理工具-投影和變換-柵格-投影柵格;
QGIS 的投影工具在菜單欄上方的 Raster-Projections-Warp。
2.4 重采樣(修改像素空間分辨率)
重采樣:根據(jù)一部分像素的信息賦值給其他像素信息的過程。
這里的重采樣應(yīng)該叫修改像素空間分辨率,只不過也是用重采樣的方式實(shí)現(xiàn)而已。
什么叫空間分辨率?一個像素所表示的實(shí)際地理大小就是空間分辨率。比如這個教程使用的高程數(shù)據(jù)空間分辨率是90米,那么這就代表一個像素映射現(xiàn)實(shí)生活中一個90米長、90米寬的方形區(qū)域。
如果想要制作整個中國的3D模型,90米分辨率就太精細(xì)了,整個數(shù)據(jù)量就非常龐大,直接讓電腦死機(jī),所以可以通過重采樣為1千米或者10千米。
單獨(dú)的重采樣工具不是所有 GIS 軟件中都有,GIS 軟件中一些和柵格相關(guān)的工具通常會自帶修改空間分辨率的選項(xiàng),所以可以順便設(shè)置好空間分辨率大??;比如使用 QGIS 時我就喜歡使用柵格投影工具來順便修改空間分辨率。
該教程提供的高程數(shù)據(jù)空間分辨率大小合適,不需要修改。
工具位置
ArcGIS 中的單獨(dú)重采樣工具在數(shù)據(jù)管理工具-柵格-柵格處理-重采樣;ArcGIS 10.3版本有4種方法。
QGIS 的話我是直接使用投影工具來解決,因?yàn)?QGIS 本身沒有獨(dú)立的重采樣工具,在 QGIS 主界面上面的菜單欄中選擇 Raster-Projections-Warp即可。
將投影工具中的投影選項(xiàng)空著,只需要設(shè)置好 Output file resolution in target georeferenced units 這個選項(xiàng),就可以在不修改投影的前提下修改空間分辨率。
第三步 范圍拉伸
范圍拉伸,英文:rescale。
范圍拉伸是指把高程數(shù)據(jù)的范圍擴(kuò)大,普通的高程數(shù)據(jù)一般就在0到4000左右,教程提供的高程數(shù)據(jù)范圍是42到2283,那么為什么要拉伸?有以下兩個重要原因:
適配 Blender;如果以42到2283這樣的范圍導(dǎo)入 Blender,最終的成果建模是非常平坦,就像一張白紙,就像下面這樣,看的見嘛?快瞅瞅:
保留細(xì)節(jié);一般來說,高程數(shù)據(jù)的像素數(shù)據(jù)類型是浮點(diǎn)型,是小數(shù)形式,而 Blender 支持整數(shù),所以需要轉(zhuǎn)換。如果不拉伸直接轉(zhuǎn)換,小數(shù)會被四舍五入成整數(shù),數(shù)據(jù)丟失,反映到模型上就是細(xì)節(jié)丟失、沒有連續(xù)性。
由于這兩個原因,所以我們必須先對高程數(shù)據(jù)進(jìn)行拉伸。
那么具體拉伸到多大呢?Daniel Huffman 大神提供了答案 ?? :
( 像 素 值 最 低 值 ) ( 最 高 值 最 低 值 ) ( 像 素 值 ? 最 低 值 ) ÷ ( 最 高 值 ? 最 低 值 ) ? 65535
工具位置
ArcGIS 中使用柵格計算器,工具欄中依次打開 Spatial Analyst 工具-地圖代數(shù),最后打開柵格計算器工具執(zhí)行柵格拉伸操作。
然后輸入以下計算表達(dá)式:
( " m o u n t a i n . t i f " ? F l o a t ( 42 ) ) ÷ ( F l o a t ( 2283 ) ? F l o a t ( 42 ) ) ? F l o a t ( 65535 )
你每一個輸入的整數(shù)最好使用 ArcGIS 提供的關(guān)鍵字 Float 括起來,否則輸出的數(shù)據(jù)就有可能自動四舍五入到整數(shù)位,最后導(dǎo)致的結(jié)果要么是0要么是65535(是否會四舍五入到整數(shù)取決于高程數(shù)據(jù)當(dāng)前的像素類型,不過保險起見,都統(tǒng)一加上 Float 吧)。
QGIS 使用 Raster Calculator。點(diǎn)擊主界面上方菜單欄中的 Raster-Raster Calculator。
然后輸入以下計算表達(dá)式:
( " m o u n t a i n @ 1 " ? 42 ) ÷ ( 2283 ? 42 ) ? 65535
Note:①這里沒有考慮高程數(shù)據(jù)范圍涉及到負(fù)數(shù)(海底)的情況。②可能會遇到高程數(shù)據(jù)中有空值 Nodata,請注意。
簡單理解,像素類型描述了圖像的最小儲存單元所使用的格式。
查看像素類型
在創(chuàng)建3D模型時,Blender 只能支持特定的像素類型,那就是16位無符號整型;所以現(xiàn)在要做的就是把像素類型裝換為6位無符號整型。
16位無符號整型,英文:16 unsigned int 或者 16 bit unsigned;無符號表示正數(shù),從0開始到216的整數(shù)。
從0到2的16次方正好有65536個數(shù)(包括0),那么最大數(shù)就是65535,這就是公式最后乘數(shù)字65535的原因。
工具位置
ArcGIS 可以使用復(fù)制柵格工具來修改像素類型:數(shù)據(jù)管理工具-柵格-柵格數(shù)據(jù)集-復(fù)制柵格;然后像素類型選擇:16_BIT_UNSIGNED
QGIS 可以使用 translate 工具:上方菜單欄依次點(diǎn)擊 Raster-conversion-translate;然后在 Output data type 中選擇 UInt16。
最后
本章節(jié)你可以了解到:
使用高程灰度圖柵格數(shù)據(jù)可以在 Blender 中創(chuàng)建3D地形模型;
高程數(shù)據(jù)的基本預(yù)處理操作(包括 ArcGIS 和 QGIS);
高程范圍拉伸的重要性和操作;
Blender 建模需要像素類型為16位無符號整型的柵格圖像。
好的,學(xué)完這章,距離下面的成果又近了一大步!
轉(zhuǎn)載自:GIS薈
版權(quán)歸原作者所有,如有侵權(quán)請告知刪除
如果親覺得我們的文章還不錯的話,那就請分享轉(zhuǎn)發(fā)一下吧!
地信論壇
bbs.3s001.com
微信ID: bbs3s001
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。