原文參考:http://docs.osgearth.org/en/latest/user/features.html
自己翻譯的,本人英文水平有限,有問題看原鏈接,原文
20170802重置修改部分翻譯(本人也在不斷學習啦O(∩_∩)O~)
注:OE就是osgEarth
了解Features
Features是矢量的幾何圖形
不像(光柵化的)地圖與高程數據,他不是離散的像素位圖。
osgEarth可以在任何級別詳細的顯示Features。
一個Features由三個部分組成
1.矢量的幾何圖形(點,線,面和集合)
2.屬性(名稱name對應鍵值項value的組合)
3.空間參考(描述幾何坐標)
創建一個Feature圖層
有兩種方式:
1.作為圖像層柵格化顯示
2.作為模型層嵌入
1.柵格化:
光柵feature是最簡單的:
OE將矢量信息“畫”入一張地圖瓦片,將這張新的底圖瓦片代替原來的地圖瓦片(僅圖像層)
OE有一個軟渲染驅動:agglite驅動(driver)
下面是一個顯示ESRI Shapefile點陣圖片層的例子:
<image name="my layer" driver="agglite"> <features name="states" driver="ogr"> <url>states.shp</url> </features> <styles> <style type="text/css"> states { stroke: #ffff00; stroke-width: 2.0; } </style> </styles> </image>
2.嵌入方式
將矢量數據經過編譯變成支持OSG繪制的幾何圖形(點,線,三角面,或者替換模型)
主要的feature嵌入插件是:feature_geom驅動(driver);這驅動在feature的樣例演示使用中是非常常見的
以下一個模型層,它顯示一個ESRI Shapefile一系列黃線,用OSG幾何線渲染:
<model name="my layer" driver="feature_geom"> <features name="states" driver="ogr"> <url>states.shp</url> </features> <styles> <style type="text/css"> states { stroke: #ffff00; stroke-width: 2.0; } </style> </styles> </model>
feature層的組合
就像之前看到的一樣,這里有幾個必要的feature層組件
“features”塊 描述了實際功能源。即,osgEarth在哪找到輸入數據。
“styles”塊 描述如何osgEarth渲染feature。即,在場景中出現。我們叫他樣式表或者象征,
樣式表的構成可以從根本上改變feature數據的外觀。
這兩個元素是必需的
樣式 styling
在earth文件中,“styles”塊如下
<styles> <style type="text/css"> buildings { altitude-clamping: terrain; extrusion-height: 15; extrusion-flatten: true; fill: #ff7f2f; } </style> </styles>
這個樣式表一般在渲染feature層的“model”塊中,和“feature”塊配合
(“feature”塊定義真正包含的數據源)
“style”元素是CSS樣式的(不了解的自己去查CSS)
這個東西告訴幾何引擎做這幾件事:
將feature幾何圖形固定到地形高層數據上
擠壓形狀地形高度15米以上;
平的頂部擠壓形狀;
形狀顏色橙色。
osgEarth需要每個輸入特性和主題樣式的過程。輸出將完全依靠在樣式表中符號的組合。這包括:(太累了,時間太緊,下面的先機器翻譯了)
填充和中風——無論是畫線或多邊形的數據
擠壓,擠壓二維幾何三維形狀
替換,替換(如幾何與外部的3 d模型。、樹)或圖標
高度——幾何與地圖的地形相互作用的方式
文本-控制標簽
呈現——照明應用,混合和深度測試
樣式表
每個功能層需要一個樣式表。樣式表作為一個<風格>塊出現在地球的文件。這里有一個例子:
<model name="test" driver="feature_geom"> <features driver="ogr"> <geometry>POLYGON( (0 0, 1 0, 1 1, 0 1) )</geometry> <profile>global-geodetic</profile> </features> <styles> <style type="text/css"> default { fill: #ff7f009f; stroke: #ffffff; stroke-width: 2.0; altitude-clamping: terrain; altitude-technique: drape; render-lighting: false; } </style> </styles> </model>
樣式表包含一個稱為默認風格。由於只有一個風格,osgEarth將應用到所有的輸入特性。(應用不同的風格不同的特性,使用選擇器-下面的更多信息。)
符號的風格包含一組幾何描述osgEarth應該如何呈現什么特點。在這種情況下:
fill: | Draw a filled polygon in the specified HTML-style color (orange in this case). |
---|---|
stroke: | Outline the polygon in white. |
stroke-width: | Draw the outline 2 pixels wide. |
altitude-clamping: | |
Clamp the polygon to the terrain. | |
altitude-technique: | |
Use a “draping” technique to clamp the polygon (projective texturing). | |
render-lighting: | |
Disable OpenGL lighting on the polygon. |
這只是一個小樣本可用的象征。對於一個完整的清單,請參閱:符號學參考。
地形追蹤
它是相當普遍的特性與地形相互作用。要求包括:
街道上,遵循地形的輪廓
樹種植在地上
主題映射,如着色基於人口的一個國家的地區
osgEarth提供多種地形的方法后,因為沒有一個最好的方法是為每個情況。
Map Clamping地圖夾緊(地圖褶皺?地圖覆蓋?地圖緊貼?)
地圖夾緊是最簡單的方法。當編譯特性顯示,osgEarth將樣本的仰角層地圖,發現地形的高度,並將之運用於由此產生的幾何特性。它將測試每個點在幾何。
地圖夾緊導致高質量渲染;權衡性能:
它可以減緩抽樣中的高程數據地圖,根據你選擇的分辨率。為大量特性,它可以是cpu密集型和耗時。
抽樣是准確的,和做的每一點的幾何學。你可以選擇樣本的thecentroid每個特性來提高編譯速度。
根據幾何分辨率的特性,您可能需要鑲嵌細工的數據來實現更好的質量。
渲染質量好與其他方法相比。
你可以激活地圖夾在你的樣式表如下所示:
altitude-clamping: terrain; // terrain-following on
altitude-technique: map; // clamp features to the map data
altitude-resolution: 0.005; // [optional] resolution of map data to clamp to
Draping覆合
覆蓋是覆蓋的過程編譯幾何地形的皮膚,就像“覆蓋”一條毯子在一個不均勻的表面。osgEarth這是渲染紋理的特征(RTT)然后投射紋理在地形
draping都有其優點和缺點:
draping將符合功能完美的地形;沒有擔心決議或鑲嵌。
你可能會參差不齊的artificats當呈現直線或多邊形邊緣。投影紋理大小有限,它必須覆蓋面積大,越低分辨率圖像的投影。在實踐中這意味着披蓋多邊形比直線更有用。
意想不到的混合構件可能由於覆蓋許多透明的幾何圖形在彼此。
GPU Clamping
GPU夾緊后實現近似地形使用GPU着色器。它使用一個兩階段技術:首先它使用深度域采樣夾每個頂點到地形的皮膚在一個頂點着色器;其次它depth-offsetting算法適用於緩解z-fighting片段着色器。
Rendering Large Datasets呈現大型數據集
特性數據加載到osgEarth最簡單的方法是這樣的:
<model name="shapes"> <features name="data" driver="ogr"> <url>data.shp</url> </features> <styles> data { fill: #ffff00; } </styles> </model>
我們只是shapefile加載每個特性和顏色的黃色。
在某種程度上來說,這就做得夠好了,這時候osgEarth(用OSG)成為充斥着太多的幾何學。即使osgEarth的幾何優化編譯器使用一個足夠大的數據集可以排氣系統資源。
解決方案是瓷磚和分頁功能。這里是如何配置它。
Feature display layouts功能顯示布局
功能顯示布局激活特性數據的分頁和瓷磚。讓我們修改前面的示例:
<model name="shapes"> <features name="data" driver="ogr"> <url>data.shp</url> </features> <layout> <tile_size>250000</tile_size> <level name="data" max_range="100000"/> </layout> <styles> data { fill: #ffff00; } </styles> </model>
Cropping features裁剪功能
默認情況下,如果一個功能相交瓷磚,它將包括即使外面擴展區段的瓷磚。這是用於擠壓建築之類的東西,它沒有意義去砍他們適合完全的瓷磚,因為你不想看到半頁。一般建築也小,所以外的距離,他們將延長瓷磚相對較小。
例如道路或國家的邊界,是線性特性,它可能更有意義作物完全符合瓷磚。視覺上一行看起來不那麽糟糕如果你看到部分頁面。您可以啟用功能種植布局的布局將crop_features屬性設置為true。
<model name="roads" driver="feature_geom"> <features name="roads" driver="ogr" build_spatial_index="true"> <url>roads.shp</url> </features> <layout crop_features="true" tile_size="1000"> <level max_range="5000"/> </layout> <styles> <style type="text/css"> roads { stroke: #ffff7f7f; } </style> </styles> </model>
層級Levels
每一層描述的詳細程度。這是一個相機范圍(min_range和max_range)之間的瓷磚在這種級別的細節呈現。但每個瓷磚有多大?這是計算基於thetile范圍的因素。