Math 找到相机的滚动、偏航和俯仰,拥有它';s位置、目标和上方向向量
我试图找到相机的偏航角、俯仰角和侧倾角,假设我有相机的位置,它是指向点(目标点)的look_,它是上方向向量。我的最佳尝试是使用以下代码Math 找到相机的滚动、偏航和俯仰,拥有它';s位置、目标和上方向向量,math,graphics,3d,Math,Graphics,3d,我试图找到相机的偏航角、俯仰角和侧倾角,假设我有相机的位置,它是指向点(目标点)的look_,它是上方向向量。我的最佳尝试是使用以下代码 zaxis = lookat-position xaxis = cross(up, xaxis) yaxos = cross(zxis, xaxis) 然后我找到每个轴和法向量(1,0,0)(0,1,0)和(0,0,1)之间的角度 并将它们分配到横滚、偏航和俯仰,但这似乎不起作用 有什么想法吗,我做错了什么? 提前感谢:)您将无法获得横摇角度-因为这可能是任
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);
}
vector3v=注视位置;
双倍长度=v.长度();
双立面=asin(v.y/长度);
双方位角;
如果(绝对值(v.z)<0.00001)
{
//特例
如果(v.x>0)
{
方位角=pi/2.0;
}
否则如果(v.x<0)
{
方位=-pi/2.0;
}
其他的
{
方位角=0.0;
}
}
其他的
{
方位角=atan2(v.x,v.z);
}