【问题标题】:How to get depth value from scene cordinates by calling gluUnproject twice(not using gluUnProject)如何通过调用 gluUnproject 两次从场景坐标中获取深度值(不使用 gluUnProject)
【发布时间】:2017-02-03 22:22:20
【问题描述】:

this 线程中。第二个答案表明:

解决方案 2 调用 gluUnproject 两次,一次使用 clipZ = -1 和 另一个clipZ = 1,你得到两分(在世界空间)。和 这两点你会得到一条光线,你可以使用一些光线投射算法 计算鼠标坐标。

但不幸的是,在建议之后没有解释。 还有这个thread 解释了一个方向可以通过调用gluUnproject 两次来获得。获得方向对我来说很有意义,但我的问题是如何通过两次调用gluUnProject 来获取深度信息?

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    你没有得到深度信息。你只有一个 X 和一个 Y,但要取消投影,你需要一个 Z。而且没有魔法可以给它。而是尝试推断它。

    撤消视口变换后,您在 NDC 中有 X,Y。什么Z?使用 z1= 1 和 X,Y。取消投影。现在你在世界坐标中有一个点 P1。重复取消项目,但这次使用z2= -1。你得到P2。可能你必须处理第四个'w'坐标。请记住,您可以在除以 w 后提取 3D 坐标。在齐次坐标中,w 是比例因子。

    使用 P1 和 P2 或许您可以自行找到 P1P2 线与您的模型之间的交点。

    z= -1, 1是NDC中分离度最高的坐标,所以计算结果更准确。

    【讨论】:

    • 好吧,这是有道理的。在第一个链接中,我觉得它是在说我们可以像 readPixel 一样找到 Z 值。如果我的模型不相交,还有一个问题?
    • 如果您的模型不相交,那么您将鼠标置于空白区域。
    • Ripl2 我希望你看到我的另一个问题你也评论了它。我不是在寻找选择,而是在尝试确定缩放级别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多