我正在尝试查找摄像机的偏航角,俯仰角和横滚角,假设我拥有摄像机的位置,它是look_at点(目标点),并且是上 vector 。我最好的尝试是通过使用以下代码
zaxis = lookat-position
xaxis = cross(up, xaxis)
yaxos = cross(zxis, xaxis)
然后我找到每个轴与法线 vector (1,0,0)(0,1,0)和(0,0,1)之间的角度
并指定他们滚动,偏航和俯仰,但似乎不起作用
有什么想法,我在做什么错?
提前致谢 :)
最佳答案
您将无法获得侧倾角-可以是任何角度,但可以获取仰角和方位角(俯仰和偏航)。我发现了一些旧的C代码,可以将其转换为伪代码,因此假设您的 vector 不是零长度:
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);
}