簡單的 Kinect / OpenNI 虛擬台灣飛行 2012-01-172012-01-17| HeresyHeresy| 12 Comments| 13:55 Categories: 技術研究 這篇算是一段簡單的成果展示影片了~ YouTube 版 /wp-content/uploads/2021/12/13.mp4 基本上,就是簡單地透過 OpenNI,去抓到人體的骨架,並以此來進行虛擬飛行。 目前的設計概念是類似握汽車方向盤的方法。是雙手平舉,就開始前進,旋轉這個虛擬方向盤、就可以左右旋轉;整個往上抬、往下移,就可以拉高或降低視角。 而為了怕手舉太久會痠、只要持續前進數秒後,就會持續前進,就算手放下來也沒差。 這算是目前一個簡單的成果吧~ Kinect OpenNI 文章導覽 Previous Previous post: Next Next post: 12 thoughts on “簡單的 Kinect / 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 要這樣設計的困難點在於怎麼判斷雙手現在是否正在進行操作。 和觸控螢幕可以明確地根據手是否有碰到螢幕不同,體感操作很難做這個判斷。 回覆 Leave a Reply 取消回覆發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *留言 * 顯示名稱 * 電子郵件地址 * 個人網站網址 在瀏覽器中儲存顯示名稱、電子郵件地址及個人網站網址,以供下次發佈留言時使用。 Current ye@r * Leave this field empty Related Posts 使用 Visual Studio 2005 撰寫 CUDA 程式 在前面一篇的《nVidia CUDA 簡介》中,已經大概介紹過 CUDA 的概念了∼接下來,大概來講一 […] ... Read MoreRead More C++11 std::async 的運作分析 Heresy 在 2016 年的時候,有寫過一篇《C++11 程式的平行化:async 與 future》,介 […] ... Read MoreRead More 在 OpenNI 2 環境下使用多個 Device 這一篇,稍微寫一下要怎麼在 OpenNI 2 的架構下,使用多個 Device。 首先,OpenNI 這個類別 […] ... Read MoreRead More
to 小馬 影片是放在 YouTube 上的,一般瀏覽器應該都看的到才對。 或者請直接連到 YouTube 頁面試試看 http://www.youtube.com/watch?v=2UNH4eGrqaA 回覆
to 菜菜 Heresy 這邊的作法,主要是會去抓手部的位置、然後計算手和身體、以及兩隻手的相對位置,以其距離、角度來作處理。 至於抖動的問題,由於會把變化過小的狀況直接忽略掉,所以問題不大。 當然,另一個方法,就是自己針對計算出來的結果作平滑化處理,這樣也可以有效減少因為感應器產生的誤差而造成的跳動。 回覆
to 菜菜 這些都只是看你要怎麼實作而已,方法很多種,也沒有一定的方法。 以要持續前進來說,基本上 Heresy 這邊的作法是當手舉起的時間到一定程度後,就會修改一個 flag,當這個 flag 被啟動的時候,放下手還會繼續前進,如此而已。 至於要怎麼比對,實際上也有很多不同的比對方式。 Heresy 這邊是用 OpenGL glut,這些檢查基本上都是寫在 idle function 裡。 回覆
heresy大大,我做了简单查看一个谷歌地球的体感应用,其中的放大和缩小是通过身体的前倾和后仰实现的,但是觉得不人性化,问一下如何通过双手的合拢和分开来实现放大和缩小,怎样识别出这两个动作?拜谢了~ 回覆
看不见视频啊?: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
要這樣設計的困難點在於怎麼判斷雙手現在是否正在進行操作。
和觸控螢幕可以明確地根據手是否有碰到螢幕不同,體感操作很難做這個判斷。