2 台のカメラを使用した頭部姿勢推定プロジェクトに取り組んでいます。1 つのカメラ システムに対して動作し、各カメラ座標系に対する頭部の回転行列と並進ベクトルを返します。頭の動きを表すために回転および変換された OpenGL シーンでオブジェクトをレンダリングしました。計算された回転行列と並進ベクトルを表示するには、次の OpenGL コマンドを使用するだけです。
glMatrixMode(GL_MODELVIEW);
glLoadMatrixd(pose_matrix);
ここで、ポーズ マトリックスは、頭部の回転マトリックスと並進ベクトルから構成される OpenGL ModelView マトリックスです。
現在、2 台のキャリブレーション済みカメラに対してこれを実行しようとしています。最初のカメラが顔の追跡を失ったが、2 番目のカメラが頭の姿勢を推定した場合、2 番目のカメラに対する回転と平行移動を表示し、その逆も同様です。どちらの場合も、1 つの OpenGl オブジェクトを表示して移動したいと考えています。そのためには、ポーズ行列を共通の座標フレームに転送する必要があります。
2 台のカメラの相対的なジオメトリを知っています。カメラの 1 つがワールド座標フレームであると仮定し、最初のカメラに対して 2 番目のカメラのポーズ マトリックスとキャリブレーション マトリックスを乗算することにより、2 番目のカメラのヘッド ポーズ マトリックスを最初のカメラのフレームに転送します。この乗算された行列を OpenGL ModelView 行列にロードすると、間違った結果が得られます。最初のカメラが顔をキャプチャすると、オブジェクトは右に移動しますが、2 番目のカメラではオブジェクトが平行移動および回転し、最初のカメラの場合と同じ場所にはありません。
何が問題なのですか?OpenGLの表示部分が間違っているのでしょうか?