あなたは方向ベクトルを持っている場合は、抽象的な次のようにお使いのカメラの位置を(設定することができますコード):
pos += speed * normalize(direction);
これは進歩的なものです。逆方向に移動したい場合は、正規化方向の頂点に-1を掛けてください。 (私の "HelloWorldの" アプリケーションのいずれかから=)ベクトル演算に
pos += speed * normalize(cross_product(direction, upvector)); // strafing right
pos += speed * normalize(cross_product(upvector, direction)); // strafing left
ここ
ているいくつかの注意):左右の機銃掃射のために、何かこの使用
- ノーマライズ(VEC)を、は、長さが1に等しいvecを返します。これは必要な長さにvecを「切り詰める」
- cross_product(vec_a、vec_b);はvec_cを返します。vec_cはvec_aとvec_bに直行します(詳細はthis articleを参照)。
cross_product()の私のバージョンのようになります。私はこれまでで一番簡単な方法は、peasycamを使用することだと思う
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
}
は=これが役立つことを願っています)
「カメラコード」と言うと、それはモデルビュー行列ですか?または、シーンの計算の背後にある「カメラ」クラス/関数を使用していますか?シーンを移動する最も簡単な方法は、カメラを完全に無視してシーン自体を移動することです。レンダリングしているすべてのX、Y、Zポイントに「カメラオフセット」を追加するだけです。これは「カメラ」を移動させたい場所の反対です。 – cecilkorik
処理カメラ()メソッドの変数をマウスのドラッグに応じて変更したいのです。 –