旋轉的攝像頭

2021-04-29 17:36:48 字數 2284 閱讀 7226

這幾天熟悉了一下entity,scenemanager,scenenode。自己可以簡單的實現了站立的robot和ninja,總感覺靜態的場景不好玩,想做一下動態的場景,由於本人目前是初學者,所以也就只能做做關鍵幀動畫,骨骼動畫就留在後面實現吧,hoho~

定義乙個10秒種的動畫,這個動畫包含乙個動畫軌跡(上下翻轉)。讓這個動畫應用到當前攝像機上去,程式執行時,我(第一人稱攝像機)應該在上下翻轉。

在createscene函式裡做初始化工作。

首先我們考慮怎樣可以把動畫應用到當前攝像機上。因為乙個動畫可以應用到乙個節點上,所以可以創   建乙個節點並將當前攝像機attach到這個節點上去,**如下:

scenenode* camnode = mscenemgr->getrootscenenode()->createchild();

camnode->attachobject(mcamera);

下面定義動畫、動畫軌跡以及關鍵幀:

// 定義動畫,指定動畫的名稱及長度(這裡為10秒)

animation* anim = mscenemgr->createanimation("cameratrack", 10);

// 指定動畫關鍵幀之間的插值方式(包括線性插值和樣條插值)

anim->setinterpolationmode(animation::im_spline);

// 定義動畫的乙個動畫軌跡,並指定這個軌跡是作用到camnode節點上的

animationtrack* track = anim->createtrack(0, camnode);

// 定義動畫軌跡包含的關鍵幀,下面定義了四個關鍵幀,加上起始幀

// 五個關健幀形成了乙個翻轉的動畫。

keyframe* key = track->createkeyframe(0); // startposition

key = track->createkeyframe(2.5);

key->settranslate(vector3(500,500,-1000));

key = track->createkeyframe(5);

key->settranslate(vector3(-1500,1000,-600));

key = track->createkeyframe(7.5);

key->settranslate(vector3(0,-100,0));

key = track->createkeyframe(10);

key->settranslate(vector3(0,0,0));             

然後定義animationstate類的物件,它和剛才定義的動畫類相對應。設定動畫的狀態為啟用:

manimstate = mscenemgr->createanimationstate("cameratrack");

manimstate->setenabled(true);     // 啟用該動畫

到此,初始化工作就做完了.

最後,要想使動畫動起來,我們需要過載exampleframelisener類的framestarted函式,並呼叫下面的函式,根據傳入的時間來設定動畫的狀態:    manimstate->addtime(evt.timesincelastframe);

以下是進行過載exampleframelisener類的framestarted函式的操作。

#include "exampleframelistener.h"

animationstate *manimstate;

class projectivedecallistener : public exampleframelistener

{public:

projectivedecallistener(renderwindow* win, camera* cam)

: exampleframelistener(win, cam)

{~projectivedecallistener()

{bool framestarted(const frameevent& evt)

{manimstate->addtime(evt.timesincelastframe);

return exampleframelistener::framestarted(evt);  //沒有這句的話,滑鼠和鍵盤將無法控制

這裡需要對上面這個函式進行詳細的講解:

因為root類是要每幀更新的,他也了解framelisteners。我們首先要建立projectivedecallistener的例項,然後把他註冊到root物件中。

這樣我們就可以看到旋轉攝像頭裡所看到的場景影象了。

攝像頭程式設計

這是乙個關於設想頭的類 using system using system.runtime.interopservices namespace webcam structlayout layoutkind.sequential public struct bitmapinfoheader struc...

攝像頭記錄

1.參考 camera.parameters parameters camera.getparameters listsizelist parameters.getsupportedpreviewsizes 如果sizelist只有乙個我們也沒有必要做什麼了,因為就他乙個別無選擇 if sizeli...

攝像頭說明

攝像頭說明 2009 11 04 11 13 攝像元件 1 4 sharp ccd 同步方式 內同步電視系統 pal制式 鏡頭安裝 c或cs系統調整 象素512 h 582 v 自動白平衡 自動掃瞄系統 2 1隔行掃瞄 映象功能 180 倒後鏡 掃瞄頻率 水平 15625khz 垂直 50hz 增益...