如果你有方向向量,你可以设置你的相机的位置如下(抽象代码):
pos += speed * normalize( direction );
那是为了前进。如果你想向后移动 - 只需将你的归一化方向转换器乘以 -1。对于左右扫射,请使用以下内容:
pos += speed * normalize( cross_product( direction, upvector ) ); // strafing right
pos += speed * normalize( cross_product( upvector, direction ) ); // strafing left
以下是关于向量操作的一些注释(来自我的“HelloWorld”应用程序之一=):
- 归一化(vec);返回vec,其长度等于1;这个“削减” vec 到需要的长度
- 交叉产品(vec_a,vec_b);返回 vec_c,它垂直于 vec_a 和 vec_b(请参阅本文了解更多信息)。
我的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
}
希望这会有所帮助=)