OSG中相機引數的更改

2021-06-22 14:56:27 字數 2082 閱讀 7503

修改相機引數時不知怎麼回事修改引數又無效了,蠻奇怪了,最後問題解決了,記錄一下.

直接上**:

#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.景深 相機在一段範圍內都可以認為是清晰成像...