2011-07-13 7 views
3

私はしばらく前からSFML 1.6でOpenGLを使っていました。 1つの例外を除き、私はカメラクラスを正しく実装することができません。あなたは、 "カメラ"と呼ばれるC++クラスを作成しようとしています。ここに私の関数です:WASDキーが押されているかどうかOpenGL/SFMLでマウスの外観「カメラ」を実装しようとしています

Camera::Strafe(float fSpeed)

チェックし、もしそうであれば、それぞれの方向に「fSpeed」にカメラを移動します。

Camera::MouseMove(int currentX, int currentY)

現在のマウス座標を取り込み、それに応じてカメラを回転させる、第一人のマウスの外観を提供しなければなりません。私のStrafe()の実装は正常に動作しますが、私はMouseMove()を正しく取得できないようです。

OpenGLマウスルックの実装に関する他のリソースを読んで、私が各フレームの後にマウスを中心に置く必要があることは既に知っています。しかし、それはそれについてです。私はマウスの座標から実際にカメラをその場で回転させる方法を得ることができません。おそらく、あるトリグを使用する必要があります。

答えて

0

私はこれに似たようなことをしました(3人目のカメラでした)。私が正しくしたことを覚えていれば、私はマウスの位置を変更し、それを使って2つの角度を計算しました(私はいくつかのトリグでそれを行いました)。 1つの角度は私に水平回転を与え、もう1つは私に垂直回転を与えた。ピッチ、ヨー、ロールを具体的に示していますが、どちらがどの方向を指しているのか覚えていません。他のものの前にしなければならないものもあります。そうしないと、物事は面白く回転しません。私はそれが最初にピッチだったと確信しています、そして、ヨーまたはロール。

マウスの位置がどのように変化したのかは明らかです。それはマウスの老化を可能にした。私がマウスを速く動かすと、より大きな変化が起きるので、私は「速く」回転します。

編集:OK、私のコードを見て、それは非常に簡単な計算です。

これをC#で行われ、その構文については、私と一緒に負担した。(私は2つのだけの軸を中心に回転するので)

_angles.X += MathHelper.ToDegrees(changeInX/100); 
_angles.Y += MathHelper.ToDegrees(changeInY/100); 

私の角度は2次元のベクトルに格納されていました。私はchangeInYとchangeInYの値を取って、単純に100で割り、任意のラジアン値を得て、それを度に変換しました。感度を100に調整します。これを理解するためにここで固体計算は行われていなかったことを覚えておいてください。私はちょうどうまくいく何かを得るまで、試行錯誤をしました。

+0

これはいくつかのものをクリアします。しかし、ピッチ、ヨー、ロールは浮動小数点またはベクトルとして保存する必要がありますか?いずれにも利点はありますか?ありがとう! –

+1

ピッチ、ヨー、ロールの値は、移動している実際の角度になります(度またはラジアンはあなた次第です)。個々のものは浮動小数点ですが、アクセスを容易にするために3つすべてを3次元ベクトルに格納することはできません。 – MGZero

+0

ピッチはX軸周りの回転、YawはY軸周りの回転、ロールはZ軸周りの回転です。しかし、どのようにマウスの入力から角度を取得するのですか? –

関連する問題