方向ベクトルを取得している場合は、次のようにカメラの位置を設定できます (抽象コード):
pos += speed * normalize( direction );
それは前進するためです。後方に移動したい場合は、正規化された方向バーターに -1 を掛けるだけです。左右に機銃掃射するには、次のようなものを使用します。
pos += speed * normalize( cross_product( direction, upvector ) ); // strafing right
pos += speed * normalize( cross_product( upvector, direction ) ); // strafing left
ベクトル操作に関するいくつかのメモを次に示します (私の「HelloWorld」アプリケーションの 1 つから =) ):
- 正規化 (vec); 長さが 1 に等しい vec を返します。これはvecを必要な長さに「カット」します
- cross_product( vec_a, vec_b ); vec_a と vec_b に垂直に向けられた vec_c を返します (詳細については、この記事を参照してください)。
私のバージョンのcross_product()は次のようになります。
Vector Vector::CrossProduct(const Vector &v)
{
double k1 = (y * v.z) - (z * v.y);
double k2 = (z * v.x) - (x * v.z);
double k3 = (x * v.y) - (y * v.x);
return Vector(NumBounds(k1), NumBounds(k2), NumBounds(k3));
// NumBounds(v) returns 0 when v is less than 10 ^ -8
}
これが役立つことを願っています=)