トップページ > 記事閲覧
MV1関連について要望です。
名前:MOR 日時: 2019/02/11 23:27

MV1SetShapeRateやMV1GetShapeRateは『プログラム中で設定した数値の読み書き』であり、 例えば、アニメーションデータにより口パクやまばたきをしている時にMV1GetShapeRateを実行しても MV1SetShapeRateで設定していなければ0.0しか返ってきません。 また、シェイプがアニメーション中にMV1SetShapeRateを実行すると『加算』されます。 例えば、まばたき中にダメージを食らって >< のシェイプに変更するとします。 目関係のシェイプを全てMV1SetShapeRateで0.0にしてから ><だけ1.0にしようとしても、 まばたきは解除されず >< と加算されてイマイチです。(目はともかく、口はきつい) このような処理を実行したい場合、現在は(非公開関数の)MV1SetAttachAnimUseShapeFlagを 使うことになりますが、これだと目だけでなく全てのシェイプの面倒を見なければなりません。 例えば、MV1SetShapeRate2やMV1GetShapeRate2のような関数で「加算ではなく上書き」「今の状態を そのまま取得」のようなペアがあれば便利かと思うのですが…
メンテ

Page: 1 |

Re: MV1関連について要望です。 ( No.1 )
名前:管理人 日時:2019/02/12 22:47

MV1SetShapeRate に加算か上書きかをしていする第四の引数を追加してみましたので、 よろしければこちらの暫定最新バージョンをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM64.zip // Android版 ARM64用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x64.zip // Android版 x64用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 上記のバージョンでは MV1SetShapeRate が以下のようになっています // 指定シェイプの有効率を設定する int MV1SetShapeRate( int MHandle, int ShapeIndex, float Rate, int Type = DX_MV1_SHAPERATE_ADD ) ; 第四の引数 Type に指定できる値は以下の二種類で、DX_MV1_SHAPERATE_ADD がこれまでのバージョンの動作と同じになります // 元の値に加算 #define DX_MV1_SHAPERATE_ADD (0) // 元の値に上書き #define DX_MV1_SHAPERATE_OVERWRITE (1) DX_MV1_SHAPERATE_OVERWRITE を使えば「加算ではなく上書き」になりますので、 よろしければお試しください > 例えば、MV1SetShapeRate2やMV1GetShapeRate2のような関数で「加算ではなく上書き」「今の状態を > そのまま取得」のようなペアがあれば便利かと思うのですが… 「加算ではなく上書き」は MV1SetShapeRate の引数追加で実現できたので、「今の状態をそのまま取得」の 関数は追加しなかったのですが、あったほうが良いでしょうか?
メンテ
Re: MV1関連について要望です。 ( No.2 )
名前:MOR 日時:2019/02/12 23:35

ご対応ありがとうございます。 ただ、作っているアプリの仕様上、MV1GetShapeRateの方も更新していただけると幸いです。 (今はVMDを直接読んでやっているのですが、せっかくなのでMV1に統一したいのです)
メンテ
Re: MV1関連について要望です。 ( No.3 )
名前:MOR 日時:2019/02/13 22:55

追記いたします。 ちなみに、一回でも MV1SetShapeRate を実行すると、その後ずっとその数値のままなのでしょうか? 想像していたのは、上書きしても、MV1SetAttachAnimTime をすると元に戻る(加算モードに戻ると いうより、アニメーションデータに戻る、といった方が正しいですね) イメージとしては  MV1SetAttachAnimTime で アニメーションデータ の挙動に戻る  ↓  必要があれば MV1SetShapeRate で上書き  ↓  描画  ↓  ループ つまり、必要な時だけ上書きする、というイメージでした。
メンテ
Re: MV1関連について要望です。 ( No.4 )
名前:管理人 日時:2019/02/14 00:54

> ただ、作っているアプリの仕様上、MV1GetShapeRateの方も更新していただけると幸いです。 了解です、現在シェイプに適用されている値を取得するための関数 MV1GetShapeApplyRate を追加しましたので、 よろしければダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM64.zip // Android版 ARM64用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x64.zip // Android版 x64用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 以下の関数を追加しました // 指定シェイプの有効率を取得する( 戻り値 0.0f:0% 〜 1.0f:100% ) float MV1GetShapeApplyRate( int MHandle, int ShapeIndex ) ; MV1SetShapeRate で指定した値がそのまま戻り値となる MV1GetShapeRate と異なり アニメーションのシェイプ情報なども加味した値が戻り値となります > ちなみに、一回でも MV1SetShapeRate を実行すると、その後ずっとその数値のままなのでしょうか? はい、第4引数に DX_MV1_SHAPERATE_OVERWRITE を指定した場合はずっとその数値のままになりますので、 初期状態に戻したい場合は第4引数を DX_MV1_SHAPERATE_ADD に、第3引数 0.0f にして MV1SetShapeRate を呼んでください
メンテ
Re: MV1関連について要望です。 ( No.5 )
名前:MOR 日時:2019/02/14 22:08

ご対応いただきありがとうございます。 MV1GetShapeApplyRate を確認しているのですが、シェイプ番号 = 0以外で 正しく取得できないように思います。 DxModel.cpp 内の NS_MV1GetShapeApplyRate( int MHandle, int ShapeIndex ) で、 FrameShapeIndex が -1 になることが多く  FrameShapeIndex = ( int )( Frame->Shape - Shape ) ; を  FrameShapeIndex = (int)(Shape - Frame->Shape); にするとうまくいくっぽいのですが…(たまたま?)
メンテ
Re: MV1関連について要望です。 ( No.6 )
名前:管理人 日時:2019/02/15 23:52

すみません、ご指摘の通り Shape - Frame->Shape の誤りです ( シェイプ番号 0 でのテストしかしていませんでした orz ) 修正版をアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM64.zip // Android版 ARM64用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x64.zip // Android版 x64用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: MV1関連について要望です。 ( No.7 )
名前:MOR(解決) 日時:2019/02/16 00:52

確認いたしました。ありがとうございます。 これで、キャラ本体のMV1と、口パクだけの軽量MV1(ほぼVMDデータのみ)を用意し、 曲に応じて軽量MV1の数値を読んで本体MV1のモーフに上書き、つまりリップシンクが MV1だけでできるようになりました。ありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存