2

バックグラウンド:

この問題は、オブジェクトの 3D トラッキングに関連しています。

私のシステムは、オブジェクト/サンプルを既知のパラメーター (X、Y、Z) から OpenGL に投影し、Kinect センサーから取得した画像と深度情報との照合を試みて、オブジェクトの 3D 位置を推測します。

問題:

Kinect 深度 -> プロセス -> ミリ単位の値

OpenGL -> 深度バッファ -> 0 ~ 1 の間の値 (これは近距離と遠距離の間で非線形にマッピングされます)

http://www.songho.ca/opengl/gl_projectionmatrix.htmlに記載されている方法を使用して OpenGL から Z 値を回復できましたが、パフォーマンスが非常に低下します。

これはよくある問題だと確信しているので、何らかの解決策が存在することを願っています。

質問:

OpenGLから目のZ座標を効率的に回復する方法は?

または、上記の問題を解決する他の方法はありますか?

4

1 に答える 1

2

今私の問題はKinectの深さはmmです

いいえそうではありません。Kinect は、深さを任意の単位の 11 ビット範囲の値として報告します。何らかのキャリブレーションが適用された後にのみ、深度値を物理単位として解釈できます。OpenGL の透視投影深度値が非線形であるという限りでは、その通りです。

私の理解が正しければ、デプス バッファのコンテンツを取得して Kinect をエミュレートしたいということですね。次に、最も簡単な解決策は、頂点シェーダーとフラグメント シェーダーの組み合わせを使用することでした。頂点シェーダーは線形深度を追加の変数としてフラグメント シェーダーに渡し、フラグメント シェーダーはフラグメントの深度値を渡された値で上書きします。(これには追加のレンダー ターゲットを使用することもできます)。

もう 1 つの方法は、テクスチャ値が深度値をエンコードするシーンの深度範囲に投影された 1D テクスチャを使用することでした。次に、目的の値がカラー バッファーに格納されます。

于 2011-11-25T17:57:45.817 に答える