6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DirectX::SpriteBatchで画像を簡単に表示してみる(DirectX11)

Last updated at Posted at 2019-08-16

DirectXには画像を簡単に表示することが出来るSpriteBatchというクラスがあります。このクラスを使えば、面倒な頂点シェーダーやピクセルシェーダーを用意する必要が無くなるのです!

下準備

まず、表示したい画像をVisualStudioに追加します。
g.png
右クリック→プロパティで項目の種類をImage Content Pipelineに設定します。
pro.png
image.png
これでビルドした時に、画像ファイルから.ddsというファイルが出来るようになります。この.ddsファイルを読み込んで画像を表示します。
image.png
プロパティページから.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();
}
6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?