【问题标题】:Drawing outside the viewport in Vulkan/Opengl在 Vulkan/Opengl 的视口外绘图
【发布时间】:2018-01-29 21:13:52
【问题描述】:

我有一个viewport,它是screen size/framebuffer 的一半。

x, y, w, h = 0, 0, 512, 512

我的scissor 区域是完整的framebuffer

x, y, w, h = 0, 0, 0 1024, 512

我正在从左到右画一条远离viewport 的线。我希望这条线只在视口内绘制。我已经在三张不同的显卡上对此进行了测试,在其中两张上,我得到了我期望的结果。但是在第三个中,这条线在viewport 之外绘制,但在scissor 区域内。 这里哪一个结果是正确的?据我了解,线条的两个顶点应移至外部viewport 位置。它不应该画在它外面。

如果您在此站点上阅读了陷阱 nr 10https://www.opengl.org/archives/resources/features/KilgardTechniques/oglpitfall/

他们说的是在viewport之外绘制,但这只是一些特殊情况,例如你有一条很粗的线,我的线宽是1

【问题讨论】:

    标签: opengl viewport vulkan


    【解决方案1】:

    编辑:在 KhronosGroup 讨论后: 来自规范 Vulkan 1.0.68:

    如果线段的任何一个顶点位于剪辑体积之外, 线段可能被剪裁,计算新的顶点坐标 对于位于剪辑体积之外的每个顶点。剪裁线 线段端点位于原始线段和 剪辑体积的边界。

    英伟达:

    我们有意进行此更改以进行维护2,以允许 无弹出点和线。点裁剪行为是可查询的,但 剪线行为不是,虽然我相信“首选” 行的行为是无弹出的。我们更改了 NVIDIA 驱动程序 去年从紧剪辑到无弹出,甚至改变了 CTS 测试 允许这种新行为。所以这一切都按设计工作。

    旧答案:

    视口定义了从标准化设备坐标到窗口坐标的转换。视口变换不进行任何裁剪。

    但是,剪裁确实发生在NDC 空间之前,视锥剪裁确实保证没有顶点可以落在视口之外。如果你使用正交投影,剪辑空间和NDC 空间是相同的。所以[-1,1]之外的所有东西都会被剪掉。如果你没有做任何特殊情况,关于顶点的opengl链接应该被剪掉。

    如果您的两张显卡在视口内绘制,另一张在视口外绘制,则可能是驱动程序错误。如果您使用的是相当新的 Vulkan,则很可能是这种情况。

    【讨论】:

    • 我的猜测是,在视口之外绘制的卡正在使用保护带裁剪——它裁剪到大于视图体积的体积,并依赖帧缓冲区边界剪刀或其他剪刀来丢弃额外的像素.不过,它似乎没有正确设置这样的剪刀。
    • @JesseHall 是的,你可能是对的,正确的剪刀区域可能会解决她的问题,但是否有必要?
    • 我认为没有必要。该规范似乎不允许保护带削波,因此实现它必须确保结果就像它们没有一样。我正在寻找 Khronos 内部讨论,并在此处提交了一个错误以添加 CTS 测试:github.com/KhronosGroup/VK-GL-CTS/issues/78
    • @JesseHall 真棒:)
    【解决方案2】:

    编辑:我下面的回答在技术上是正确的,但没有用。视口变换本身不定义剪辑体积或剪刀。但由于裁剪到视锥体(x 和 y 为 [-w,+w],z 为 [0,+w]),所有进入视口变换的 (x,y) 值都将在 [-1, 1],并且不会被转换为落在定义视口的矩形之外。

    与 GL 一样,视口仅定义了从标准化设备坐标到帧缓冲区坐标的转换。变换基于视口体积的宽度/高度/深度/原点,但该体积并未定义裁剪体积。数学在23.5 Controlling the Viewport 部分进行了描述。

    在 Vulkan 中,您还可以在 VkPipelineViewportStateCreateInfo:: pScissorsvkCmdSetScissor 中为每个视口在帧缓冲区坐标中指定一个剪刀矩形。此矩形之外的像素被删除。但剪刀矩形要自己设置,不一定要和视口体积相匹配。

    【讨论】:

      猜你喜欢
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多