我要问的问题是我以前的question的修整版。现在,我的脸在屏幕上看起来有些位置,并且凝视着两只眼睛的坐标(俯仰和偏航)。让我们说
左眼= [-0.06222888 -0.06577308]
Right_Eye = [-0.04176027 -0.44416167]
我想确定该人可能正在看的屏幕坐标?这可能吗?请帮忙!
答案 0 :(得分:1)
您需要的是:
每只眼睛的3D位置和方向
您声称获得了它,但俯仰和偏航只是欧拉角,还需要一些参考系和变换顺序才能将它们转换回3D向量。最好以矢量形式保留方向(我怀疑您是第一位的)。除了方向,您还需要在同一坐标系中的3D位置...
投影平面的3D定义
因此,您至少需要定义平面矩形的起始位置和2个基向量。更好的方法是使用4x4 homogenous transform matrix,因为这样可以非常轻松地在其本地坐标系之间进行转换...
所以我这样看:
所以现在只需要找到射线和平面之间的交点即可
P(s) = R0 + s*R
P(t) = L0 + t*L
P(u,v) = P0 + u*U +v*V
解决该系统将导致获取u,v
,这也是您正在查看的飞机内部的2D坐标。当然,由于不准确,这将不是可代数的。因此,最好将光线转换为平面局部坐标,并仅使用w=0.0
计算每条光线上的点(使之成为具有单个未知数的简单线性方程),并计算左眼与右眼之间的平均位置眼睛(如果它们不能完全对齐)。
因此,如果R0',R',L0',L'
是UVW本地坐标中的转换值,则:
R0z' + s*Rz' = 0.0
s = -R0z'/Rz'
// so...
R1 = R0' - R'*R0z'/Rz'
L1 = L0' - L'*L0z'/Lz'
P = 0.5 * (R1 + L1)
P
是您在UVW坐标中查看的位置...
根据表示法,可以很容易地完成转换,您可以将表示平面的逆矩阵或正矩阵乘以(R,1),(L,1),(R0,0)(L0,0)
。第四坐标(0,1
)只是告诉您要转换矢量还是点。
在不了解您的坐标系,数据精度以及您知道什么已知和未知数的情况下,很难比这更具体。
如果您的平面是相机的投影平面,而不是U,V
是从相机拍摄的图像的x和y轴,并且W垂直于它(方向只是表示法)。
当您使用使用透视投影的摄像机输入时,希望您对其位置和矢量进行校正。