0

GL_MODELVIEW マトリックスと同様に、カメラの位置と方向を含むマトリックスを定義しました。

GL_MODELVIEW マトリックス

(m3 = 0; m7 = 0; m11 = 0; m15 = 1)

このデータを ModelViewMatrix にロードしようとしています。私はこの2つの可能性を考えています:

  • 関数 glLoadTransposeMatrixf() の使用:

このソリューションを使用すると、正しい位置と向きが得られます。問題は、ビューを変更するためにコードの Left/Up/Forward/Translation ベクトルを変更しているため、2 番目のソリューションを使用する必要があることです。

  • 関数 gluLookAt() の使用:

      gluLookAt(Translation->X,
                Translation->Y,
                Translation->Z,
                Translation->X-Forward->X,
                Translation->Y-Forward->Y,
                Translation->Z-Forward->Z,
                Up->X,
                Up->Y,
                Up->Z);
    

私の問題は、それで取得しているGL_MODELVIEWマトリックスが他のケースとは異なることです。具体的には、Translation ベクトルは間違っていますが、Left/Up/Forward ベクトルは正しいです。

私はそれと本当に混乱しています。この2つのオプションと私が間違っていることの間に違いがあるかどうか、誰かが説明できますか?

得られた結果:

次のような行列 M を使用しています。

M = (Lx   Upx   Fwx   tx)
    (Ly   Upy   Fwy   ty)
    (LZ   Upz   Fwz   tz)
    (0     0     0    1 )
 

最初の方法では、正しい GL_MODELVIEW マトリックスを取得しています。

N = (Lx   Upx   Fwx   tx)
    (Ly   Upy   Fwy   ty)
    (Lz   Upz   Fwz   tz)
    (0     0     0    1 )

しかし、2番目の方法では、次のGL_MODELVIEWマトリックスを取得しています:

N = (Lx   Upx   Fwx   tx')
    (Ly   Upy   Fwy   ty')
    (Lz   Upz   Fwz   tz')
    (0     0     0    1 )

tx'!=tx、ty'!=ty、tz'!=tz であることに注意してください。これは非常に紛らわしいです...

4

1 に答える 1

1

2 つのオプションには違いがあります。行列を M としましょう。M は実際に何をするのでしょうか? ワールド空間から目の空間への変換ではなく、正確にその逆です。考えてみてください。カメラがポイント「平行移動」にあると仮定します。M の残りの部分が単位であると仮定すると、カメラの位置にある点は原点に変換されます。しかし、それはtranslation.xyz+translation.xyzに行き着くので、実際にはカメラは-translation.xyzの位置にあります。

最初の方法で実際に「正しい」結果が得られる場合は、何か他の問題があるようです。

于 2013-05-12T13:14:46.417 に答える