math - 反向透视投影

标签 math opengl 3d picking reverseprojection

我正在使用

worldview_inverse * (projection_inverse * vector)

将屏幕空间坐标转换为世界空间坐标。
我以为
(x,y,1,1)

将转换为远平面上的一个点,而
(x,y,-1,1)

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

我认为这与我在逆投影中输入的 1 的 w 分量有关,因为通常它在投影之前是 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

关于math - 反向透视投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/592699/

相关文章:

python - PyGame 做 3d 吗?

python - pyopengl:它能取代 C++ 吗?

c - atan2f vs fmodf vs 只是简单的减法

c# - 有小数金额,如果存在,要修剪到 2 位小数

c++ - 如果现代 opengl 中有多个纹理,则没有纹理

c++ - 顶点缓冲区对象C++没有出现

c++ - 如何获取屏幕刷新率?

java - 为什么输出是(Nan,Nan)?

java - 指数公式背后的推理/直觉

ios - iOS TrueDepth框架指向点云