gpt4 book ai didi

c++ - 使用 OpenGL 定位图形以查看相机

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:30:32 24 4
gpt4 key购买 nike

在我的 opengl 应用程序中,我想调整图形的方向以注视相机,为此,我为所有对象定义了 2 个 vector ,正面和上方。

我使用 gluLookAt 来控制相机,所以我需要的 vector 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);
}

当矩阵堆栈只有这个矩阵时,这段代码运行良好,但如果我插入前一个矩阵旋转(当然是旋转前面和向上的 vector ),它就会失败。

我有什么错?

最佳答案

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

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

因此,通过将当前模型 View 矩阵的左上部分替换为标识,并保持其余部分不变,即

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

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

关于c++ - 使用 OpenGL 定位图形以查看相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12910332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com