gpt4 book ai didi

opengl - 从剪辑空间到屏幕坐标的转换何时发生?

转载 作者:行者123 更新时间:2023-12-03 08:54:15 32 4
gpt4 key购买 nike

我正在研究渲染管道,当我进入剪辑阶段时,解释说我们必须从 View (眼睛或相机)空间传递到剪辑空间,也称为 。标准化设备空间 (NDC),即从 -1 到 1 的立方空间。

但是,现在我不明白从这个空间到屏幕坐标空间的 channel 何时发生:

  • 在裁剪之后和光栅化之前?
  • 在光栅化之后和剪刀和 z 测试之前?
  • 最后在写入帧缓冲区之前?
  • 最佳答案

    不,剪辑空间和 NDC 空间不是一回事。

    剪辑空间其实离NDC一步之遥,所有坐标除以Clip.W生产NDC。范围之外的任何内容 [ -1 , 1 ] 在生成的 NDC 空间中对应于裁剪体积之外的一个点。 NDC之前的坐标空间被称为剪辑空间是有原因的;)

    然而,严格来说,NDC 空间不一定是立方的。 NDC 空间在 OpenGL 中确实是一个立方体,但在 Direct3D 中却不是。在 D3D 中,NDC 空间中的 Z 坐标范围为 0.0 1.0 , 而它的范围是 -1.0 1.0 在 GL 中。 X 和 Y 在 GL 和 D3D 中的行为相同(即,它们的范围从 -1.0 1.0 )。 NDC 是一个标准的坐标空间,但在不同的 API 中有不同的表示。

    最后,NDC 空间到屏幕空间(AKA 窗口空间)发生在光栅化期间,由您的视口(viewport)和深度范围定义。片段位置在任何其他坐标空间中确实没有意义,这就是光栅化产生的:片段 .

    更新:

    在 OpenGL 4.5 中引入,扩展 GL_ARB_clip_control 允许您在 GL 中采用 D3D 的 NDC 约定。

    传统的 OpenGL 行为是:

    glClipControl (GL_LOWER_LEFT, GL_NEGATIVE_ONE_TO_ONE);

    Direct3D 行为可以通过以下方式实现:

    glClipControl (GL_UPPER_LEFT, GL_ZERO_TO_ONE); // Y-axis is inverted in D3D

    关于opengl - 从剪辑空间到屏幕坐标的转换何时发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21841598/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com