1

kinect (C++) を操作しながら、D3D と座標空間について学んでいます。Direct2D を使用してスケルトンの位置を簡単に描画できますが、direct3D 11 を使用してこれらの位置を描画する方法と、必要な座標空間変換について知りたいです。

簡単な例: 左手の動きに基づいて立方体を移動したいと思います。左手の関節を追跡すると、スケルトンの位置を取得できます。ただし、これらの場所をキューブのワールド空間が理解できるものに変換するにはどうすればよいでしょうか?

私は次のようにして解決策を試みました:

  1. SkeletonToDepth 変換を使用してスケルトンの位置を深度に変換します - 画面スペースで結果が得られます。
  2. を使用して、スクリーン スペース ポイントをオブジェクト スペースに戻しますXMVector3UnProject(...)。つまり、基本的にレイ ピッキング ソリューションです。

これは問題ありませんが、オブジェクト空間へのマッピングを伴わず、スクリーン空間または少なくとも投影空間で直接作業できる、より効率的な方法はありますか?

4

1 に答える 1

1

自分に合った答えを見つけました。

スケルトン/フェイス トラッカーからの kinect の生データは、kinect カメラ スペースのデータを提供します。原点 (0,0,0)。y = 45.8f の fov の射影行列、ビュー ポートのアスペクト比、およびアプリケーションに一致する近距離と遠距離 (私の場合、mm で作業しているため、1.0f から 2000.0f) を使用して、kinect によって返される任意の 3D ポイントカメラ空間にあります。したがって、ワールド空間に到達するには、ビュー マトリックスの逆数を掛けます (私の場合は、-1 を掛けて、変換されたポイントの x 軸座標を反転させます)。画面上のオブジェクトは、kinect からの動きに従う必要があります。

于 2013-03-21T09:20:43.040 に答える