Math 反透视投影

Math 反透视投影,math,opengl,3d,picking,reverseprojection,Math,Opengl,3d,Picking,Reverseprojection,我正在使用 worldview_inverse * (projection_inverse * vector) 将屏幕空间坐标转换为世界空间坐标。 我以为 (x,y,1,1) 将变换到远平面上的点,而 (x,y,-1,1) 变换到近平面上的一点,并连接该线,我可以查询与该线相交的视锥中的所有对象。 转换后,我将结果点除以它们各自的.w分量。 这适用于远平面,但近平面上的点以某种方式转换为世界空间原点 我认为这与我输入到反投影中的1的w分量有关,因为通常它是投影前的1,而不是投影后的1,我在

我正在使用

worldview_inverse * (projection_inverse * vector)
将屏幕空间坐标转换为世界空间坐标。 我以为

(x,y,1,1)
将变换到远平面上的点,而

(x,y,-1,1)
变换到近平面上的一点,并连接该线,我可以查询与该线相交的视锥中的所有对象。 转换后,我将结果点除以它们各自的.w分量。 这适用于远平面,但近平面上的点以某种方式转换为世界空间原点


我认为这与我输入到反投影中的1的w分量有关,因为通常它是投影前的1,而不是投影后的1,我在做反投影。我做错了什么?

我知道这只是一个解决办法,但您可以仅使用远点和观察位置来推断近平面点

near_point = view_position
           + (far_point - view_position) * (near_distance / far_distance)
至于你真正的问题。首先,别忘了除以W!另外,根据投影矩阵,您是否尝试过(x,y,0,1)而不是z=-1

near_point = worldview_inverse * (projection_inverse * vector)
near_point /= near_point.W

我认为您需要更多的示例代码。特别是将你的近点设置为原点的部分。你能提供你正在使用的投影矩阵吗?是偏移量吗?是的,我考虑过,但现在我对原始问题的数学方面感兴趣;)呵呵,是的,很抱歉。我更新了我的答案,试图解决你真正的问题。