キャリブレーションされたカメラを使用して 3D モデルをレンダリングする必要があるコンピューター ビジョンの問題に取り組んでいます。キャリブレーションされたカメラ マトリックスをモデルビュー マトリックスと射影マトリックスに分割する関数を作成していますが、opengl で説明に反する興味深い現象に遭遇しました (少なくとも私は)。
簡単な説明は、射影行列を否定すると、何もレンダリングされないということです(少なくとも私の経験では)。スケーリングの影響を受けない同次座標を変換するため、射影行列にスカラーを掛けても効果はないと思います。
以下は、これが予想外であると私が考える理由です。誰かが私の推論のどこに欠陥があるかを指摘できるかもしれません。
正しい結果が得られる次の透視投影行列を想像してください。
[ a b c 0 ]
P = [ 0 d e 0 ]
[ 0 0 f g ]
[ 0 0 h 0 ]
これにカメラ座標を掛けると、均一なクリップ座標が得られます。
[x_c] [ a b c 0 ] [X_e]
[y_c] = [ 0 d e 0 ] * [Y_e]
[z_c] [ 0 0 f g ] [Z_e]
[w_c] [ 0 0 h 0 ] [W_e]
最後に、正規化されたデバイス座標を取得するために、x_c、y_c、および z_c を w_c で除算します。
[x_n] [x_c/w_c]
[y_n] = [y_c/w_c]
[z_n] [z_c/w_c]
ここで、P を否定すると、結果のクリップ座標は否定されますが、それらは同次座標であるため、任意のスカラー (-1 など) を掛けても、結果の正規化されたデバイス座標には影響しません。ただし、openGl では、P を否定すると何もレンダリングされません。P に非負のスカラーを掛けて、まったく同じレンダリング結果を得ることができますが、負のスカラーを掛けるとすぐに、何もレンダリングされません。ここで何が起こっているのですか??
ありがとう!