2009-02-26 124 views
3

我使用反向透视投影

worldview_inverse * (projection_inverse * vector) 

变换屏幕空间坐标变换为世界空间坐标。 我认为

(x,y,1,1) 

将转化为对远平面上的点,而

(x,y,-1,1) 

转变为一个点近平面,和连接线,我可以查询视图中的所有对象相交的截头圆锥体。 转换后,我把它们各自的.w组件分开。 这适用于远平面,但近平面上的点以某种方式转变为世界空间起源。

我认为这与我投入逆向投影的1个w分量有关,因为通常投影前是1,而不是后,我正在做反向投影。我究竟做错了什么?

+0

我想你需要更多的示例代码。特别是将您的近点设置为原点的部分 – 2009-02-26 22:22:22

+0

另外,您能否提供您正在使用的投影矩阵?它是否抵消? – Coincoin 2009-02-26 22:28:08

回答

4

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

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