定位数字以使用OpenGL查看相机

时间:2012-10-16 08:19:32

标签: c++ opengl matrix

在我的opengl应用程序中,我想定位数字以查看相机,为此,我为所有对象定义了2个向量,正面和向上。

我使用gluLookAt来控制相机,因此很容易知道我需要的矢量newFront和newUp。

我用来控制每个数字的方向的代码是:

m4D orientate(v3D newFront, v3D newUp)
{
    double angle = angle_between(front, newFront);
    v3D cross = normalize(cross_product(front, newFront));

    m4D matrix = rotate_from_axis(angle, cross);

    up = normalize(up * matrix);

    angle = angle_between(up, newUp);
    cross = normalize(cross_product(up, newUp));

    return(rotate_from_axis(angle, cross) * matrix);
}

当矩阵堆栈只有这个矩阵时,这段代码效果很好,但是如果我推动前一个矩阵旋转(当然前向和向上旋转),它就会失败。

我的错是什么?

1 个答案:

答案 0 :(得分:1)

为什么总是那些复杂的“我解决反向旋转并将其乘以模型视图”广告牌/冒名顶替者解决方案,当有一个更简单的方法?

设M是要从中确定广告牌矩阵的模型视图矩阵。矩阵是4×4实值类型。左上角3×3定义旋转和缩放。对于广告牌,这部分是身份。

因此,将当前模型视图矩阵的左上部分替换为身份,并将其余部分保持原样,即

 1  0  0 tx
 0  1  0 ty
 0  0  1 tz
wx wy wz ww

并使用该矩阵进行进一步的转换,您将获得完全理想的效果。如果应用了缩放,请使用缩放矩阵替换左上角标识。