gpt4 book ai didi

c++ - 垂直转动相机(使用角度轴旋转)

转载 作者:行者123 更新时间:2023-11-28 08:24:27 26 4
gpt4 key购买 nike

我正在为使用四元数和 Angle-Axis 的 OpenGL 编写相机类。我设法制作了一个水平旋转功能(这很容易),但我无法编写一个工作功能来垂直旋转它。我所有的尝试都以相机旋转结束, hell 知道什么方向...我需要一个公式或代码如何实现我的垂直旋转功能(pitchTurn() 在我的代码中)。

Here is my current code:

void Camera::yawTurn(const float& angle){
rotate(angle, 0.0f, 1.0f, 0.0f);
}

void Camera::pitchTurn(const float& angle){
// need code here
}

void Camera::rotate(const float& angle, const float& x, const float& y, const float& z){
Quaternionf t;
t.fromAxisAngle(angle, x, y, z);
q_ *= t;
q_.normalize();
}

我也想知道是否有更好的方法在不使用 Angle-Axis 的情况下使用四元数进行旋转。

最佳答案

最有可能的问题是旋转顺序。

四元数乘积 q * r,当被视为两个组合旋转时,按 r、q 的顺序应用于变换后的顶点。

现在,如果您想围绕全局 Y 轴转动相机(该轴不依赖于相机方向),您必须乘以 t * q。如果您想围绕局部 Y 轴转动相机(该轴是根据相机方向指定的 - 如果您直视下方,则您的“向上” vector 位于 XZ 平面内,即 Y 坐标为 0),你必须乘以 q * t。

典型的相机控件围绕全局 Y 轴和局部 X 轴旋转。所以你应该制作两个函数,preRotate 和 postRotate(或本地/全局),在 yawTurn 中使用全局(pre)版本,在 yawTurn 中使用本地(在 pitchTurn 中发布。

关于c++ - 垂直转动相机(使用角度轴旋转),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4531352/

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