osg讀取檔案的原理(外掛程式工作機制)

2021-07-10 20:26:43 字數 1799 閱讀 1948

我們可以直接使用osgdb::readnodefile("cow.osg")來讀取不同格式的模型,osgdb庫允許使用者程式載入、使用和寫入3d資料庫,它採用外掛程式管理的架構,可以支援大量常見的2d圖形和3d圖形檔案格式。osgdb負責維護外掛程式的資訊登錄檔,並負責檢查將要被載入的osg外掛程式介面的合法性。由於大型3d地形資料通常是多段資料塊的組合體。因此,應用程式從檔案中讀取各部分資料庫資訊時,需要在不干擾當前渲染的前提下以後臺執行緒的方式進行,osgdb::databaseparger提供了這樣的功能。

外掛程式的不足之處在於,其設計過程中只能遵循固定的格式和工作模式進行程式設計,它的一切行為都無法超出主系統所提供的公共介面規範。

1、自定義檔案外掛程式:

自定義檔案外掛程式主要是自定義乙個外掛程式讀寫類,繼承osgdb::readerwriter類,然後根據需求重寫如readnode等函式方法即可,如下,這些函式的返回值均為列舉變數。 

virtual readresult readnode(std::istream& /*fin*/,const options* =null) const

在建立外掛程式讀寫類時需要注意:

register_osgplugin是乙個巨集,在registry.h中如下定義

#define register_osgplugin(ext, classname) \

extern "c" void osgdb_##ext(void) {} \

static osgdb::registerreaderwriterproxyg_proxy_##classname;

這裡說一下"#" "##"的含義:"#"將後面跟的變數由引號包含,如#value會解析成"value"。 "##"將前後兩個值連線,去掉空格,如a##b會解析成ab。

void registry::addfileextensionalias(const std::string mapext, const std::string toext)

2、外掛程式的工作機制osg外掛程式是一組動態鏈結庫,其中實現了osgdb標頭檔案readerwriter定義的介面。osg不可能查詢並載入所有的外掛程式以獲取它們支援的檔案格式,這樣,在程式啟動時將會是乙個很大的開銷。因此,osg使用職責鏈(chain of responsibility)的設計模式,以載入盡量少的外掛程式。當使用者程式嘗試使用osgdb讀取或寫入檔案時,osg將按照如下步驟來查詢合適的外掛程式。

主要的實現的**是在readerwriter::readresult registry::read(const readfunctor& readfunctor)函式中

readerwriter::readresult registry::read(const readfunctor& readfunctor)

// now look for a plug-in to load the file.

//根據檔名稱建立新的動態庫名稱,然後載入動態庫,增加_rwlist物件個數

std::string libraryname = createlibrarynameforfile(readfunctor._filename);

if (loadlibrary(libraryname)!=not_loaded)}}

接下去需要研究createlibrarynameforfile()。

攝像機的工作原理

光學系統的主要部件是光學鏡頭,它由透鏡系統組合而成。這個透鏡系統包含著許多片凸凹不同的透鏡,其中凸透鏡的中比邊緣厚,因而經透鏡邊緣部分的光線比 部分的光線會發生更多的折射。當被攝物件經過光學系統透鏡的折射,在光電轉換系統的攝像管或固體攝像器件的成像面上形成 焦點 光電轉換系統中的光敏原件會把 焦點 ...

PC機串列埠通訊的工作原理

pc機串列埠通訊的工作原理是什麼 串列埠是計算機上一種非常通用裝置通訊的協議 不要與通用序列匯流排universal serial bus或者usb混淆 大多數計算機包含兩個基於rs232的串列埠。串列埠同時也是儀器儀表裝置通用的通訊協議 很多gpib相容的裝置也帶有rs 232口。同時,串列埠通訊...

振動壓路機的工作原理

碾壓輪沿被壓實表面做往復滾動,同時利用偏心質量m旋轉產生的激振力 以一定的頻率 振幅振動 使被壓層同時受到碾壓輪的靜壓力和振動力的綜合作用,給材料施加短時間的連續脈動衝擊。雙輪振動壓路機的壓實功能是單輪振動壓路機的兩倍。兩輪同時振動的串聯式振動壓路機與只有單輪振動的串聯式的振動壓路機相比.為達到同一...