我在3D空间和两个角度有一个点,我想从这个信息计算出结果线。我发现如何用2D线做到这一点,但不是3D。这如何计算?从一个起点和三维角度计算一条线
如果有帮助:我正在使用C++ & OpenGL,并有用户的鼠标点击位置和相机的角度,我想跟踪这条线的交叉点。
我在3D空间和两个角度有一个点,我想从这个信息计算出结果线。我发现如何用2D线做到这一点,但不是3D。这如何计算?从一个起点和三维角度计算一条线
如果有帮助:我正在使用C++ & OpenGL,并有用户的鼠标点击位置和相机的角度,我想跟踪这条线的交叉点。
以三角形来说,需要两个角度和一个点来定义三维空间中的一条线。转换该到(x,Y,Z)是只是极坐标到直角坐标的方程是:
X = R罪(Q)余弦(F)
Ŷ= R罪(Q)罪(F )
Z = R COS(q)
其中r是从点P至原点的距离;线OP与正极轴之间的角度q(天顶)(可以被认为是z轴);和初始射线与OP在赤道平面上的投影(通常从x轴测量)之间的角度f(方位角)。
编辑:
好的,这是你问的第一部分。其余的问题,即问题更新后的真正问题,比从3D角度和3D空间中的点创建线要复杂得多。这涉及使用摄像机到世界的转换矩阵,并在其他SO问题中进行了介绍。为了方便,这里有一个:How does one convert world coordinates to camera coordinates?答案涵盖从世界到相机和相机到世界的转换。
感谢您的编辑,但我已经有了使用GluUnproject的观点。 – 2011-12-31 15:22:38
@Shawn B基本上,从那里你可以认为你的观点是Origin创造了上面数学的界线,并应用一个变形矩阵来获得世界坐标系中的坐标系。 – vdbuilder 2011-12-31 21:28:00
该线可以作为“时间”中的一个点来衡量。这个方程必须是矢量化的,或者有一个合理的方向,所以时间是一种自然想法的方式。因此,在3个维的直线的方程真的是X,Y系列二维方程组,Z与时间有关的,如:
x = ax*t + cx
y = ay*t + cy
z = az*t + cz
要查找的方程组,假设摄影机在原产地, (0,0,0),和你的观点是(X1,Y1,Z1),那么
ax = x1 - 0
ay = y1 - 0
az = z1 - 0
cx = cy = cz = 0
所以
x = x1*t
y = y1*t
z = z1*t
注:这也假定了 “速度” 直线或矢量是这样的,它在你的位置(x1,y1,z1)af一秒钟。
因此,绘制该线只需按需要填充点就好,比如每10秒钟的1/1000秒就可以画出一条“线”,真的是一系列当从远处看到的点显示为一条线时,超过10秒的距离,由您选择的“速度”决定。
我有相机的度数角度,他们应该在什么单位进行计算? – 2011-12-31 06:23:14
角度信息嵌入在摄像机将成为原点(线条起始点),点(0,0,0)的假设中。只给出相机或三维空间中的一个点的角度,假设相机为原点,可以推导出3D线,而不需要两者。 – Motes 2011-12-31 06:32:29
如果相机不在原点,而是在X和Y上都旋转了45度? – 2012-01-01 00:33:12
你的意思是你试图对用户点击的地方投射光线,这源于相机? – 2011-12-31 05:48:32
这是正确的。我是新手,不确定我是否使用了正确的词汇。 – 2011-12-31 05:49:35
您使用哪种语言? – vdbuilder 2011-12-31 05:50:16