【问题标题】:How do I create a Gradient Background in Vulkan?如何在 Vulkan 中创建渐变背景?
【发布时间】:2017-06-14 20:59:24
【问题描述】:

我一直在修改 Vulkan Triangle 演示。我正在尝试获得渐变背景而不是纯色。在 OpenGL 中,这很容易通过渲染四边形并保留背景像素来完成。当我在 Vulkan 中执行此操作时,四边形覆盖了三角形。任何人都知道如何做到这一点?我尝试了单独的渲染通道,但不知道如何保留第一个渲染通道(背景)的像素。任何帮助或示例代码将不胜感激。谢谢,

托尼

【问题讨论】:

    标签: background gradient vulkan


    【解决方案1】:

    不需要单独的通道,你可以在你好三角形之前渲染渐变四边形。

    如果你有一个单独的着色器,那么你可以绑定它。如果数据在单独的 VBO 中,则根据需要进行绑定。

    【讨论】:

      【解决方案2】:

      如果您只希望全屏四边形显示渐变,则无需单独的渲染通道。实际上,这与您在 OpenGL 中所做的几乎相同。使用渐变渲染覆盖整个屏幕的三角形或四边形,然后绘制三角形。如果您的四边形隐藏了三角形,即使三角形更靠近观察者(在 z 轴上),您可能禁用了深度测试。

      【讨论】:

      • 如何在 Vulkan 中手动清除深度缓冲区,而不清除颜色缓冲区。在 OpenGL 中是 glClear(GL_DEPTH_BUFFER_BIT);
      • vkCmdClearDepthStencilImage 可以用于此。请注意,这需要为用作附件的深度/模板图像设置 TRANSFER_DST,您需要在调用该命令之前将其传输到正确的布局。
      • VkClearDepthStencilValue val; val.depth = 0.0f; val.stencil = 1; VkImageSubresourceRange 范围; vkCmdClearDepthStencilImage(m_drawCmdBuffers[i],m_depthStencil.image, VK_IMAGE_LAYOUT_GENERAL, &val,1, &range);
      • 上面的代码没有任何区别。你能帮我设置一下吗?谢谢。如果你愿意,我可以通过电子邮件将我的项目发给你。
      【解决方案3】:

      好的,我的深度缓冲区清除工作正常。这是代码sn-p。将此命令放在背景渲染和三角形之间。

          VkClearDepthStencilValue val;
              val.depth = 1.0f;
              val.stencil = 0;
              VkImageSubresourceRange range;
              range.layerCount = 1;
              range.levelCount = 1;
              range.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
              range.baseArrayLayer = 0;
              range.baseMipLevel = 0;
              vkCmdClearDepthStencilImage(m_drawCmdBuffers[i], m_depthStencil.image, VK_IMAGE_LAYOUT_GENERAL, &val, 1, &range);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 2022-08-07
        • 1970-01-01
        • 2020-04-30
        • 1970-01-01
        • 2020-02-08
        • 1970-01-01
        相关资源
        最近更新 更多