中,在空曠的世界中只新增了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個錯誤,不明所...