今回は、WIC[Windows Imaging Component]を使って描画したいと思います。
WICであれば、「BMP」「JPG」「PNG」「TIFF」「GIF」を描画できます。
プロジェクトの作成
前回同様にプロジェクトを新しく作成します。
プロジェクト名は、” 0003-4_Texture_WIC “としておきます。
ソースコード
以下がソースです。これも前回同様、流れが分かりやすいようにmain.cppだけでまとめました。
以下のソースをコピペするか、ダウンロードしてVisual Studio の「ソースファイル」に保存してください。
コピペするなら、
「ソースファイル」で右クリックして
「追加」→「新しい項目」で、「C++ ファイル」を選び、名前を” main.cpp “にして追加ボタンを押して作成してください。
ダウンロードなら、
同じく「ソースファイル」で右クリックして
「追加」→「既存の項目」で、main.cppを選択して追加してください。
そして、d3dx12.hも前回同様インクルードしますので、
以下のヘッダファイルをダウンロードしてプロジェクトの「ヘッダー ファイル」に「既存の項目」から追加してください。
また、main.cpp内で「texture.dss」を読み込んでいる” LoadWICTextureFromFile “という関数がありますが、
これは「DirectXTex」というライブラリから持ってきた” WICTextureLoader12 “を配置してインクルードすることによって呼び出せるものです。
ちなみに、このDirectXTexはMicrosoft公式のGithubからダウンロードできます。
リンク: https://github.com/microsoft/DirectXTex
しかし、この最新のコードだと私にとっては使いづらかったので、いくらかリビジョンが古いコードを用います。
以下のソースをダウンロードしてmain.cppと同じディレクトリ下に配置してください。
WICTextureLoader12.h
WICTextureLoader12.cpp
次に、シェーダファイルを読み込みます。
これは「ソース ファイル」から「追加」→「新しい項目」で、
「Visual C++」→「HLSL」の中で.hlslなら何でもいいのですが(Visual Studio側が勝手にテンプレートを作るだけなので)、
ここでは「ジオメトリ シェーダー ファイル (.hlsl)」を選んで、
名前を” shaders.hlsl “にして追加ボタンを押してください。
すると、「ソース ファイル」中にshaders.hlslが作れますので、
中にあるコードを全て以下のコードでコピペして上書きするか、
ダウンロードして「既存の項目」で追加しましょう。
このコードは、” DirectX12 | 3-3. DDSテクスチャ “と同じ” shaders.hlsl “です。
shaders.hlsl
ただ、これだけではビルドしても動きません。
あと、shaders.hlsl自体にもプロパティ設定をする必要があります。
カーソルを「ソリューション エクスプローラー」内にある「shaders.hlsl」にかざして右クリックし、
「プロパティ」を選んで、プロパティダイアログを開きます。
「構成プロパティ」→「全般」の中の「項目の種類」という項目で「HLSLコンパイラ」から「カスタム ビルド ツール」に変更します。
そのまま適用ボタンを押し、切り替えて、
「カスタム ビルド ツール」の中の「コマンド ライン」と「出力ファイル」の項目にそれぞれ、
copy %(Identity) "$(OutDir)" > NUL
$(OutDir)\%(Identity)
を入力します。
これでexeと同じディレクトリ下にshaders.hlslがコピーされます。
これでOKを押します。
次に、main.cpp内でWICを使ってテクスチャを読み込んでいますので、以下のjpg画像をダウンロードしてmain.cppと同じディレクトリに入れておきましょう。
「BMP」「JPG」「PNG」「TIFF」「GIF」のどれかであれば基本何でもいいです。
texture.jpg
以上で作成は完了です!!
以下のようになっていればOK。
ツールバーの「デバッグ」から「デバッグの開始(F5)」で実行できます。
ビルドするときは、「0003-4_Texture_WIC」を右クリックして「スタートアップ プロジェクトに設定」を押してプロジェクトターゲットを変更してからするようにしてください。
画面に綺麗な雲の画像が画面全体表示できていたら終わりです。お疲れさまでした。
DirectX12だとやっぱりテクスチャがすごく綺麗に映りますね~!!(歓喜)
最後に
学習を進めていく中でバージョンアップによる差分をすぐに確認できるように「WinMerge」というソフトを導入した方がすぐにでもプログラムを理解できるようになるかと思います。
この作例では、記事「DirectX12 | 3-3. DDSテクスチャ」でのmain.cppと今回のmain.cppとで差分を確認して学習に活かしてください。
何のコードが変更されたり追加されたのかがすぐに分かります。
まとめ
今回はWICでテクスチャの描画ができました。
クオリティの高い描画を行う場合はWICが良いですが、
メモリ消費が他のと比べて大きいので、大量のテクスチャを一度に描画するにはDDSの方が良いかもしれません。