トップページ > 記事閲覧
DXライブラリとLive2Dを併用しつつマスコット化
名前:P 日時: 2017/09/25 21:10

ウィンドウの透過をしつつLive2Dを使ってデスクトップマスコットを作ろうとしてみたのですが、この掲示板にあったDXライブラリとLive2Dの併用方法とウィンドウ透過の方法を元に作成しましたが、モデルが表示されないといったことになりました。 DxLibとLive2Dを使って、デスクトップマスコットを作る方法はありますか? 以下ソースコード int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int Screen; int SoftImage; int x, add; //タイトルをtestに変更 SetMainWindowText("Test"); //ウインドウモードに変更 ChangeWindowMode(TRUE); //透過ウィンドウ設定 SetUseBackBufferTransColorFlag(TRUE); // 描画対象にできるアルファチャンネル付き画面を作成 Screen = MakeScreen(SCREEN_SIZE_X, SCREEN_SIZE_Y, TRUE); // 画面取り込み用のソフトウエア用画像を作成 SoftImage = MakeARGB8ColorSoftImage(SCREEN_SIZE_X, SCREEN_SIZE_Y); // 画像を読み込む際にアルファ値をRGB値に乗算するように設定する SetUsePremulAlphaConvertLoad(TRUE); SetDrawScreen(Screen); //Direct3D9ExではなくDirect3D9を使う SetUseDirect3D9Ex(FALSE); //画面解像度の設定 SetGraphMode(SCREEN_SIZE_X, SCREEN_SIZE_Y, 32); //DXライブラリ初期化 if (DxLib_Init() < 0){ return -1; } //Live2D 初期化 Live2D::init(); //DXライブラリが使用しているDirect3DDevice9を取得 g_Device9 = (LPDIRECT3DDEVICE9)GetUseDirect3DDevice9(); //フォントサイズの変更 SetFontSize(20); //Live2Dデータの読み込み if (!Create()){ return -1; } //左右に動く文字列の変数を初期化 x = 0; add = 8; //背景色を青に設定 SetBackgroundColor(0, 0, 255); SetTransColor(0, 0, 255); SetDrawScreen(Screen); //メインループ while (ProcessMessage() == 0) { //画面をクリア ClearDrawScreen(); //Live2Dの描画 Render2D(); GetDrawScreenSoftImage(0, 0, SCREEN_SIZE_X, SCREEN_SIZE_Y, SoftImage); UpdateLayerdWindowForPremultipliedAlphaSoftImage(SoftImage); } //DXライブラリ使用の終了処理 DxLib_End(); //ソフトの終了 return 0; }
メンテ

Page: 1 |

Re: DXライブラリとLive2Dを併用しつつマスコット化 ( No.1 )
名前:管理人 日時:2017/09/26 00:48

以下のようにプログラムを少し変更したところ正常に Live2D でレンダリングされたモデルを透過表示できましたので よろしければご覧ください m(_ _)m 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( SCREEN_SIZE_X, SCREEN_SIZE_Y, 32 ) ; // 透過ウインドウを使用する指定を行う // ( UpdateLayerdWindowForPremultipliedAlphaSoftImage や UpdateLayerdWindowForSoftImage などの // UpdateLayerdWindow系を使用する場合は SetUseBackBufferTransColorFlag ではなく // SetUseUpdateLayerdWindowFlag を使用します ) SetUseUpdateLayerdWindowFlag( TRUE ) ; // DXライブラリ初期化 if( DxLib_Init() == -1 ) { return -1; } // 描画対象にできるアルファチャンネル付き画面を作成 // ( MakeScreen や MakeARGB8ColorSoftImage などは DxLib_Init の前では使用できません ) Screen = MakeScreen( SCREEN_SIZE_X, SCREEN_SIZE_Y, TRUE ) ; // 乗算済みアルファの画像を格納する為のアルファチャンネル付き画面を作成 PMAScreen = MakeScreen( SCREEN_SIZE_X, SCREEN_SIZE_Y, TRUE ) ; // 画面取り込み用のソフトウエア用画像を作成 SoftImage = MakeARGB8ColorSoftImage( SCREEN_SIZE_X, SCREEN_SIZE_Y ) ; // Live2D 初期化 Live2D::init(); // DXライブラリが使用している Direct3DDevice9 を取得 g_Device9 = (LPDIRECT3DDEVICE9)GetUseDirect3DDevice9(); // フォントサイズの変更 SetFontSize( 8 ); // Live2D データの読み込み if(!Create()) { return -1; } // メインループ while( ProcessMessage()==0 ) { // 描画先を仮画面に変更 SetDrawScreen( Screen ) ; // 画面をクリア ClearDrawScreen(); // 何か描画しないと Live2D の正常な描画結果が得られなかったので、 // Aという文字を人物の後ろに描画 DrawString( SCREEN_SIZE_X / 2, SCREEN_SIZE_Y / 2,"A", GetColor(255,255,255)); // Live2D の描画 Render2D(); // 描画した内容を乗算済みアルファに変換 GraphFilterBlt( Screen, PMAScreen, DX_GRAPH_FILTER_PREMUL_ALPHA ) ; // 描画した内容を乗算済みアルファに変換した画像を描画対象にする SetDrawScreen( PMAScreen ) ; // 乗算済みアルファに変換した画像の取り込み GetDrawScreenSoftImage( 0, 0, SCREEN_SIZE_X, SCREEN_SIZE_Y, SoftImage ) ; // 取り込んだ乗算済みアルファの画像で透過ウインドウを更新 UpdateLayerdWindowForPremultipliedAlphaSoftImage( SoftImage ) ; // 少し( 13ミリ秒 )待つ // ( ScreenFlip と異なり自動的にウエイト処理をしてくれないので ) WaitTimer( 13 ) ; } // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; }
メンテ
Re: DXライブラリとLive2Dを併用しつつマスコット化 ( No.2 )
名前:P 日時:2017/09/26 23:13

無事正常に描画する事ができました お忙しい中、ありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存