寻找相机的滚转角、偏航角和俯仰角,已知其位置、目标和上方向矢量。

3

我正在尝试找到相机的偏航角、俯仰角和滚转角,假设我已经知道了相机的位置、其观察点(目标点)和向上的向量。我尝试使用以下代码:

zaxis = lookat-position
xaxis = cross(up, xaxis)
yaxos = cross(zxis, xaxis)

然后我找到每个轴与法向量(1,0,0) (0,1,0)和(0,0,1)之间的角度,并将它们分配给滚动、偏航和俯仰,但似乎不起作用。你有什么想法,我做错了什么吗?谢谢提前!
1个回答

4

您将无法获取滚转角 - 因为它可能是任何值,但您可以获取俯仰角和方位角(俯仰和偏航)。我找到了一些旧的C代码,我将把它翻译成伪代码,所以假设您的向量不是零长度:

Vector3 v = lookat - position;
double length = v.Length();

double elevation = asin(v.y / length);
double azimuth;

if (abs(v.z) < 0.00001)
{
    // Special case
    if (v.x > 0)
    {
        azimuth = pi/2.0;
    }
    else if (v.x < 0)
    {
        azimuth = -pi/2.0;
    }
    else
    {
        azimuth = 0.0;
    }
}
else
{
    azimuth = atan2(v.x, v.z);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接