定向图形以使用 OpenGL 查看相机

Orientating Figures to look at the Camera with OpenGL

本文关键字:OpenGL 相机 图形      更新时间:2023-10-16

在我的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);
}

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

我的错是什么?

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

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

因此,通过将当前模型视图矩阵的左上角替换为恒等式,并保留其余部分,即

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

使用该矩阵进行进一步的转换,您可以获得所需的效果。如果应用了缩放,请将左上角的标识替换为缩放矩阵。