使用D3D绘制骨架数据:坐标空间转换

时间:2013-03-16 09:14:41

标签: kinect direct3d11

我正在学习D3D并在使用kinect(在C ++中)时协调空间。虽然我可以使用Direct2D轻松绘制骨架位置,但我很好奇如何使用direct3D 11绘制这些位置以及我需要的坐标空间变换。

一个简单的例子:我想根据左手的动作翻译一个立方体。跟踪左手关节,我可以得到骨架位置。但是,如何将这些位置转换为多维数据集的世界空间可以理解的内容?

我尝试了一个解决方案:

  1. 使用SkeletonToDepth转换将骨架位置转换为深度 - 在屏幕空间中显示结果。
  2. 使用XMVector3UnProject(...)将屏幕空间点映射回对象空间, 即基本上是射线拾取解决方案。
  3. 虽然这很好,但有没有更有效的方法,不涉及映射回对象空间,这将允许我直接在屏幕空间或至少投影空间工作?

1 个答案:

答案 0 :(得分:1)

我找到了适合我的答案。

来自骨架/面部跟踪器的kinect原始数据为您提供kinect相机空间中的数据,我将其定义为一个视图矩阵,定义为(0,1,0),查看(0,0,-1) ),原点为(0,0,0)。使用fov的投影矩阵y = 45.8f,视口的纵横比,以及近和远匹配应用程序(在我的情况下1.0f到2000.0f,因为我工作在mm),kinect返回的任何3D点在相机空间。因此,为了到达世界空间,乘以视图矩阵的倒数(在我的情况下,通过乘以-1来翻转变换点中的x轴坐标)。屏幕上的对象应遵循kinect的动作。