為OSG新增乙個數字球 非OSGEarth方式

2021-07-03 23:34:52 字數 1479 閱讀 9785

中,在空曠的世界中只新增了cow,顯得空曠,由於最近在做osgearth相關的開發,於是想著在osg中怎麼來新增乙個數字球呢?

於是,來研究了下。發現,比我想象中的簡單很多。

思路是:

-在osg中新增乙個球,這個用osg::sphere實現

-給新添的球設定乙個半徑為地球的半徑,具體的就是wgs84座標的參考半徑

-給球新增乙個紋理,當然是全球影像了

-給球新增經緯度座標系統,可以利用osg::coordinatesystemnode實現

-給球新增操作器,目前的osg中並沒有像osgearth那樣的earth操作器,只能拿terrainmanipulator來用了。若想要osgearth中那樣操作器的效果,只能自己寫乙個了。

下面的**:

// 精細度設定

osg::tessellationhints

* hints =

new osg::tessellationhints;

hints->setdetailratio(5.0f);

// 新建半徑為wgs84參考半徑的球

osg::shapedrawable

* sd =

new osg::shapedrawable(

new osg::sphere(osg::vec3(0.0, 0.0, 0.0), osg::wgs_84_radius_polar), hints);

osg::geode

* geode =

new osg::geode;

geode->adddrawable(sd);

// 新增全球的紋理,的osg資源data中的

// 經緯度座標處理

osg::coordinatesystemnode

* csn =

new osg::coordinatesystemnode;

csn->setellipsoidmodel(new osg::ellipsoidmodel());

csn->addchild(geode);

m_proot->addchild(csn);

this->getcamera()->setnea***rratio(0.00001f);

// 操作器,不是很好用的

this->setcameramanipulator(new osgga::terrainmanipulator);

OSG 繪製乙個圓

osg繪製乙個圓,採用的是多個線段收尾連線在一起的辦法。檢視原始碼 void createclock 得到半徑為50的鐘錶的314個點,這些點形成線座標表盤 for double i 0.0 i 6.28 i 0.02 設定頂點 clockgeometry setvertexarray allpoi...

osg建立乙個幾何體類

在osg中,需要加入場景中的圖形,都會加入場景圖形類gruop中,來管理。其中幾何體類為 geode geode類中,包含了渲染用的幾何資料,包括 drawable drawable 類是用於儲存幾何資料資訊的基類,geode 維護了 乙個 drawable 的列表。drawable 是純虛類,無法...

編寫乙個最簡單的osg遇到的坑

編寫乙個最簡單的osg遇到的坑 osg 的環境搭建好後,編寫乙個簡單的程式,如下 include include int main int argc,char ar 在工程的屬性面板上設定好,標頭檔案的路徑,鏈結庫和鏈結庫路徑。執行編譯,等待編譯結果,但過了一會兒懵逼了,出現了1144個錯誤,不明所...