1

カメラが向いている方向 (ヨー) と y (垂直軸) のピッチに基づいて、カメラが x 軸と z 軸上で前方に移動する方向を計算する方法 (java) が必要です。ゲームエンジンとカメラを自作しています。

すべての値がデフォルトでゼロに設定されているため、カメラを正しく移動すると、すべての動きが正の z 軸に沿って方向付けられます。ただし、カメラを左または右にパンすると (それによってヨーが変化します)、カメラはまだ z 軸に沿ってしか移動しません。

ヨーの値の範囲は、0 (南)、45 (南西)、90 (西)、135 (北西)、180 (北)、225 (北東)、270 (東)、315 (南東) です。 360 (南、0 と同じ)。

コンパスの方向で探しているもの(「+」または「-」は、その軸に沿った値の変化を示します):

South = x, y, z+
SouthWest = x+, y, z+
West = x+, y, z
NorthWest = x+, y, z-
North = x, y, z-
NorthEast = x-, y, z-
East = x-, y, z
SouthEast = x-, y, z+

ピッチの値の範囲は、0.0 (中央)、100.0 (完全に上)、および -100.0 (完全に下) です。

コードを投稿する必要がある場合は投稿できますが、複雑になる可能性があります。誰かが私を助けることができるように、私は何らかの意味を成していることを願っています!

4

1 に答える 1

1

カメラをy方向に距離kだけ動かしたいとします。簡単にするために、方向を角度に変換します。0.0 は右、Pi/2 は上、Pi は左、3*Pi/2 は下などを表します。

編集: あなたが言うように、カメラの y はピッチによってのみ影響を受けます。X と z は、ヨーとピッチの両方の影響を受けます。

次の方法で、新しい x、y、および z を計算できます。

float y = // Yaw angle
float p = // Pitch angle
float k = // Move distance

float xzLength = cos(p) * k;
float dx = xzLength * cos(y);
float dz = xzLength * sin(y);
float dy = k * sin(p);

// Update your camera:
camera.x += dx;
camera.y += dy;
camera.z += dz;

もちろん、ヨーとピッチは変わらないので、更新する必要はありません。

于 2013-08-10T03:39:00.663 に答える