2011-11-07 20 views
0

私はdirectxにはかなり新しく、これは本当に基本的に聞こえるかもしれません。ダイレクトxC++カメラの動き

私はあなたが部屋を歩くことができる最初の人のゲームで作業を始めました。私がコーディングしている言語はC++で、私はゲームを作成するためにdirectxを使用しています。

これまでのところ、すべての部屋にドアなどが描かれていましたが、最初の人物のカメラを作り、キーボードの矢印キーを使用して前方、後方、左右に移動できるようにしました。

私が初心者の方が簡単です。

これで私を助けたり、正しい方向に私を指摘してくれる人はいますか?私は技術的な側面であなたを助けることができないので、事前

+1

ここから始めることができます:http://en.wikipedia.org/wiki/Euler_angles – BlackBear

答えて

1

おかげで、私はOpenGLの男のより多くの午前、私ができることは、あなたに方向性を与えるです。各軸

周りにカメラの角度 - - カメラは(X、Y、Z)

回転ある

翻訳:一般的な、3Dカメラが有するで

あなたがしたいことは、翻訳パートのみに関連しています:

  1. ユーザ入力を監視し、矢印キーの1つを押すとキャプチャします。
  2. 矢印キーが押されているときに、カメラの翻訳の変更を開始する必要があります。ユーザーがアップキーを押した場合、キーを離すまで、メインゲームループの各反復に対応するカメラ変換コンポーネント(x)に定数値を追加します。彼がダウンキーを押すと、その値を加算するのではなく、その値を減算したいと思うでしょう。
  3. キーを離したら、その値をカメラ変換に追加しなくてはなりません。

あなたのゲームは60Hzで動作し、ユーザーが移動したいと思う方向ごとにカメラの翻訳に1/60単位を追加するとします。ユーザーが上向き矢印キーを2秒間押した場合、カメラは2単位前に移動していたはずです。

これは、今、私はそれがあなたの問題の技術的な側面を解決するために有用である可能性が見つかったWebページにあなたをだけ指すことができ、一般的には「理論」である。

DirectX camera movement - 私はこの記事を推測しているましたあなたが必要以上に多くのことをしていますが、それはかなり良く見えました。とにかくそれを読むべきだと思います...しかし、あなたはView Transformationパートにスキップすることができます。

Input handling - 何も言いませんが、通常のWin32入力処理です。あなたがwin32の入力処理に慣れていないなら、私は最初にそれを学ぶのに1〜2時間かかるべきだと思います。

それださてさて、私はGoogleが確かにあなたを助けるように、このトピックをカバーするウェブ内のチュートリアルの多くは、あります

+0

助けてくれてありがとう:)あなたが投稿した記事を読んで、どうやったらどうなるか見てみましょう:) – DK10

2

を助け願っています。

基本事項:あなたの位置とカメラの回転を保存したいと思うでしょう。 Z軸があなたの上軸であると仮定すると、矢印を使ってXとYだけを変更する必要があります。

カメラの向きはZ軸に沿った回転の合成として保存されます)とX軸(上下を見て)。

単純なクラス:

class Player 
{ 
protected: 
    float3 Position; // Z-up 
    float2 CameraRotation; // X for turning, Y for up-down 
public: 
    void MoveForward() 
    { 
     Position.X += -cosf(CameraRotation.X) * PLAYER_SPEED; 
     Position.Y += -sinf(CameraRotation.X) * PLAYER_SPEED; 
    } 
    // when using any other arrow, just add a multiply of PI/2 to the camera rotation 
    // PI for backwards, +PI/2 for left strafe and -PI/2 for right strafe. 
    // If you don't want to use mouse, use left and right arrow to modify camera rotation 
    // and MoveForward and Backward will look the same, having different signs. 
}; 

「 - 」あなたはおそらくそれらを変更すること自由に感じ、行動のこの種のをお勧めしますので、SINFとcosf関数の前の兆しがあります。

カメラでは、フレーム間にマウスデルタを実装する必要があります。すべてのフレームで、マウスの位置を前の位置と比較します。その後、速度を見ながら回転させて乗算し、カメラの値に直接設定します。

これが役に立った。

関連する問題