修改相機引數時不知怎麼回事修改引數又無效了,蠻奇怪了,最後問題解決了,記錄一下.
直接上**:
#pragma comment(lib, "osg.lib")
#pragma comment(lib, "osgdb.lib")
#pragma comment(lib, "osgviewer.lib")
#include "osgviewer/viewer"
#include "osgdb/readfile"
#include "osg/node"
#include "osg/shape"
#include "osg/geode"
#include "osg/shapedrawable"
int main()
return 1;
}
結果如圖:
上面的**顯示初始的相機引數是:
這個引數預設是看不到東西的,因為osg中預設的座標系是這個樣子的:
這樣,如果eye在原點,center在z軸負半軸的情況下是看不到東西,所以如果不自己手動設定引數是看不到的東西的。如下面的**將設定相機位置的**注釋掉:
#pragma comment(lib, "osg.lib")
#pragma comment(lib, "osgdb.lib")
#pragma comment(lib, "osgviewer.lib")
#include "osgviewer/viewer"
#include "osgdb/readfile"
#include "osg/node"
#include "osg/shape"
#include "osg/geode"
#include "osg/shapedrawable"
int main()
return 1;
}
在這種情況下的效果如下圖,什麼都看不到:
使用下面這一組測試資料後:
//修改相機引數
eye=osg::vec3d(-10.0,0.0,0.0);
center=osg::vec3d(0.0,0.0,0.0);
up=osg::vec3d(0.0,0.0,1.0);
即從x軸負半軸看去,看到的應該是飛機的正面,效果如下圖:
正常。在這種情況下場景中是沒有漫遊器的,也不存在預設的漫遊器這個說法,如果需要實現場景漫遊,自己加個漫遊器就可以了。
注意:如果直接使用:
viewer->run();
怎麼修改相機引數都是無效的,
即使加上
viewer->setcameramanipulator(null);
也是一樣,因為在
viewer->run();
這個函式裡會對場景中是否存在漫遊器進行判斷,如果沒有漫遊器,它會自己新增乙個trackballmanipulator漫遊器。
run函式的實現如下:
int viewer::run()
setreleasecontextatendofframehint(false);
return viewerbase::run();
}
很容易看出問題所在了。 osg設定相機引數,包括初始位置
嚴重注意!以下設定必須在viewer.realize 之後,否則不起作用!設定相機的位置,可以通過cameramanipulator 一般是osgga trackballmanipulator 設定,可以使用settransformation設定 設定相機的其他引數,viewmatrix,proje...
OSG中獲取任一時刻相機的位置
就是在有漫遊器的程式中獲取相機任一時刻的位置,有時使用漫遊器漫遊時需要將某一時刻相機的位置列印出來。基於這個目的,做的乙個demo,由於前面一篇文章理解清楚了相機和漫遊器的關係,這次寫 時輕鬆了很多。再次記錄一下,當使用run函式開啟 迴圈時,在run函式裡會對場景進行判斷,如果沒有漫遊器,那麼它就...
部分相機和相機鏡頭的引數
參考 一文詳解工業相機和鏡頭選取 相機lens引數 4 1.焦距 一般說的焦距分兩種 物理焦距和攝影焦距。乙個透鏡的物理焦距是固定的 一般說的調焦調整的是攝影焦距,即鏡頭到成像平面的距離,當物距發生變化時,為了仍能保證影象的清晰度,需要調整像距,即調焦。2.景深 相機在一段範圍內都可以認為是清晰成像...