Processing&OpenGL - 改变相机位置?

Gab*_*dle 5 opengl processing camera

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

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

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

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

shy*_*cha 2

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

pos += speed * normalize( direction );
Run Code Online (Sandbox Code Playgroud)

那是为了前进。如果你想向后移动 - 只需将你的归一化方向向量乘以 -1 即可。对于左右扫射,请使用以下内容:

pos += speed * normalize( cross_product( direction, upvector ) ); // strafing right
pos += speed * normalize( cross_product( upvector, direction ) ); // strafing left
Run Code Online (Sandbox Code Playgroud)

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

  • 归一化(向量);返回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
}
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助 =)