1
0

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.

DirectXTK DDSファイル読み込み

Last updated at Posted at 2022-05-06

DDSファイルを読み込もう!

DDSファイルとは、DirectXで使用できる圧縮テクスチャファイルです。
ゲームのモデルに色や模様をつけるためにPNGやJPEG、TRGなどの画像フォーマットを扱います。
画像のフォーマットを表でまとめてみました。

フォーマット 圧縮タイプ 特徴
.bmp 無圧縮 綺麗/データ大きい
.tiff 無圧縮 綺麗/データ大きい
.tga 無圧縮/可逆圧縮 綺麗/データ大きい/解凍早い
.png 可逆圧縮 綺麗/データ小さい/解凍遅い
.jpg 非可逆圧縮 汚い/データすごく小さい/解凍遅い
.dds 非可逆圧縮 綺麗~汚い/データ大~小/解凍なし

各フォーマットにはメリットデメリットがあります。
それぞれの利点を生かせるように、対応したファイルがあれば読み込めるようにします

C++17以上の実装になります。
実装にはソリューションエクスプローラーのプロパティページからC++17にしましょう。

DirectXTexのライブラリが必要です。

  • わかりやすいサイト

メリット

ファイルを読み込むときのメモリを削減できる
描画パフォーマンスの向上
読み込み、展開処理の高速化

DDSファイルの作り方

2020年3月22日にNVIDEAがDDS変換ツールをリリースしました。
このツールを使って他の画像形式からDDSファイルに変換できます。
他にはキューブマップや法線マップなどを作ることが出来ます。

  • ダウンロード先

準備

  • Githubからライブラリをとってきます。

ソリューションと同じディレクトリにこのファイルがあるとします。

ファイルの中にある、自分が実装したいプラットフォームのDirectXTKのソリューションを開いてビルドします。
Binのファイルが作られて、対応したプラットフォームのライブラリが作られます。
DirectXTexのライブラリの読み込みに使います。

  • DDSTextureLoader.hを読み込めるようにします。
    ソリューションエクスプローラーのプロパティページ>C/C++>全般>追加のインクルードディレクトリ
    .\DirectXTK-main\Inc
    .\DirectXTK-main\Src

  • DirectXTexのライブラリを読み込みます
    ソリューションエクスプローラーのプロパティページ>リンカー>全般>追加のライブラリディレクトリ
    .\DirectXTK-main\Bin\Desktop_2019\x64\Debug
    Desktop_2019以降は各プラットフォームに合わせてください
    ソリューションエクスプローラーのプロパティページ>リンカー>入力>追加の依存ファイル
    DirectXTK.lib

実装

TextureLoader.cpp
#include <filesystem>
#include <WICTextureLoader.h>
#include <DDSTextureLoader.h>
#include "TextureLoader.h"

std::filesystem::path dds_filename(filename);
dds_filename.replace_extension("dds");
if (std::filesystem::exists(dds_filename.c_str()))
{
	HRESULT hr = DirectX::CreateDDSTextureFromFile(device, dds_filename.c_str(),
				resource.GetAddressOf(), shader_resource_view.GetAddressOf()); 
}
else
{
    HRESULT hr = DirectX::CreateWICTextureFromFile(device, wfilename, resource.GetAddressOf(), shader_resource_view.GetAddressOf());
}
TextureLoader.h
#include <wrl.h>
#include <d3d11.h>
#include <DirectXMath.h>

	Microsoft::WRL::ComPtr<ID3D11Device>			device;
	Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> shader_resource_view;
	Microsoft::WRL::ComPtr<ID3D11Resource> resource;

変数説明

const char* filename:テクスチャを読み見込む時のファイルパスです。
wchar_t* wfilename:ワイド文字に変換したファイルパスです。

コード説明

dds_filenameという変数でDDS用のファイルパスを作ります。
ファイルフォーマットでddsがつくファイルを探して、該当すれば読み込みます。
読み込まなかったらWICで読み込むかダミーテクスチャを作りましょう。
あとは、関数の引数通りに設定していきます。

おわり

最近DirectXTKのファイル名がDirectXTK-masterから、DirectXTK-mainに変わりました。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?