OSG載入傾斜攝影資料

2021-10-05 15:54:34 字數 2917 閱讀 8382

3. 結果

contextcapture(smart3d)生成的傾斜攝影模型資料一般都形如如下組織結構:

在data目錄下包含了分塊的瓦片資料,每個瓦片都是乙個lod資料夾。osg能夠直接讀取osgb格式,理論上只需要依次載入每個lod的金字塔層級最高的osgb,整個傾斜攝影模型資料就載入進來了。不過有點麻煩的是這類資料缺乏乙個整體載入的入口,如果每次載入都遍歷整個資料夾載入的話,會影響載入的效率。所以一般的資料檢視軟體都會為其增加乙個索引。

這裡就給傾斜攝影資料新增乙個osgb格式的索引檔案,生成後就可以通過osg直接載入整個傾斜攝影模型資料。

具體的實現**如下:

#include

#include

#include

#include

#include

#include

using

namespace std;

//查詢目錄下所有的資料夾

static

void

finddir

(string dir, vector

& subdirs)

if(fileinfo.

isdir()

)}}//得到檔案路徑的檔名 c:\\b\\a(.txt) -> a

static std::string dirorpathgetname

(std::string filepath)

size_t p = filepath.

find_last_of

('.');

if(p != string::npos && p > m)

//沒有點號或者

std::string dirpath = filepath;

dirpath.

erase(0

, m +1)

;return dirpath;

}void

createobliqueindexes

(std::string filedir)

std::string outputlodfile = filedir +

"/data.osgb"

; osgdb::

writenodefile

(*group, outputlodfile);}

intmain

(int argc,

char

*ar**)

如果直接讀取每一塊的lod然後通過osgdb::writenodefile寫入到乙個osgb檔案,這個檔案就會儲存所有塊的lod第一層資訊。這樣在第二冊載入的時候還是會比較慢,所以這裡就建立了乙個空的節點,形成了索引所有lod塊的資料結構。對於每一塊資料,新建兩層lod,第一層為自身的空白節點,第二層為分塊lod的第一層資料:

osg::ref_ptr<:node> node = osgdb::

readnodefile

(path)

;osg::ref_ptr<:pagedlod> lod =

new osg::

pagedlod()

;auto bs = node-

>

getbound()

;auto c = bs.

center()

;auto r = bs.

radius()

;lod-

>

setcenter

(c);

lod-

>

setradius

(r);

lod-

>

setrangemode

(osg::lod::rangemode::pixel_size_on_screen)

;osg::ref_ptr<:geode> geode =

new osg::geode;

geode-

>

getorcreatestateset()

;lod-

>

addchild

(geode.

get())

;std::string relativefilepath =

"./data/"

+ name +

"/"+ name +

".osgb"

;//相對路徑

lod-

>

setfilename(0

,"");

lod-

>

setfilename(1

, relativefilepath)

;lod-

>

setrange(0

,0,1.0);

//第一層不可見

lod-

>

setrange(1

,1.0

, flt_max)

;lod-

>

setdatabasepath(""

);group-

>

addchild

(lod)

;

lod的center和radius都非常重要,需要預先設定好;setrangemode設定了細節層級排程的模式,一般都為pixel_size_on_screen;setfilename設定了每一層的資料路徑,setrange確定了當前層級的範圍。由於這個lod只是個索引檔案,所以會設定第二層為極大的可見範圍值。

可以像載入普通osgb檔案一樣載入這個索引檔案,通過os**iewer載入的效果如下:

Unity載入傾斜攝影模型 雷射點雲,開源

重大更新 現已支援webgl 業餘時間嘗試了下用unity載入傾斜攝影模型 雷射點雲,目前支援bentley contextcapture生成的3mx格式 原始碼見 本專案只進行了unity載入傾斜攝影模型 雷射點雲的原理性驗證,還有很大優化空間,fps不是很穩定 本人進行此項工作的目的是希望實現一...

對OSGB傾斜攝影資料進行範圍裁剪

在osgb生產完成後,可能想要裁剪模型,只要其中的一部分模型資料,或者把場景邊緣不太好的地方裁剪掉,osgblab能夠完美的對osgb傾斜攝影資料進行裁剪。osgblab支援的裁剪多邊形檔案有以下三種 其中txt文字中,每一行表示乙個多邊形的頂點,以英文逗號分割,如下所示 1233,2444 120...

傾斜攝影行業背景知識介紹

今天跟大家聊一下傾斜攝影的行業背景知識。概念和原理就不講了,聽得太多了。首先我們來聊一下傾斜攝影的行業發展,大概了解一下,出去跑客戶的時候也是談資嘛。整個行業的發展差不多有十來年的發展歷史吧 國外代表性的有蘋果公司收購c3公司採用的自動建模技術,天寶公司的aos系統 徠卡推出rcd30,再到bent...