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



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

一个简单的例子:我想根据左手的运动来翻译一个立方体。追踪左手关节,我就能找到骨骼的位置。然而,我如何将这些位置转换为立方体的世界空间能够理解的东西?

我试着这样做:

  1. 将骨架位置转换为深度使用骷髅深度转换-给我屏幕空间的结果。
  2. 使用XMVector3UnProject(...)将屏幕空间点映射回对象空间,即本质上是一个光线拾取解决方案。

虽然这很好,但是否存在一种更有效的方法,不涉及映射回对象空间,并允许我直接在屏幕空间或至少是投影空间中工作?

我找到了适合我的答案。

来自骨骼/面部跟踪器的kinect原始数据提供给你kinect相机空间中的数据,我将其定义为视图矩阵,定义为向上(0,1,0),看着(0,0,-1),原点(0,0,0)。有了y = 45.8f的视场投影矩阵、视口长宽比以及与应用相匹配的远近(在我的例子中是1.0f到2000.0f,因为我的单位是mm), kinect返回的任何3D点都在相机空间中。因此,要获得世界空间,请与视图矩阵的逆相乘(在我的例子中,通过与-1相乘来翻转变换点中的x轴坐标)。屏幕上的物体应该跟随kinect的移动。

最新更新