12

だから私は現在、OpenGL (より具体的には JOGL) でいくつかの FPS ゲーム プログラミングに取り組んでいますが、FPS のようなカメラを作成するための推奨される方法を知りたいと思っていました。

現時点では、基本的にプレーヤーが向いている方向のベクトルを持っています。これは、「w」または前方キーを押すと、現在のプレーヤーの位置に追加されます。そのベクトルの否定はもちろん「s」または後方キーに使用されます。左の「a」と右の「d」には、方向ベクトルの法線を使用します。(これでプレイヤーが飛んでしまうことは承知していますが、現時点では問題ありません)

マウスを動かすと、三角法と行列を使用して方向ベクトルが回転します。もちろん、すべてのベクトルは、簡単に速度を制御できるように正規化されています。

これは一般的かつ/または良い方法ですか、それとももっと簡単な/より良い方法はありますか?

4

4 に答える 4

7

がいつも見てきた方法は、ヨーとピッチの 2 つの角度を使用することです。マウスの動きの 2 つの軸は、これらの角度の変化に対応します。

forwardベクトルは、球面から長方形への座標変換を使用して簡単に計算できます。(ピッチ=緯度=φ、ヨー=経度=θ)

固定upベクトル ((0,0,1) など) を使用できますが、これは、直接上向きまたは下向きに見ることができないことを意味します。(ほとんどのゲームは、89.999 度より急勾配にならないようにすることでこれを解決します。)

このright場合、ベクトルは forward ベクトルと up ベクトルの外積になります。アップ ベクトルは常にグランド プレーンに対して垂直であるため、常にグランド プレーンに対して平行になります。

左右の機銃掃射キーは+/-rightベクトルを使用します。地面に平行なベクトルの場合、とforwardベクトルの外積を取ることができます。rightup

gluLookAt()GL部分に関しては、プレイヤーの原点、原点プラスforwardベクトル、ベクトルを使って簡単に使えますup

ああ、どうか、「マウスを反転」オプションを追加してください。

編集:これは、別の質問で尋ねられた89.9の問題を取り除く代替ソリューションです。これには、right最初に(ピッチ情報なしで)ベクトルを構築し、forward次にup.

于 2009-08-28T14:43:53.633 に答える
1

カメラの回転にクォータニオンを使用できます。自分では試していませんが、ジンバルロックを回避するのに便利です。

于 2009-08-27T17:10:38.003 に答える
1

ええ、しかし最終的には、他のさまざまなアトリビュートをカメラに追加したくなるでしょう。それを綴るには n00b: Quake や CS を模倣したい場合は、きちんと整理しておいてください。最終的には、ボービング、FoV、モーション フィルタリング、ネットワーク ラグの一時停止などが発生する可能性があります。

カメラは、実際には、優れたゲームで作成するのが最も難しいパーツの 1 つです。そのため、開発者は通常、非常に退屈で修正された 1 人称/3 人称の同上で満足しています。

于 2009-08-27T16:48:49.170 に答える