加工& OpenGL - 改变摄像机位置?

时间:2010-11-20 22:40:04

标签: opengl camera processing

我正在做一个小项目,我将数据集绘制到一个世界上。我已经完成了密谋。现在我想实现相机移动。

我有一些代码,如果用户按住c并拖动鼠标,相机位置会改变。问题是,我不确定如何通过鼠标移动来计算相机移动。

这是默认位置的相机代码:相机(宽度/ 2.0,高度/ 2.0,(高度/2.0)/棕褐色(PI * 60.0 / 360.0),宽度/ 2.0,高度/2.0,0,0, 1,0);

如何更改相对于鼠标拖动的相机位置? (我尝试使用mouseX和mouseY来偏移相机的眼睛位置,但效果不佳。)

2 个答案:

答案 0 :(得分:2)

如果你有方向矢量,你可以设置你的相机位置如下(抽象代码):

pos += speed * normalize( direction );

这是向前迈进的。如果你想向后移动 - 只需将你的标准化方向vertor乘以-1。对于左右扫射,请使用以下内容:

pos += speed * normalize( cross_product( direction, upvector ) ); // strafing right
pos += speed * normalize( cross_product( upvector, direction ) ); // strafing left

以下是关于向量操作的一些注释(来自我的“HelloWorld”应用程序之一=)):

  • normalize(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
}

希望这会有所帮助=)

答案 1 :(得分:1)

我认为到目前为止最简单的方法是使用drugycam库

http://mrfeinberg.com/peasycam/

此库可让您使用鼠标访问您的相机,您可以通过各种方式约束各种吸气剂,以便轻松访问有关相机及其当前状态的信息。