2017-06-14 15 views
0

私はVulkan Triangleのデモを試しています。私は単色の代わりにグラデーションの背景を取得しようとしています。 OpenGLでは、クワッドをレンダリングしてバックグラウンドピクセルを保持することで簡単に行えます。 Vulkanでこれを行うと、四角形が三角形を覆います。誰もがこれを行う方法を考えている?別のレンダーパスを試しましたが、最初のレンダリングパス(背景)からピクセルを保持する方法はわかりません。ヘルプやサンプルコードは高く評価されます。おかげで、Vulkanでグラデーションの背景を作成するにはどうすればよいですか?

トニー

答えて

0

OK、深度バッファのクリアが正しく機能しています。コードスニペットは次のとおりです。このコマンドを背景のレンダリングと三角形の間に置きます。

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); 
0

あなただけのフルスクリーンクワッドは、勾配を表示したい場合は、別レンダーパスのための必要はありません。実際、OpenGLで行うのとほぼ同じです。グラデーションで画面全体を覆う三角形または四角形をレンダリングし、三角形を描画します。三角形がビューアに近い(z軸上であっても)四角形が三角形を隠している場合は、深度テストを無効にすることができます。

+0

カラーバッファをクリアせずに、Vulkanで手動でデプスバッファをクリアするにはどうすればいいですか? OpenGLではglClear(GL_DEPTH_BUFFER_BIT)でした。 –

+0

[vkCmdClearDepthStencilImage](https://www.khronos.org/registry/vulkan/specs/1.0/man/html/vkCmdClearDepthStencilImage.html)を使用できます。このコマンドを呼び出す前に適切なレイアウトに転送する必要があるため、添付ファイルとして使用する深度/ステンシルイメージにTRANSFER_DSTを設定する必要があることに注意してください。 –

+0

VkClearDepthStencilValue val; \t \t \t val.depth = 0.0f; \t \t \t val.stencil = 1; \t \t \t VkImageSubresourceRange range; \t \t \t vkCmdClearDepthStencilImage(m_drawCmdBuffers [i]、m_depthStencil.image、VK_IMAGE_LAYOUT_GENERAL、&val、1、&range); –

0

別々のパスは必要ありません。こんにちは三角形の前にあるようにグラデーションクワッドをレンダリングすることができます。

別のシェーダがある場合は、それをバインドできます。データが別々のVBOにある場合は、必要に応じてバインドします。

関連する問題