【问题标题】:mapping from normalized device coordinates to view space从标准化设备坐标映射到视图空间
【发布时间】:2009-08-29 22:39:16
【问题描述】:

我想从标准化设备坐标映射回视图空间。

arround 的另一种方式是这样的:

viewspace -> 裁剪空间:将齐次坐标乘以投影矩阵

剪辑空间 -> 标准化设备坐标:将 (x,y,z,w) 除以 w

现在在标准化设备坐标中,视锥体内的所有坐标都落入立方体 x,y,z € [-1,1] 和 w=1

现在我想将该立方体边界上的一些点转换回视图坐标。投影矩阵是非奇异的,所以我可以使用逆矩阵从剪辑空间到视图空间。但我不知道如何从标准化设备空间到剪辑空间,因为我不知道如何计算需要与其他坐标相乘的“w”。

有人可以帮我吗?谢谢!

【问题讨论】:

    标签: math matrix coordinates transform projection


    【解决方案1】:

    除非您出于某种原因实际上想要恢复您的剪辑空间值,否则您不需要计算 W。将您的 NDC 点乘以投影矩阵的倒数,然后除以 W 以返回查看空间。

    【讨论】:

    • 谢谢你确定我只需要除以W吗?我对这个页面感到困惑:opengl.org/wiki/GluProject_and_gluUnProject_code 最后四行 out[3]=1.0/out[3]; 我特别困惑。对象坐标[0]=out[0]*out[3];对象坐标[1]=out[1]*out[3];对象坐标[2]=out[2]*out[3];它们将 x,y,z 除以 W 值 - 但它们将 W 值替换为 1/W - 因此返回的齐次坐标在 W 坐标中没有 1,因此必须再次除以新 W 以便获取有效的 x,y,z 坐标
    • gluUnProject 函数没有返回 W 值,您会注意到 1/W 值没有复制到 objectCoordinate 向量中。如果 unproject 操作成功,W 组件将始终为一,因此将其提供给调用者毫无意义。
    【解决方案2】:

    顶部的流程图和下一页描述的公式可能会对您有所帮助:http://www.songho.ca/opengl/gl_transform.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2013-07-05
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多