math - 查找相机的滚动、偏航和俯仰,具有它的位置、目标和向上矢量

标签 math graphics 3d

我试图找到摄像机的偏航角、俯仰角和滚动角,假设我有摄像机的位置,它是 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/

相关文章:

ios - 什么是 Apple 的 Metal( Metal 着色器语言)纹理坐标?

android - 获取下一个最近的 Geo-Points

c++ - 如何找到近奇异矩阵的逆矩阵?

java - 小程序在浏览器中显示为空

c++ - 如何在 C++ 中为曲面创建邻接矩阵

graphics - 3D图形: software for visualizing 3D vectors?

math - 计算任意频率的傅立叶变换

javascript - 用一条线连接两个圆圈(使用 DOM 元素)

javascript - Fisheye Distortion 插件的奇怪行为

java - ImageIO 保存回原始大小