トップページ > 記事閲覧
DirectX11とLive2Dを併用しつつマスコット化
名前:P 日時: 2018/01/12 16:34

dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4221 前回このような質問をしたものです。 前回質問した時はDirectX9を用いてのデスクトップマスコットの作成でしたが、今回はDirectX11を用いての作成をしたいです。 それにあたって少しお聞きしたいことがあります。 ・作成する際は前回の記事で書いていただいたプログラムと同じ理論ですか? ・実際にLive2Dのサンプルと前回いただいたプログラムを組み合わせたものを作成したのですが、デバッグ時に例外が発生します。例外はlive2DModel->update();を実行すると発生します。 例外の内容はdrawParamD3Dがメモリ上に存在しないというものです。 ・Log.txtを確認したところ、「435: ID3D11Device オブジェクトを取得します.... 失敗」と記述がありました。 解決策の方をご教授おねがいします。
メンテ

Page: 1 |

ソースコードとログ ( No.1 )
名前:P 日時:2018/01/12 16:36

以下ソースコード #include "DxLib.h" #include <Live2D.h> #include <Live2DModelD3D11.h> #include <D3D11.h> #include <vector> #include <DirectXMath.h> #include "WICTextureLoader.h" #include <util/UtSystem.h> using namespace std; using namespace live2d; #define SCREEN_X 800 #define SCREEN_Y 600 #pragma comment(lib,"d3d11.lib") Live2DModelD3D11 *live2DModel; ID3D11Device *DXDev; ID3D11DeviceContext *DXDevCon; IDXGISwapChain *_swapChain; ID3D11RenderTargetView *_backBufferRTV; vector<ID3D11ShaderResourceView*> _textures; HRESULT InitModel() { //SetUseDirect3D9Ex(); // モデルのロード const char* mocPath = "haru\\runtime\\haru.moc"; const wchar_t *texturePaths[] = { L"haru\\runtime\\haru.1024\\texture_00.png", L"haru\\runtime\\haru.1024\\texture_01.png", L"haru\\runtime\\haru.1024\\texture_02.png", }; const int numTexturePath = sizeof(texturePaths) / sizeof(LPCTSTR); live2DModel->loadModel(mocPath); // テクスチャのロード ID3D11ShaderResourceView* textureSRV; for (int i = 0; i < numTexturePath; i++) { if (SUCCEEDED(DirectX::CreateWICTextureFromFileEx(DXDev, DXDevCon, texturePaths[i], 0, D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE, 0, 0, false, NULL, &textureSRV))) { _textures.push_back(textureSRV); live2DModel->setTexture(i, textureSRV); } else { live2d::UtDebug::error("Could not create texture [%d]", i); return E_FAIL; } } // 座標変換 // 現在のLive2Dモデルは、画像のように下向きに(0,0,w,h)に配置される // センタリングと上下逆転が必要 { float aspect = static_cast<float>(SCREEN_Y) / SCREEN_X; float modelWidth = live2DModel->getModelImpl()->getCanvasWidth(); float modelHeight = live2DModel->getModelImpl()->getCanvasHeight(); DirectX::XMMATRIX ortho = DirectX::XMMatrixOrthographicLH(modelHeight, -modelHeight * aspect, -1.0f, 1.0f); DirectX::XMMATRIX trans = DirectX::XMMatrixTranslation(-modelWidth / 2, -modelHeight / 2, 0); DirectX::XMFLOAT4X4 wvp; DirectX::XMStoreFloat4x4(&wvp, DirectX::XMMatrixMultiplyTranspose(trans, ortho)); live2DModel->setMatrix(reinterpret_cast<float*>(wvp.m)); } return S_OK; } void Render(int Screen, int PMAScreen, int SoftImage) { SetDrawScreen(Screen); if (ClearDrawScreen() != 0) exit(1); DrawString(SCREEN_X / 2, SCREEN_Y / 2, "A", GetColor(255, 255, 255)); RenderVertex(); // モデルのパラメータを直接設定するサンプル double t = (UtSystem::getUserTimeMSec() / 1000.0) * 2 * 3.14; // 首ふり live2DModel->setParamFloat("PARAM_ANGLE_X", (float)(30 * sin(t / 3.0))); // 目パチ live2DModel->setParamFloat("PARAM_EYE_L_OPEN", (float)(1.0 + sin(t / 3))); live2DModel->setParamFloat("PARAM_EYE_R_OPEN", (float)(1.0 + sin(t / 3))); // モデルの描画 live2DModel->update(); live2DModel->draw(); RefreshDxLibDirect3DSetting(); // 描画した内容を乗算済みアルファに変換 GraphFilterBlt(Screen, PMAScreen, DX_GRAPH_FILTER_PREMUL_ALPHA); // 描画した内容を乗算済みアルファに変換した画像を描画対象にする SetDrawScreen(PMAScreen); // 乗算済みアルファに変換した画像の取り込み GetDrawScreenSoftImage(0, 0, SCREEN_X, SCREEN_Y, SoftImage); // 取り込んだ乗算済みアルファの画像で透過ウインドウを更新 UpdateLayerdWindowForPremultipliedAlphaSoftImage(SoftImage); // 少し( 13ミリ秒 )待つ // ( ScreenFlip と異なり自動的にウエイト処理をしてくれないので ) WaitTimer(13); } INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int Screen; int PMAScreen; int SoftImage; // タイトルを test に変更 SetMainWindowText("Test"); // ウインドウモードに変更 ChangeWindowMode(TRUE); //描画先を裏画面に変更 SetDrawScreen(DX_SCREEN_BACK); // Direct3D9Ex ではなく Direct3D9 を使う //SetUseDirect3D9Ex(FALSE); // 画面解像度の設定 SetGraphMode(800, 600, 32); // 透過ウインドウを使用する指定を行う SetUseUpdateLayerdWindowFlag(TRUE); ChangeWindowMode(TRUE); SetUseDirect3D11(TRUE); if (DxLib_Init() == -1) return -1; //描画対象にできるアルファチャンネル付き画面を作成 Screen = MakeScreen(SCREEN_X, SCREEN_Y, TRUE); //乗算済みアルファの画像を格納する為のアルファチャンネル付き画面を作成 PMAScreen = MakeScreen(SCREEN_X, SCREEN_Y, TRUE); //画面取り込み用のソフトウエア用画像を作成 SoftImage = MakeARGB8ColorSoftImage(SCREEN_X, SCREEN_Y); DXDev = (ID3D11Device*)GetUseDirect3D11Device(); DXDevCon = (ID3D11DeviceContext*)GetUseDirect3D11DeviceContext(); Live2D::init(); Live2DModelD3D11::setGraphicsContext(DXDev, DXDevCon); while (ProcessMessage() == 0) { Render(Screen, PMAScreen, SoftImage); } DxLib_End(); return 0; } 以下Log.txt 0:ChangeWindowMode実行 2:ウインドウモードフラグが立てられました 8:ChangeWindowMode実行 14:DXライブラリの初期化処理開始 20: システムの情報を出力します 22: DXライブラリ Ver3.19 25: 論理プロセッサの数 : 4 27: OS Windows8.1 ( Build 9600 ) 131: 現時点のCPU動作速度:大体3.58GHz 133: MMX命令を使用します 135: SSE命令が使用可能です 137: SSE2命令が使用可能です 139: CPUベンダ:GenuineIntel 149: CPU名:Intel(R) Core(TM) i3-4160 CPU @ 3.60GHz 151: COMの初期化... 成功 157: 非同期読み込み処理の初期化...成功 176: ファイルアクセス処理の初期化...成功 183: メモリ総量:4019.87MB 空きメモリ領域:1201.16MB 185: タイマーの精度を検査します 187: 精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 189: パフォーマンスカウンターを使用します タイマー精度 : 3507.502000 KHz 193: ソフトの二重起動検査... 二重起動はされていませんでした 200: ウインドウクラスを登録します... 登録に成功しました 204: ウインドウモード起動用のウインドウを作成します 206: ディスプレイ情報のセットアップ開始 208: モニターの数:2 ディスプレイデバイスの数:2 210: No.0 モニター名:\\.\DISPLAY1 1920x1080 32bit 60Hz 212: No.1 モニター名:\\.\DISPLAY2 1920x1080 32bit 60Hz 223: ディスプレイ情報のセットアップ完了 226: ウインドウの作成に成功しました 228: ウインドウを表示します 238: IMEを無効にしました 240: ウインドウスタイルをウインドウモード用に変更します... 完了 264: DirectInput関係初期化処理 266: XInput DLL の読み込み中... 成功 272: DirectInput7 の取得中... DirectInput8 の取得を試みます...成功 293: 引き続き初期化処理... 初期化成功 300: ジョイパッドの初期化... 303: ジョイパッドの初期化は正常に終了しました 306: マウスデバイスの初期化... 初期化成功 310: キーボードデバイスの初期化... 初期化成功 315: DirectInput 関連の初期化は正常に終了しました 325: DirectSound の初期化を行います 327: DirectSound インターフェースの取得を行います.... 成功 335: 引き続きインターフェースの初期化処理... 成功 370: DirectSound デバイスを列挙します 373: Module Name : Description : プライマリ サウンド ドライバー 375: Module Name : {0.0.0.00000000}.{e67a1530-1a83-43f8-8902-9245bdde8554} Description : スピーカー (Realtek High Definition Audio) 377: Module Name : {0.0.0.00000000}.{8c9a8e38-6817-4384-9161-bc247b4117cc} Description : BenQ GW2265-1 (NVIDIA High Definition Audio) 379: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 382: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 384: 利用可能サンプリング精度 386: Primary 16bit = OK 8bit = OK 388: Secondary 16bit = OK 8bit = OK 390: 利用可能チャンネル 392: Primary MONO = OK STEREO = OK 394: Secondary MONO = OK STEREO = OK 396: DirectSound の初期化は正常に終了しました 400: d3d11.dll の読み込み.... 成功 407: dxgi.dll の読み込み.... 成功 412: API CreateDXGIFactory1 のアドレスを取得します.... 成功 417: IDXGIFactory1 を作成します.... 成功 424: API D3D11CreateDevice のアドレスを取得します.... 成功 428: IDXGIAdapter を取得します.... 成功 433: Direct3D 11 FeatureLevel 11_0 以上を対象とします 435: ID3D11Device オブジェクトを取得します.... 失敗 456: d3d11.dll の解放 1 459: dxgi.dll の解放 1 461: Direct3D11 のオブジェクト数を出力 463: Direct3D11 のオブジェクト合計数 : 0 469: DirectDraw オブジェクトの取得を行います.... 成功 476: 引き続き初期化処理... 初期化に成功しました 497: IDirect3D9Ex オブジェクトを取得します.... 成功 504: IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します 780: 成功 784: Driver:nvd3dum.dll Description:NVIDIA GeForce 210 786: 画面のフォーマットは D3DFMT_X8R8G8B8 です 789: 16bit Zバッファフォーマットは D3DFMT_D16 です 792: 24bit Zバッファフォーマットは D3DFMT_D24X8 です 794: 32bit Zバッファフォーマットは D3DFMT_D24X8 です 796: 16bit カラーフォーマットは D3DFMT_R5G6B5 です 799: 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 801: アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です 803: アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 805: アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です 807: アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 808: DXT1テクスチャフォーマットはD3DFMT_DXT1 です 810: DXT2テクスチャフォーマットはD3DFMT_DXT2 です 812: DXT3テクスチャフォーマットはD3DFMT_DXT3 です 814: DXT4テクスチャフォーマットはD3DFMT_DXT4 です 816: DXT5テクスチャフォーマットはD3DFMT_DXT5 です 818: ABGR 整数 16 ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です 820: ABGR 浮動小数点 16 ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です 822: ABGR 浮動小数点 32 ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です 824: 1チャンネル整数 8 ビット型カラーフォーマットは D3DFMT_A8R8G8B8 です 826: 1チャンネル整数 16 ビット型カラーフォーマットは D3DFMT_G16R16 です 828: 1チャンネル浮動小数点 16 ビット型カラーフォーマットは D3DFMT_R16F です 829: 1チャンネル浮動小数点 32 ビット型カラーフォーマットは D3DFMT_R32F です 831: 2チャンネル整数 8 ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です 833: 2チャンネル整数 16 ビット型カラーフォーマットは D3DFMT_G16R16 です 835: 2チャンネル浮動小数点 16 ビット型カラーフォーマットは D3DFMT_G16R16F です 837: 2チャンネル浮動小数点 32 ビット型カラーフォーマットは D3DFMT_G32R32F です 838: 描画用 16bit カラーフォーマットは D3DFMT_R5G5B5 です 840: 描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 842: 描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 843: 描画用 ABGR 整数 16 ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です 845: 描画用 ABGR 浮動小数点 16 ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です 847: 描画用 ABGR 浮動小数点 32 ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です 849: 描画用1チャンネル整数 8 ビット型カラーフォーマットは D3DFMT_L8 です 851: 描画用1チャンネル整数 16 ビット型カラーフォーマットは D3DFMT_L16 です 853: 描画用1チャンネル浮動小数点 16 ビット型カラーフォーマットは D3DFMT_R16F です 854: 描画用1チャンネル浮動小数点 32 ビット型カラーフォーマットは D3DFMT_R32F です 856: 描画用2チャンネル整数 8 ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です 858: 描画用2チャンネル整数 16 ビット型カラーフォーマットは D3DFMT_G16R16 です 860: 描画用2チャンネル浮動小数点 16 ビット型カラーフォーマットは D3DFMT_G16R16F です 861: 描画用2チャンネル浮動小数点 32 ビット型カラーフォーマットは D3DFMT_G32R32F です 863: A8R8G8B8 カラーフォーマットは頂点テクスチャフェッチに使用できません 865: X8R8G8B8 カラーフォーマットは頂点テクスチャフェッチに使用できません 868: R5G6B5 カラーフォーマットは頂点テクスチャフェッチに使用できません 871: A1R5G5B5 カラーフォーマットは頂点テクスチャフェッチに使用できません 873: X1R5G5B5 カラーフォーマットは頂点テクスチャフェッチに使用できません 875: 一度に描画できるプリミティブの最大数:8388607 877: 対応している最大頂点インデックス:16777215 879: 同時にレンダリングできるバッファの数:4 881: 最大テクスチャサイズ 幅:8192 高さ:8192 884: テクスチャステージテンポラリレジスタ:使用可 885: 減算合成のハードウェア対応:ネイティブ 887: ハードウェア頂点シェーダーバージョンコード:300 889: エミュレーション頂点シェーダーバージョンコード:エミュレーション無し 891: ピクセルシェーダーバージョンコード:300 906: バックバッファロック転送の時間:91nsec 一時的な描画可能バッファを使用した転送の時間:531nsec 911: バックバッファロックを使用します 913: Zバッファを作成します.... 成功 1190: プログラマブルシェーダーを使用します 1248: フォントの初期化を行います 1253: フォントの初期化は正常に終了しました 1269: 文字コードバッファの初期化を行います... 完了しました 1284:DXライブラリの初期化処理終了
メンテ
Re: DirectX11とLive2Dを併用しつつマスコット化 ( No.2 )
名前:管理人 日時:2018/01/13 00:03

DXライブラリは Direct3D 11.0 以降に純粋に対応しているグラフィックスデバイスではない場合は DirectX11 を使用せずに DirectX9 を使用するのですが、ログを拝見する限りでは Pさんがお使いの環境に 搭載されている GeForce 210 は Direct3D 11.0 以降には対応していない( Direct3D 10.1 時代のデバイス )ので DirectX9 が使用されているようです 解決策としては、Direct3D 11.0 以降に対応しているグラフィックカードを購入して、現在使用されている GeForce 210 から交換していただくしかありません・・・ Direct3D 11.0 以降に対応している環境でしたら以前のご質問のときと同じ手法でデスクトップに表示することができます
メンテ
Re: DirectX11とLive2Dを併用しつつマスコット化 ( No.3 )
名前:P(解決) 日時:2018/01/13 20:15

わかりました。 お忙しい中ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存