SharpVulkan で3角形を回転させる


スポンサーリンク

三角形を回す

前回3角形を描画するという大きな1歩を踏み出しました。今回はこの三角形を回転させたいと思います。

前回の内容に比べると新規の内容は比較的少なめです。

GlmSharpの導入

行列の演算のために GlmSharp を使用します。 これは NuGet で取得してください。

定数バッファの準備

前回の頂点バッファと同じように、今度は定数バッファを作成します。

定数バッファを描画で使用するためには、ディスクリプタ関連およびパイプラインレイアウトの設定が追加で必要になります。まずはディスクリプタのほうから確認していきます。

ディスクリプタ

今回は定数バッファを1つ使うだけなので、その設定でディスクリプタプールを以下のように準備しました。

続いてディスクリプタセットレイアウトの作成です。これも定数バッファを1つだけ持つという構成で作成します。
このレイアウトとはシェーダーでどのようにリソースがセットされるのかといった指示書情報のようなものです(たぶん)。

パイプラインレイアウトの設定

前回はデフォルトのままなにも中身を詰めなかったパイプラインレイアウトですが、
今回ディスクリプタを使うようになったためパイプラインレイアウトの設定が必要になります。

このように依存する情報が色々とあるので、リソースデータの作成順序を見直す必要がそろそろ出てきそうです。
今回のサンプルでは、頂点バッファ生成・定数バッファ生成・ディスクリプタ準備と始めて、
その後に、グラフィックスパイプラインを構築するための他の情報を準備していくという方法にしました。
この辺りの詳細はサンプルコードの方を見て頂ければと思います。

描画処理

定数バッファの中には、ワールド、ビュー、プロジェクションの行列を格納することにしています。
この定数バッファの中身を更新して三角形を回転させます。

定数バッファへの書込も、初期頂点データの書き込みの方法と全く同じ手順となります。
GlmSharp を使って、各行列を計算させています。

この定数バッファをシェーダーで使うためにはコマンドを積む必要があります。
描画を行う前に以下のようにセットを行います。

シェーダーコードは以下のようになっています。今回は定数バッファを使うのが頂点シェーダーなのでこちらだけ変更しました。

定数バッファは、0番目に設定されるようにディスクリプタセットを構築したので binding = 0 となっています。
一見 OpenGL でも通りそうな GLSL ですが、 Vulkan 用 GLSL のコードと見分けるポイントの1つでしょうか。

sharp_vulkan_triangle02

まとめ

ディスクリプタの部分は今までの OpenGL/DirectX では出てこなかった部分なので、難しいかと思います。
ここでも詳しく説明しませんでした。うまく説明されているサイト様に期待したいところです。

ディスクリプタ関連を変えるとパイプラインレイアウトを変える必要が出てきます。これはグラフィックスパイプラインの再構築まで波及します。
今まで以上に、構成を変更した時のソースコードの変更箇所が多くなるという点にご注意ください。

サンプルコード

リポジトリはこちらになります。 https://github.com/techlabxe/VulkanSharpTutorial
この中にある 04_WorldTriangle が今回の内容と合致するものとなっています。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする