OpenNI Application: Viewer Tracking Display

影片是透過Xtion Pro進行Head Tracking的簡單展示.

現在透過Kinnect 或是Xtion Pro這類體感裝置,加上OpenNI的人體辨識功能,可以很容易的取得人眼的位置,並且將資訊回饋至3D的程式裡進行計算.不過一般的3D程式是假設人眼在螢幕正中間垂直看向螢幕,並且以此來設定投影矩陣. 進行Head tracking的時候,人眼位置不在正中間,因此投影矩陣的計算方式也得變化,下面是計算方式的推導過程.(OpenNI取得頭部位置的方法請參照人體骨架這篇文章)

首先假設螢幕的三個角落為Pa,Pb,Pc,

而人眼的位置為Pe.

透過Pa,Pb,Pc可以計算出螢幕的座標系統的單位向量Vr, Vu Vn,

,

與座標轉換矩陣 M.

而人眼Pe到螢幕的位置如圖也可以得到三個向量Va,Vb,Vc,

並且計算出人眼到螢幕的距離 d.

接著透過螢幕大小與 Near Plane距離等比例的關係可以計算出l,r,b,t ,

結合Near plane與Far plane距離的值便可以透過OpenGL的glFrustum設定出投影矩陣P.

不過螢幕與視線沒有正交時,還需要將螢幕的座標系統轉換成世界座標系統M-1,

並且加上人眼的位移矩陣 T,

所以最後投影矩陣的計算方式為:

參考資料:

Generalized Perspective Projection, Robert Kooima. August 2008, revised June 2009.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。