2013-03-16 75 views
1

我正在學習使用kinect(使用C++)時D3D和座標空間。雖然我可以使用Direct2D輕鬆繪製骨架位置,但我很好奇如何使用direct3D 11繪製這些位置以及我需要的座標空間轉換。使用D3D繪製骨架數據:座標空間轉換

一個簡單的例子:我想根據左手的運動來翻譯一個立方體。跟蹤左手關節,我可以得到骨骼位置。但是,如何將這些位置轉換爲立方體的世界空間所能理解的東西?

我試圖做一個解決方案:使用SkeletonToDepth轉換

  1. 轉換骨架的位置深度 - 讓我在屏幕空間效果。
  2. 使用XMVector3UnProject(...), 將屏幕空間點映射回對象空間,即基本上是射線拾取解決方案。

雖然這很好,還有沒有一種更有效的方式,不需要映射回對象空間,並且允許我直接在屏幕空間或至少投影空間中工作?

+0

如果還沒有,請查看Kinect for Windows Toolkit中的D3D示例。有一個涉及avataring,這可能讓你洞察到映射。我沒有處理這些例子,所以我不確定他們是否會完全符合你的要求。 – 2013-03-16 14:19:53

+0

感謝邪惡壁櫥猴子。我看了一下Avateering的演示。我不完全理解它,主要是因爲我沒有C#的經驗。雖然我理解程序代碼的一般流程(什麼程序稱爲什麼),但我還是無法確定從骨架空間到模型的特定轉換。我會繼續閱讀,看看我能找到什麼。還有什麼建議? – Nikky 2013-03-18 00:51:32

回答

1

我找到了適合我的答案。

來自骨架/面部追蹤器的kinect原始數據爲您提供了數據在kinect相機空間中,我將其定義爲以(0,1,0)定義的視圖矩陣,查看(0,0, - 1),起源於(0,0,0)。使用y = 45.8f中的fov投影矩陣,視角的縱橫比以及與應用(在我的例子中爲1.0f到2000.0f,因爲我工作在mm中)相近和遠處的距離,由該kinect返回的任何3D點在相機空間。因此,要進入世界空間,乘以視圖矩陣的逆(在我的情況下,通過乘以-1來翻轉變換點中的x軸座標)。屏幕上的物體應該跟隨來自kinect的運動。