我试图找到摄像机的偏航角、俯仰角和滚动角,假设我有摄像机的位置,它是 look_at 点(目标点)并且它是向上矢量。我最好的尝试是使用以下代码
zaxis = lookat-position
xaxis = cross(up, xaxis)
yaxos = cross(zxis, xaxis)
然后我找到每个轴与法向量 (1,0,0) (0,1,0) 和 (0,0,1) 之间的角度 并将它们分配给滚动、偏航和俯仰,但它似乎不起作用
任何想法,我做错了什么? 提前致谢:)
最佳答案
您将无法获得滚动角 - 因为它可能是任何东西,但您可以获得仰角和方位角(俯仰角和偏航角)。我发现了一些旧的 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);
}
关于math - 查找相机的滚动、偏航和俯仰,具有它的位置、目标和向上矢量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8259984/