ここで私の問題が何であるかについて、私は非常に混乱しています。グローバル/ワールド座標をオブジェクトのローカル座標空間に変換するマトリックスを設定しました。この変換行列は、4 つのベクトル (前方、上、横、および位置) からのオブジェクト情報を使用して構築されます。glMultMatrixf()
このローカリゼーション マトリックスは、各オブジェクトの描画時に に渡されます。これにより、各オブジェクトの周りに単純な軸を描画して、ローカル座標系を視覚化できます。これはまったく問題なく期待どおりに機能し、オブジェクトがワールド内で移動および回転すると、ローカル座標軸も移動および回転します。
問題は、この同じ行列を列ベクトルで乗算すると (あるオブジェクトのグローバル位置を別のオブジェクトのローカル座標系に変換するために)、結果がまったく期待どおりにならないことです。例えば:
私のローカライズ マトリックスは次のとおりです。
0.84155 0.138 0.5788 0
0.3020 0.8428 -0.5381 8.5335
0.4949 -0.5381 -0.6830 -11.6022
0.0 0.0 0.0 1.0
位置列ベクトルを入力します。
-30.0
-30.0
-30.0
1.0
そして、次の出力を取得します。
-99.2362
-1.0199
4.8909
1.0000
この時点でのオブジェクトの位置は (-50.8, 8.533, -11.602, 1) であるため、x 座標の出力が -99.2362 ほど大きくなることはあり得ないことがわかっています。さらに、2 つのグローバル ポイント間の距離と、ローカライズされたポイントと原点の間の距離を見つけると、それらは異なります。
これを Matlab で確認したところ、行列の乗算が正しいようです (注: Matlab では、最初にローカライズ行列を転置する必要があります)。そのため、ローカライズ マトリックスが正しく構築されていないと考えざるを得ませんが、OpenGL はこのマトリックスを使用してローカル座標軸を正常に描画しています。
この質問には不必要な詳細を含めないようにしていますが、もっと必要だと感じたら、遠慮なく質問してください。:)
どうもありがとう。