★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。

新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
Live2D公式クリエイターズフォーラム

なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。

Live2Dモデルの実キャンバスサイズを取得したい

編集済: 6月 2020 Cubism 4 SDK
お世話になります。
掲題の件ですが、CubismModel::GetCanvasWidth()、CubismModel::GetCanvasHeight()を使うと、モデルの縦横比は取得できますが、
実際のサイズが取得できません。
pixelsPerUnitが取得できれば求めることができるのですが、取得する関数などが見当たりませんでした。

もしかすると、moc3ファイルを書き出す際に、キャンバス幅、高さに実サイズ、pixelsPerUnitに1を入れて出力するのが正解なのかなと思ったのですが、どのようにして取得すればいいでしょうか?

よろしくお願いします。

■開発環境
Windows 10 pro 1909
Visual Studio Professional 2017
Cubism 4 SDK for Native R1
タグ付けされた:

コメント

  • Cubism 4 SDK for Native R1のD3D11のサンプルを使ってます。
  • Live2DCubismCore.hの「csmReadCanvasInfo」関数を使うことで取得することができました。

    失礼しました。

    ■参考
    https://docs.live2d.com/cubism-sdk-manual/cubism-core-api-reference/?locale=ja
  • 編集済: 6月 2020
    gama55 様

    お問い合わせいただき誠にありがとうございます。
    Live2Dスタッフの Takと申します。

    この度は製品のご利用にご不便をおかけし大変申し訳ありません。

    モデルの実キャンバスサイズを取得するAPIにつきまして、
    調査したところ、大変申し訳ありませんが gama55 様 にご提示いただいた CubismModel::GetCanvasWidth()、CubismModel::GetCanvasHeight() がモデルの実キャンバスサイズを取得するAPIとなりますが、
    現在リリースしているCubism SDK for Native R1では pixelsPerUnit で割った結果が出力されておりました。
    これにつきましては、想定しているAPIの仕様と外れた結果となりますので、今後のSDKパッケージの更新にて修正予定となります。

    なお、回避策につきましては、
    CubismModel::GetCanvasWidth() などで使用されている、Cubism Core APIの
    Core::csmReadCanvasInfo();
    の第二引数~第四引数にて取得される結果を返却するようなAPIを新しく実装することで、モデルの実キャンバスサイズや pixelsPerUnit が取得できるようになります。

    簡単に、以下のような実装になります。
    ただし、以降更新されるSDK製品版で必ずしも同じ実装にならないことをご了承ください。
    csmFloat32 CubismModel::GetCanvasPixelWidth() const
    {
        Core::csmVector2 tmpSizeInPixels;
        Core::csmVector2 tmpOriginInPixels;
        csmFloat32 tmpPixelsPerUnit;
        
        // 第2引数 -> _model の実キャンバスサイズが入る
        // 第3引数 -> _model のキャンバス中心座標が入る
        // 第4引数 -> _model の pixelsPerUnit が入る
        Core::csmReadCanvasInfo(_model, &tmpSizeInPixels, &tmpOriginInPixels, &tmpPixelsPerUnit);
    
        // モデルの実キャンバスサイズの横を返却する
        return tmpSizeInPixels.X;
    }
    上記実装を流用すると、実キャンバスサイズ、キャンバス中心座標、pixelsPerUnit が取得できるAPIが実装できますので、お試しください。
    お手数をおかけいたしますが、ご確認を何卒宜しくお願いいたします。
  • Tak(Staff) 様

    回答&調査して頂きありがとうございます。
    今後のSDK更新で修正の件了解しました。

    また、回避策も提示して頂きありがとうございます。
    助かります。
コメントするにはサインインまたは登録して下さい。