DirectXには画像を簡単に表示することが出来るSpriteBatchというクラスがあります。このクラスを使えば、面倒な頂点シェーダーやピクセルシェーダーを用意する必要が無くなるのです!
下準備
まず、表示したい画像をVisualStudioに追加します。
右クリック→プロパティで項目の種類をImage Content Pipelineに設定します。
これでビルドした時に、画像ファイルから.ddsというファイルが出来るようになります。この.ddsファイルを読み込んで画像を表示します。
プロパティページから.ddsファイルの出力先を変更することが出来ます。画像に関してはこれでOKです。
描画
まずは初期化や画像の読み込みをします。
//変数
ID3D11Device* device //構築済みとする
ID3D11DeviceContext* deviceContext //構築済みとする
std::unique_ptr<DirectX::SpriteBatch> spriteBatch; //これが肝
ID3D11ShaderResourceView* shaderResourceView //読み込んだ画像ファイルの保存先
//spriteBatchの初期化
{
spriteBatch = std::make_unique<DirectX::SpriteBatch>(deviceContext);
}
//画像の読み込み
{
DirectX::CreateDDSTextureFromFile(
device, //デバイス
L"Assets/title.dds", //読み込む画像ファイルの場所と名前
nullptr, //nullptrでいい
&shaderResourceView); //ここに読み込んだファイルの情報が格納されます
}
//
描画していきます。
//以下ループ
{
//Drawの前に呼び出す
spriteBatch.get()->Begin();
//Draw
spriteBatch.get()->Draw(
shaderResourceView, //読み込んだ画像ファイル
DirectX::XMFLOAT2(0.0f,0.0f) //画像の座標
);
//Drawの後に呼び出す
spriteBatch.get()->End();
}
これで描画出来る...はずです。
実際に画像が描画されるのは、SpriteBatchのEnd関数が呼ばれたタイミングになります。
尚、こんな感じでBegin()とEndの間に何度もDraw関数を呼び出すことが出来ます。
{
spriteBatch.get()->Begin();
spriteBatch.get()->Draw(...);
spriteBatch.get()->Draw(...);
spriteBatch.get()->Draw(...);
spriteBatch.get()->End();
}