SharpVulkan キューブの描画


スポンサーリンク

SharpVulkan でキューブを描画する

よくあるキューブ(立方体)を SharpVulkan で描画してみたいと思います。
なお今回でチュートリアルとしては最後になります。

今回はテクスチャを使用しないため、基本となるコードはテクスチャを貼る前のもので、3角形を回転させていたものを改良していくのがよいです。

管理マネージャの導入

いくつものリソースが増えてきてコードを追加していくときに大変になってきました。特に終了処理あたりにその手間を感じるのではないでしょうか。

そこで今回は管理クラスを導入しました。
管理と言うほど大げさなことはしていませんので、 SimpleResourceManager と名付けて Common フォルダに入れています。
このクラスの終了処理時に各解放処理を行うようにしています。
リソース作成時にこのクラスに登録しておけば、後は忘れておけるというのは少し楽になるだろうと思っています。

モデルデータについて

頂点データやインデックスデータを保持するクラスから取得して、頂点バッファ・インデックスバッファを作ります。
インデックスバッファは本シリーズで初めての登場です。

とはいっても作る方法もほぼ頂点バッファと同じです。違うのはデータの種類の部分くらいでしょうか。

描画処理

今までの描画処理と違う部分があります。
今回はインデックスバッファを使用するため、描画コードをその追加をする必要があります。

インデックスバッファのセットのためのコマンドを設定し、 インデックス付き描画である vkCmdDrawIndexed を使用して描画する、というコードが上記のようになります。

これで早速描画してみるとどうなるでしょうか・・・

sharp_vulkan_cube_1

このように予想した結果と違い、ポリゴンの前後関係がおかしなことになっています。
何が足りなかったのかというと、デプスバッファの準備・設定が足りていませんでした。今までのコードにデプスバッファ関連の設定を入れていきましょう

デプスバッファを有効化する

デプスバッファを有効化するには、 xaml 側で設定してしまいます。
以下のように EnableDepthBuffer を true に設定します。これでこのコントロール用のデプスバッファが有効化されました。

続いて、描画でデプスバッファを使用できるように変更していきます。

今まではデプスステンシルステートを初期値で使っていましたが、これを以下のように有効化設定していきます。

デプススバッファに深度値を書込み、そして比較も行うための設定となっています。

続いてバッファクリアの部分も修正が必要になります。

今まではクリア値はカラーのみ必要でした。今回はデプスバッファも使っているため、そのクリア値も設定する必要が出てきました。

これらの設定を行った後で描画を行うと、以下のように正しい予想した結果が描画されると思います。
sharp_vulkan_cube_2

まとめ

キューブを描画するというところまでを SharpVulkan を使ってやってみました。
低レイヤーのグラフィックスAPIである Vulkan で Cube を出すという段階までやってきましたが、いかがでしたでしょうか。

シェアする

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

フォローする