« Live2D Cubism 4 SDKにあるサンプルを動かす | トップページ | 「自分のツイートを検索したい」と思い調べたことの覚書 »

2019.09.24

DXライブラリ+Live2D Cubism 4 SDK for Native

| |コメント (0)

 このエントリーをはてなブックマークに追加

さて、ようやく本題に入れる。

2019/10/19追記
この記事を書いた段階では、公開されていたDXライブラリのが3.21で
3.21とLive2D Cubism 4 SDK for Nativeについて書いてるので
3.21では使えないという結論を書いてますが、
2019/10/06に公開された3.21b以降では使えるようになってます。

Live2D Cubism 4 SDK for Nativeを
DXライブラリの3.21で使えるか?

結論から言うと、
2019/08/26に公開された3.21では使えなかった。
でも、DXライブラリの掲示板「live2dについて
No.21にある3.21aでは使えた。

今後、正式公開される3.21b以降では使えると思う。

2019/10/06に公開された3.21b以降では使えるようになってます。

ソースは、最後に載せることにして、順を追って書いていこう。

DXLib3.21だとアクセス違反が発生

Live2D Cubism 4 SDK for Native+DXライブラリ3.21だと
Live2D_LoadModelのところでアクセス違反の例外が発生した。

「live2dについて」のNo.9にある
Live2D Cubism SDKを
DXライブラリから使うサンプルプログラムには無かったけど、
リファレンスには、
Live2D_LoadModelの前に必要な
Live2D_SetCubism3CoreDLLPathの戻り値があるようだったので
戻り値を確認してみた。

が、戻り値は、正常である。

これは
Live2D Cubism 3 SDK for Nativeと
Live2D Cubism 4 SDK for NativeのDLL名が同じだからかな。

で、「live2dについて」にLive2D_LoadModelの行で例外が発生してしまう
と書いてあったのを思い出し、見てみた。

ただ、その解決をしたモジュールは3.21の公開前の日付だから
3.21では、解決しているはず…

でも、さらに見ていくと
3.21の公開日より後の日付で
Live2D_Model_SetParameterValueという関数が追加されていた。

DXライブラリの3.21と3.21aの差分は、
この関数だけなのかな?
と思い、DXライブラリの3.21と3.21aのソースを比較してみた。

3.21と3.21aのソースを比較

3.21のソースには下記のソースがあった。
DxLive2DCubism3.cpp
DxLive2DCubism3.h

それが3.21aでは、無くなってて
DxLive2DCubism4.cpp
DxLive2DCubism4.h
になってるのに気づいた。

2019/09/04に公開されたLive2D Cubism 4 SDK for Nativeに
対応してそうなファイル名になってる!

3.21aのDXLib.hを見ると
Live2D_SetCubism3CoreDLLPathだけではなく
Live2D_SetCubism4CoreDLLPathというのもある。

ということは、3.21aのlibファイルに入れ替えて
Live2D_SetCubism4CoreDLLPathを使ったらイケる?

試してみたらイケた!(・∀・)

動画を再生するには、videoタグをサポートしたブラウザが必要です。

Live2D Cubism 4 SDK for Nativeを
F:/GraphicTool/Live2D/CubismSdkForNative-4-beta.1
として展開した前提のソースは、こんな感じ

#include "DxLib.h"

// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int ModelHandle;
int DllPathRet;

// ウィンドウモードで起動
ChangeWindowMode(TRUE);

// 画面解像度を設定
//SetGraphMode(1900, 900, 32);
SetGraphMode(480*2, 272 * 2, 32);

// Live2D Cubism Core DLL の読み込み( 64bit アプリの場合と 32bit アプリの場合で読み込む dll を変更 )
#ifdef _WIN64
DllPathRet = Live2D_SetCubism4CoreDLLPath("F:/GraphicTool/Live2D/CubismSdkForNative-4-beta.1/Core/dll/windows/x86_64/Live2DCubismCore.dll");
#else
DllPathRet = Live2D_SetCubism4CoreDLLPath("F:/GraphicTool/Live2D/CubismSdkForNative-4-beta.1/Core/dll/windows/x86/Live2DCubismCore.dll");
#endif
if (DllPathRet < 0) {
MessageBox(NULL, "Live2D Cubism Core DLL の読み込み NG", "えらー", MB_OK);
return(-1);
}


// DXライブラリ初期化処理
if (DxLib_Init() == -1)
{
return -1;
}

// Live2Dモデルの読み込み( model3.json ファイルを指定する )
ModelHandle = Live2D_LoadModel("F:/GraphicTool/Live2D/CubismSdkForNative-4-beta.1/Samples/Res/Haru/Haru.model3.json");
if (ModelHandle < 0) {
MessageBox(NULL, "Live2Dモデルの読み込み NG", "えらー", MB_OK);
return(-1);
}

// 描画先を裏画面に変更
SetDrawScreen(DX_SCREEN_BACK);

// メインループ
while (ProcessMessage() == 0)
{
int iRet = 0;
// 画面の初期化
ClearDrawScreen();

DrawString(50, 50, "まだ正式公開されていない", GetColor(255, 255, 255));
DrawString(50, 70, "DXライブラリ置き場掲示板", GetColor(255, 255, 255));
DrawString(50, 90, "トピックス「live2dについて」の", GetColor(255, 255, 255));
DrawString(50, 110, "No.21にある暫定バージョンで", GetColor(255, 255, 255));
DrawString(50, 130, "Live2D Cubism 4 SDK for Nativeのテスト", GetColor(255, 255, 255));

// スペースキーを押したらアイドリングモーションをランダムで再生
if (GetInputChar(TRUE) == ' ')
{
iRet = Live2D_Model_StartMotion(ModelHandle, "Idle", GetRand(1));
if (iRet < 0) {
MessageBox(NULL, "Idle ランダム", "えらー", MB_OK);
return(-1);
}
}

// テンキーの0~3を押すとTapBodyの各モーションを再生
if (CheckHitKey(KEY_INPUT_NUMPAD0) == 1)
{
iRet = Live2D_Model_StartMotion(ModelHandle, "TapBody", 0);
if (iRet < 0) {
MessageBox(NULL, "TapBody 0", "えらー", MB_OK);
return(-1);
}
}

if (CheckHitKey(KEY_INPUT_NUMPAD1) == 1)
{
iRet = Live2D_Model_StartMotion(ModelHandle, "TapBody", 1);
if (iRet < 0) {
MessageBox(NULL, "TapBody 1", "えらー", MB_OK);
return(-1);
}
}

if (CheckHitKey(KEY_INPUT_NUMPAD2) == 1)
{
iRet = Live2D_Model_StartMotion(ModelHandle, "TapBody", 2);
if (iRet < 0) {
MessageBox(NULL, "TapBody 2", "えらー", MB_OK);
return(-1);
}
}

if (CheckHitKey(KEY_INPUT_NUMPAD3) == 1)
{
iRet = Live2D_Model_StartMotion(ModelHandle, "TapBody", 3);
if (iRet < 0) {
MessageBox(NULL, "TapBody 3", "えらー", MB_OK);
return(-1);
}
}

// テンキーの4~7を押すと指定された表情を再生
if (CheckHitKey(KEY_INPUT_NUMPAD4) == 1)
{
iRet = Live2D_Model_SetExpression(ModelHandle, "f04");
if (iRet < 0) {
MessageBox(NULL, "f04", "えらー", MB_OK);
return(-1);
}
}

if (CheckHitKey(KEY_INPUT_NUMPAD5) == 1)
{
iRet = Live2D_Model_SetExpression(ModelHandle, "f05");
if (iRet < 0) {
MessageBox(NULL, "f05", "えらー", MB_OK);
return(-1);
}
}

if (CheckHitKey(KEY_INPUT_NUMPAD6) == 1)
{
iRet = Live2D_Model_SetExpression(ModelHandle, "f06");
if (iRet < 0) {
MessageBox(NULL, "f06", "えらー", MB_OK);
return(-1);
}
}

if (CheckHitKey(KEY_INPUT_NUMPAD7) == 1)
{
iRet = Live2D_Model_SetExpression(ModelHandle, "f07");
if (iRet < 0) {
MessageBox(NULL, "f07", "えらー", MB_OK);
return(-1);
}
}

// モデルの状態を60分の1秒分進める
Live2D_Model_Update(ModelHandle, 1 / 60.0f);

// Live2D描画の開始
Live2D_RenderBegin();

// モデルの描画
Live2D_Model_Draw(ModelHandle);

// Live2D描画の終了
Live2D_RenderEnd();

// 裏画面の内容を表画面に反映
ScreenFlip();
}

// Live2D モデルの削除
Live2D_DeleteModel(ModelHandle);

// DXライブラリ使用の終了処理
DxLib_End();

// ソフトの終了
return 0;
}

※表情のところの「f04」とか「f05」が何かについては、次の記事に書きます。

2019/11/26追記
次の記事を書くの遅れています…
残件として認識をしてるので、書く予定はしています。
書いた際は、このページからのリンクを張ります。

Live2D Cubism 4の使い方を覚えるならこの本



株式会社サイドランチ (著), Crico株式会社 癸のずみ (著), 株式会社Live2D (監修)
エムディエヌコーポレーション(MdN) (2019/9/10)

商品ページはコチラ↓

【Amazon.co.jp 限定】の書籍には(特典:Live2D Cubism 4 〈年間プラン契約 500円引きクーポン〉データ配信) がついています。


 このエントリーをはてなブックマークに追加

| |コメント (0)

このエントリーへのリンク

このエントリーのリンクを入れるHTML:

コメント

このブログの新着コメントをRSSリーダに登録する為のxml




←名前とメールアドレスは必須です。
URLも記入すれば、URLのみが公開されます。
メールアドレスのみですと、メールアドレスが公開されてしまいますので、御注意ください。

↓コメント本文では、「a href」「b」「i」「br/」「p」「strong」「em」「ul」「ol」「li」「blockquote」「pre」のタグが使えます。絵文字をクリックすると、本文にタグを挿入できます。