防止攝像機穿透地面

2021-05-23 15:09:45 字數 1062 閱讀 1877

基於射線查詢的方式,實現攝像機和地形的碰撞檢測,防止攝像機穿透地面,這也是ogre demo中terrian例子中的方法。

首先定義 rayscenequery* rayscenequery = 0;

在createscene時候,建立場景查詢

framerenderingqueued事件中,進行射線查詢,設定攝像機位置

rayscenequery = mscenemgr->createrayquery(

ray(mcamera->getposition(), vector3::negative_unit_y));//光線的位置和方向,垂直向下

然後在bool framerenderingqueued(const frameevent& evt)

if( exampleframelistener::framerenderingqueued(evt) == false )

return false;

// clamp to terrain

static ray updateray;

updateray.setorigin(mcamera->getposition());

updateray.setdirection(vector3::negative_unit_y);

rayscenequery->setray(updateray);

rayscenequeryresult& qryresult = rayscenequery->execute();

rayscenequeryresult::iterator i = qryresult.begin();

if (i != qryresult.end() && i->worldfragment)//把攝像機定在地形個單位高的地方。

mcamera->setposition(mcamera->getposition().x,

i->worldfragment->singleintersection.y + 10,

mcamera->getposition().z);

return true;

這樣就把攝像機設在離地形高10個單位的地方。

攝像機標定

利用攝像機所拍攝到的影象來還原空間中的物體。在這裡,不妨假設攝像機所拍攝到的影象與三維空間中的物體之間存在以下一種簡單的線性關係 像 m 物 這裡,矩陣m可以看成是攝像機成像的幾何模型。m中的引數就是攝像機引數。通常,這些引數是要通過實驗與計算來得到的。這個求解引數的過程就稱為攝像機標定。中文名 攝...

監視攝像機

時間限制 1 sec 記憶體限制 32 mb 題目描述 乙個著名的倉庫管理公司 erkoi請你的公司為其安裝一套閉路監視系統。由於 serkoi財力有限,每個房間只能安裝一台攝像機作監視用,不過它的鏡頭可以向任意方向旋轉。房間用乙個封閉的多邊形表示,一條邊表示一面牆。輸入 輸入檔案包含乙個或多個房間...

攝像機標定

攝像機鏡頭的畸變 由於攝像機光學系統並不是精確地按理想化的小孔成像原理工作,存在有透鏡畸 變,物體點在攝像機成像面上實際所成的像與理想成像之間存在有光學畸變誤差。主要的畸變誤差分為三類 徑向畸變 偏心畸變和薄稜鏡畸變。第一類只產生徑向 位置的偏差,後兩類則既產生徑向偏差,又產生切向偏差,下圖2 為無...