DirectXTKのSpriteBatchで実際に自作のシェーダーを使うことができたのでその備忘録です。
ハッピーホワイトデー★
今回は久しぶりに創作イラストを描いてみました~(^^)
残業オフィスな背景にしたかったんですが集中線みたいになってしまったーーーorz
今週はシェーダーのコンパイルについてメモします~~
■今週のゲーム制作:描画エフェクトの実装
DirectX11で2Dスプライトに利用するためのHLSL言語の書き方について勉強を進めています。
ゼロ知識で始めたので、自分用にもう一度まとめていきたいと思います。(前回のHLSLに関する記事はこちら)
後でパッと見返したいので、先に今回の記事の結論を書いておきます。
■ファイルフォーマット:拡張子「.hlsl」でLF(UNIX)、UTF-8(BOMなし)
■用意する必要があるシェーダー:頂点シェーダーとピクセルシェーダー両方必要((23/03/20追記)DirectXTKのSpriteBatchを利用している場合はピクセルシェーダーのみでOKでした!)
■セマンティクス:変数が何を意味するのかについて書くものがセマンティックで、シェーダーによってどのセマンティックが使えるのかは公式ドキュメントを見よう!
■命名規則:キャメルケースがよさそう
つづきで詳しく↓
■今週のゲーム制作:ゲームライブラリに機能追加
ようやく自作のゲームライブラリが形になりました!
まだ2Dスプライトとテキストが利用できる程度ですが、簡単なスプライトのフィルタを実装しているのでシルエットで描画したり加算・乗算で描画したりもできます。
もともとやりたかったゲーム設計をライブラリにゲームクラス・シーンクラスとして実装してあるので、継承してレイアウトを作れば動くようになりました。わーい(*^^*)
将来的にはレイアウトツールを作ってコードが生成できるようになればサイコーですな!(作るとは言ってない)
ということで今週も頑張りますぞ~!
普段はVisualStudio2022で開発しているんですが、移植性を考えてクロスプラットフォーム開発環境であるCMakeを使ってみたい!
ということでとりあえずやってみよう!
■今週のゲーム制作:CMakeのお勉強と自作ゲームのMODプログラミング
まず、今使っているVisualStudioのソリューションやプロジェクトをCMakeプロジェクトに変換したいなーと。
そこで、
・ルートフォルダに「CMakeLists.txt」を作る
・そこにCMake用のプログラムを書く
・VisualStudioからフォルダをCMakeプロジェクトとして開く
ということをしました。すると・・・・・・
なんかわからんけどVisualStudioがCMakeプロジェクトとして認識した!
とりあえず公式マニュアルに沿って「CMakeLists.txt」に書いたのはこのあたりです。
#CMakeのバージョンを設定 cmake_minimum_required(VERSION 3.8) #プロジェクト名 project(KAIEMO) #C++言語標準 set(CMAKE_CXX_STANDARD 20) #プロジェクトのバージョン設定 set(KAIEMO_VERSION_MAJOR 0) set(KAIEMO_VERSION_MINOR 1) set(KAIEMO_VERSION_PATCH 0) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/version.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/include/version.hpp)
ま、また新しい言語を習得せねばならぬというのか・・・・・・(白目
NuGetで取得したDirectXTKの扱いがややこしそう。vcpkgとは何ぞや( ^ω^)・・・
移植するときに本腰入れようと思います。
それと、ライブラリがいい感じに動くようになったのでモジュールに分割して機能を整えてみようかなと思っています。
既にグラフィックAPIの処理部分は分割したんですが、モジュールが増えた時用に汎用関数とコアを切り離す必要がありそうです。
ということで、今週も頑張りますぞ~!
■今週のゲーム制作:ライブラリ制作とシナリオの独自システム開発
C++を学び始めて早8年。
過去のフォルダを漁っているといろんな関数作ってたな~としみじみ。一時は全ての関数を管理できるリストをExcelで作ったこともありました。
プロジェクトが膨らんでくるとクラスや関数の機能をすっきりまとめて後で見やすくしたい・・・というのが常ですよね。常ですよね?(圧
ということでそれがものすごく簡単にできるというDoxygenをようやく自分も導入しました。
使ってみてビックリ。名前空間・クラス・関数の前に説明をちょこっと書くだけでツリー構造にまとまっためちゃ見やすいHTMLを作ってくれちゃいます。
↓公式ページ
書き方は例えばこんな感じ
//名前空間 /*! @brief @~english Hoge hoge namespace.@~japanese ほげほげ名前空間@~ */ namespace namespace_hoge_hoge{} //クラス /*! @brief @~english Hoge hoge class.@~japanese ほげほげクラス@~ */ class class_hoge_hoge{}; //関数 /** * @brief @~english Hoge hoge function.@~japanese ほげほげ関数@~ * @param [in] nanka_num @~english Number.(Any OKeeey.)@~japanese なんか番号。(なんでもE)@~ * @return @~ Failed : 0, Success : 1 */ int32_t function_hoge_hoge(const int32_t& nanka_num){return 1;}
「@brief」は名前空間やクラス、関数の説明
「@param」は引数の説明
「@return」は戻り値の説明
「@~」「@~english」「@~japanese」は言語フィルタ(「@~」はすべての言語で表示されます)
という感じで書くことができます。
ほぼほぼこれだけですっきりしたドキュメントが作成できますが、コードの埋め込みなどの凝ったこともできるのでおすすめです!
くわしくタグを開設しているサイトもあるのでリンクを貼っておきます~。
出来上がりはこんな感じになりました(日本語で出力)

自作でDirectX11を叩いて一から作っていたライブラリの方はDirectXTKのおかげで何とか形になったので今作からさっそく使えるかもしれないです。やったー( ;∀;)
シェーダの勉強過程で行列や線形代数にちょこっと触れたので今回のシナリオシステムに使えそうないいアイデアが浮かびました。というわけで本編の完成をお楽しみに~!
最近生まれたてのGitHubアカウントでプログラムの海を泳いでます。
いろんな実装方法とか書き方を知ってパワーアップしてる感じがします。感じがするだけかも(笑)
とはいえ自分の中ではエラー処理の考え方が変わったり、基本的な記述方法がスネークケースに変わったりしたので結構影響されてはいます。
■今週のゲーム制作:プログラミングのお勉強
今週は先週に引き続き、自分でライブラリの中身を実装してみようということで、DirectXについて勉強を進めています。
マイクロソフトの開発者向けのドキュメントを読んだりいろんなブログの入門記事を読んだりしつつ・・・・・・
文系にはなかなか難しいシェーダーというものにぶち当たりました。これは避けては通れない壁のようです。
C++言語ではなくHLSL言語で書かれているというのはなんとなく知っていたんですが、読めるやろ~~と軽ーいノリで開いてみると・・・・・・Σ(゚д゚)!