将眼睛注视(俯仰和偏航)转换为屏幕坐标(人在看什么?)

2024-09-24 22:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我问这个问题是我之前的question的精简版本。现在我有一张脸在屏幕上寻找某个位置,同时也注视着两只眼睛的坐标(俯仰和偏航)。让我们说

左眼=[-0.06222888-0.06577308]

右眼=[-0.04176027-0.44416167]

我想确定这个人可能看到的屏幕坐标?这可能吗?请帮忙!在


Tags: 版本屏幕精简眼睛question右眼
1条回答
网友
1楼 · 发布于 2024-09-24 22:22:56

你需要的是:

  1. 每个眼睛的3D位置和方向

    你声称你得到了,但俯仰和偏航只是欧拉角,你还需要一些参考帧和变换顺序,把它们转换回三维矢量。最好用向量形式表示方向(我想你一开始就知道了)。在同一个坐标系中,随着你需要的方向在3D中的位置。。。

  2. 投影平面的3D定义

    所以你至少需要起始位置和2个定义平面矩形的基本向量。更好的方法是使用4x4 homogenous transform matrix来实现这一点,因为这样可以很容易地从和进入到它的局部坐标系。。。

所以我这样看:

line of sight

现在只需要找到光线和平面的交点

P(s) = R0 + s*R
P(t) = L0 + t*L
P(u,v) = P0 + u*U +v*V

解决这个系统将导致获得u,v,这也是你正在观察的平面内的二维坐标。当然,由于不精确,这将不能用代数来解决。因此,最好将光线转换成平面局部坐标,然后用w=0.0计算每条光线上的点(这是一个简单的线性方程,只有一个未知),然后计算左眼和右眼之间的平均位置(以防它们没有完全对齐)。在

因此,如果R0',R',L0',L'是在UVW局部坐标中转换的值,那么:

^{pr2}$

其中P是你在UVW坐标系中看到的点。。。在

转换很容易完成,根据你的符号,你可以用(R,1),(L,1),(R0,0)(L0,0)乘以代表平面的逆矩阵或直接矩阵。第四个坐标(0,1)只告诉你是在变换向量还是点。在

如果不了解坐标系、数据精度以及已知和未知的信息,很难比这更具体。在

如果你的平面是相机的投影平面,那么U,V是从相机拍摄的图像的x轴和y轴,W轴垂直于它(方向只是符号的问题)。在

因为你使用的是使用透视投影的相机输入,我希望你的位置和向量都能得到修正。在

相关问题 更多 >