2012-03-21 8 views
0

私はjPCTライブラリでFPSに取り組んでいます。すべてのFPSが必要とする1つの重要なことは、マウスをあまりにも遠くに/下に引っ張って、プレーヤーが後ろを見ないようにすることです。現在、jPCTのウェブサイトにあるサンプルコードを使用して、カメラに追加されたアングルの数を追跡していますが、ラジアン単位のすべての角度で丸めの問題が心配です。私はjPCTのカメラから回転行列を得ることができます、そして、私はそれがプレーヤーが見ている "高"を把握するための情報を含んでいることを知っていますが、私は行列からそれをいかに得るかについて手がかりがありません。カメラが回転しながら見える高さを調べるMatrix

回転行列で、プレイヤーがストレートアップよりも「アップ」し、ストレートダウンよりも「ダウン」しているかどうかを教えてくれるものは何でしょうか?

答えて

0

プレイヤーが動くたびに行列を更新している場合は、浮動小数点エラーのために問題に遭遇し、回転行列がスキュー行列に変わります。 1つの解決策は、毎回行列を直交正規化することですが、通常は単にプレーヤーのピッチを維持し、ヨーイング(必要な場合はロール)をフロートとして置き、プレーヤーが向きを変えたり、各角度(またはオイラー角を行列に変換するための単一の方法)に最適化されたコードを使用すると、現在行っているようなものよりも遅くはありません。とにかくカメラの向きが制限されるため、ジンバルロックの問題に遭遇することはありません。

あなたの特定の質問については、行列Z軸(3番目の行または列、行列の向きに依存する)とZ軸を指す回転していないベクトルの間の角度を計算する必要があると思います。

+0

まず、ピッチ、ヨー、ロールを保存するだけでは、jPCTでは回転角度を設定する方法がなく、回転するだけです。カメラを修正する方法がないので、角度を追跡しないようにしたい。次に、Z軸の角度を計算する方法は?第三に、Y軸を意味しませんでした。なぜなら、それは3Dモデリングの上下であるからです。 – LRFLEW

+0

1.角度から回転行列を計算することを意味していましたが、以前と同じようにレンダラに提出することができます。 2. https://www.google.co.uk/search?q=angle+between+vectors 3.いずれの場合も、あなたが選択するのはあなた次第です.Z(水平)の角度は+/- 80度(またはあなたが設定した制限)、Y(垂直)などとなります。10-170。私は個人的に+/-を好むが、それはあなた次第である。 – Gilead

関連する問題