DirectX::SpriteBatch로 이미지를 쉽게 표시해보기(DirectX11)

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();
}

좋은 웹페이지 즐겨찾기