原文**:
ww的紋理,
dem資料,及
lod模型
以earth
為例
1.
地形資料:
預設瀏覽器紋理資料存放在
/cache/earth/images/nasa landsat imagery/nlt landsat7 (visible color)
jpg格式,
512*512
dds格式,
dtx3
壓縮,所佔空間會增大一倍多,但據說執行時可節約
0位元組的
檔案。國界資料存放在
cache/earth/boundaries/country political boundaries
,為png
的格式,更詳細的地界現在只有
us的:
cache/earth/boundaries/us state political boundaries
,均為512*512
畫素的png
轉為dds
格式2.
dem
資料存放在
cache/earth/srtm
3.
分層原理:
以地球360度經度和
180度緯度為標準,第一層以
36度劃分,如下圖:
共分為(360/36)*(180/36) = 50
層,第二層以
18度,第三層以
9度以次類推
這也是1.4
及1.4.1
版本lod
模型的基礎
—四叉樹
由於按平面展開層層劃分,所以在
ww裡用到乙個
row,col
的概念,類
mathengine
封裝了從行,列,到經,緯度值的轉換,這也是ww進行紋理貼圖的依據
劃分後的每個方格對應乙個1所說的512*512的,對應level的紋理,有了這些資訊,再加上高度值就可以實時渲染三維影象
4
.如何取得高度值:
在類terrainaccessor
和nltterrainaccessor
封裝了通過行列,或者經緯度值讀取
cache/earth/srtm
對應層次
bil檔案的高程資訊的函式
getelevationat
等直接返回該點的高度值。
5.lod
模型: 在
1.3.5
以前的版本,使用了
vorm
演算法的lod
模型(類
binary********tree
),地形資料儲存在二叉樹的資料結構中,1
.4和1.4.1
版本採用四叉樹的資料結構,參照
3的**,
level 0
把地球按
36度劃分成
50個區域,第
0層的每一塊**為四個子樹,
這一層為
level 1
層,
每個塊都有四個子樹,包括本身資訊,資料定義為:
public double west; // 四個方向的平面笛卡爾座標值
public double east;
public double north;
public double south;
public angle centerlatitude;
public angle centerlongitude;
public double latitudespan;
public double longitudespan;
public int level; // 層次 level
public int row; // 行,列
public int col;
// 子樹
protected quadtile northwestchild;
protected quadtile southwestchild;
protected quadtile northeastchild;
protected quadtile southeastchild;
每一塊對應當前
level
的乙個512*512
的紋理,每一塊的每條邊分為
40等份(這裡是固定不知為何),生成
41*41
或43*43
個頂點,再結合高度資訊實時繪製。
過渡處理:
如下圖level n+1
level n
級的效果
WorldWind學習 5 相機物件
首先檢視worldwindow的事件 onmouseup onmousemove handlekeydown,這幾個方法中多次呼叫this.drawargs.worldcamera的各種屬性實現了場景的控制,包括球的旋轉 場景的放大縮小,上下移動。1.接下來檢視camerabase類rotation...
WorldWind學習 5 相機物件
首先檢視worldwindow的事件 onmouseup onmousemove handlekeydown,這幾個方法中多次呼叫this.drawargs.worldcamera的各種屬性實現了場景的控制,包括球的旋轉 場景的放大縮小,上下移動。1.接下來檢視camerabase類rotation...
學習總結一
有乙個3 3方格,每個位置只能填寫1 9,不能重複填寫,要求 橫向相加 豎向相加 斜向相加的值相等。在想這道題的過程中,我一開始在想不通過隨機置換數字來通過做出這道題,我通過一維陣列來做這道題,我想的是一開始就擺好123456789這些數字,然後通過交換數字來找到目標陣列,我剛開始在想的時候沒想出這...