如果你有方向矢量,您可以設置相機的位置如下(摘要代碼):
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到需要的長度
- cross_product(vec_a,vec_b);返回vec_c,它指向vec_a和vec_b的垂線(更多信息請參見this article)。
我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
}
希望這將有助於=)
當你說這是「相機代碼」,你的意思是這是模型視圖矩陣?或者你是否使用了一個「相機」類/功能來完成一些幕後計算?移動場景的最簡單方法是完全忽略相機,然後改變場景本身。只需在所有正在渲染的X,Y,Z點上添加一個「相機偏移量」,這與您希望「相機」移動的位置相反。 – cecilkorik 2010-11-20 22:52:55
我的意思是我想根據鼠標拖動來改變處理camera()方法中的變量。 – 2010-11-21 06:37:24