這篇算是一段簡單的成果展示影片了~
視訊播放器
00:00
00:00
基本上,就是簡單地透過 OpenNI,去抓到人體的骨架,並以此來進行虛擬飛行。
目前的設計概念是類似握汽車方向盤的方法。是雙手平舉,就開始前進,旋轉這個虛擬方向盤、就可以左右旋轉;整個往上抬、往下移,就可以拉高或降低視角。
而為了怕手舉太久會痠、只要持續前進數秒後,就會持續前進,就算手放下來也沒差。
這算是目前一個簡單的成果吧~
這篇算是一段簡單的成果展示影片了~
基本上,就是簡單地透過 OpenNI,去抓到人體的骨架,並以此來進行虛擬飛行。
目前的設計概念是類似握汽車方向盤的方法。是雙手平舉,就開始前進,旋轉這個虛擬方向盤、就可以左右旋轉;整個往上抬、往下移,就可以拉高或降低視角。
而為了怕手舉太久會痠、只要持續前進數秒後,就會持續前進,就算手放下來也沒差。
這算是目前一個簡單的成果吧~
看不见视频啊?:o
to 小馬
影片是放在 YouTube 上的,一般瀏覽器應該都看的到才對。
或者請直接連到 YouTube 頁面試試看
http://www.youtube.com/watch?v=2UNH4eGrqaA
请问这个原理就是直接捕获两手的坐标,然后通过坐标差转换到漫游器相机的俯仰,偏航角之类的吗?那么坐标抖动的问题是如何抑制的?可否能稍微详细的说一下思路?谢谢。
to 菜菜
Heresy 這邊的作法,主要是會去抓手部的位置、然後計算手和身體、以及兩隻手的相對位置,以其距離、角度來作處理。
至於抖動的問題,由於會把變化過小的狀況直接忽略掉,所以問題不大。
當然,另一個方法,就是自己針對計算出來的結果作平滑化處理,這樣也可以有效減少因為感應器產生的誤差而造成的跳動。
那么这个是需要自己在定义手势动作吗?还是仅仅通过修改回调函数,进行坐标运算再映射到相机上?可否分享一下部分代码呢?我现在也在做漫游器,是在一个小区模型里漫游。感觉您这个方向盘的思路非常好。
to 菜菜
Heresy 這邊沒有定義手勢,而是根據人體骨架的角度、相對位置來做判斷的。
很抱歉,目前這部分的原始碼暫時沒有打算釋出。
谢谢您的回答,那么您可否简单讲述一下,如何实现手放下來也能继续前进这个功能呢?每次相当于要把两手的坐标和肩膀的坐标进行比对做差吗?然后如果超出了范围后就不做识别?这部分是写在哪个回调相应的呢?
to 菜菜
這些都只是看你要怎麼實作而已,方法很多種,也沒有一定的方法。
以要持續前進來說,基本上 Heresy 這邊的作法是當手舉起的時間到一定程度後,就會修改一個 flag,當這個 flag 被啟動的時候,放下手還會繼續前進,如此而已。
至於要怎麼比對,實際上也有很多不同的比對方式。
Heresy 這邊是用 OpenGL glut,這些檢查基本上都是寫在 idle function 裡。
谢谢回复。现在在实现方向盘这个功能的时候,遇到了一些思路上的问题,希望您简单地指点一下。每次是通过不断的计算变化的x和y的值,再通过atan函数算出角度,映射到摄像机的偏航角上的吗?
to 菜菜
Heresy 是直接在真實世界座標系統上計算,而非只計算 x / y。
heresy大大,我做了简单查看一个谷歌地球的体感应用,其中的放大和缩小是通过身体的前倾和后仰实现的,但是觉得不人性化,问一下如何通过双手的合拢和分开来实现放大和缩小,怎样识别出这两个动作?拜谢了~
to chao
要這樣設計的困難點在於怎麼判斷雙手現在是否正在進行操作。
和觸控螢幕可以明確地根據手是否有碰到螢幕不同,體感操作很難做這個判斷。