簡單的 Kinect / OpenNI 虛擬台灣飛行

這篇算是一段簡單的成果展示影片了~

YouTube 版

基本上,就是簡單地透過 OpenNI,去抓到人體的骨架,並以此來進行虛擬飛行。

目前的設計概念是類似握汽車方向盤的方法。是雙手平舉,就開始前進,旋轉這個虛擬方向盤、就可以左右旋轉;整個往上抬、往下移,就可以拉高或降低視角。

而為了怕手舉太久會痠、只要持續前進數秒後,就會持續前進,就算手放下來也沒差。

這算是目前一個簡單的成果吧~

12 thoughts on “簡單的 Kinect / OpenNI 虛擬台灣飛行”

  1. 请问这个原理就是直接捕获两手的坐标,然后通过坐标差转换到漫游器相机的俯仰,偏航角之类的吗?那么坐标抖动的问题是如何抑制的?可否能稍微详细的说一下思路?谢谢。

  2. to 菜菜

    Heresy 這邊的作法,主要是會去抓手部的位置、然後計算手和身體、以及兩隻手的相對位置,以其距離、角度來作處理。
    至於抖動的問題,由於會把變化過小的狀況直接忽略掉,所以問題不大。
    當然,另一個方法,就是自己針對計算出來的結果作平滑化處理,這樣也可以有效減少因為感應器產生的誤差而造成的跳動。

  3. 那么这个是需要自己在定义手势动作吗?还是仅仅通过修改回调函数,进行坐标运算再映射到相机上?可否分享一下部分代码呢?我现在也在做漫游器,是在一个小区模型里漫游。感觉您这个方向盘的思路非常好。

  4. to 菜菜

    Heresy 這邊沒有定義手勢,而是根據人體骨架的角度、相對位置來做判斷的。
    很抱歉,目前這部分的原始碼暫時沒有打算釋出。

  5. 谢谢您的回答,那么您可否简单讲述一下,如何实现手放下來也能继续前进这个功能呢?每次相当于要把两手的坐标和肩膀的坐标进行比对做差吗?然后如果超出了范围后就不做识别?这部分是写在哪个回调相应的呢?

  6. to 菜菜

    這些都只是看你要怎麼實作而已,方法很多種,也沒有一定的方法。
    以要持續前進來說,基本上 Heresy 這邊的作法是當手舉起的時間到一定程度後,就會修改一個 flag,當這個 flag 被啟動的時候,放下手還會繼續前進,如此而已。

    至於要怎麼比對,實際上也有很多不同的比對方式。
    Heresy 這邊是用 OpenGL glut,這些檢查基本上都是寫在 idle function 裡。

  7. 谢谢回复。现在在实现方向盘这个功能的时候,遇到了一些思路上的问题,希望您简单地指点一下。每次是通过不断的计算变化的x和y的值,再通过atan函数算出角度,映射到摄像机的偏航角上的吗?

  8. to 菜菜

    Heresy 是直接在真實世界座標系統上計算,而非只計算 x / y。

  9. heresy大大,我做了简单查看一个谷歌地球的体感应用,其中的放大和缩小是通过身体的前倾和后仰实现的,但是觉得不人性化,问一下如何通过双手的合拢和分开来实现放大和缩小,怎样识别出这两个动作?拜谢了~

  10. to chao

    要這樣設計的困難點在於怎麼判斷雙手現在是否正在進行操作。
    和觸控螢幕可以明確地根據手是否有碰到螢幕不同,體感操作很難做這個判斷。

發佈回覆給「菜菜」的留言 取消回覆

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