トップページ > 記事閲覧
FBXファイルの日本語名称
名前:めんたいこ 日時: 2016/11/08 08:15

DXライブラリでFBXファイルの3Dモデルを読み込んだときにシェイプ名やマテリアル名などに日本語が使われていると文字化けします。 C#からDXライブラリを使用していまして、C#版のDXライブラリがマルチバイト文字セットのために発生している問題と思います。 (C++からUnicode文字セットでビルドして実行したときには正しい日本語名称が取得できました) お忙しいところ恐れ入りますが、FBXファイルのシェイプ名やマテリアル名、フレーム名やテクスチャ名やアニメ名の日本語名称に対応していただけませんでしょうか?
メンテ

Page: 1 |

Re: FBXファイルの日本語名称 ( No.1 )
名前:管理人 日時:2016/11/09 00:46

C# から、C#版のDXライブラリを使用してマテリアル名やフレーム名を 取得されたということでしょうか? C#版のDXライブラリには MV1GetMaterialName などのマテリアル名を取得する関数等は 無い筈ですが、どのようにして C# からマテリアル名等を取得されたのでしょうか? (・・;
メンテ
Re: FBXファイルの日本語名称 ( No.2 )
名前:めんたいこ 日時:2016/11/09 09:15

C#からのマテリアル名の取得は、C++で MV1GetMaterialName を呼び出すラッパー関数を使用して間接的に呼び出しています(書き忘れていました。すいません) 今回の問題が起きているのは、マテリアル名取得(MV1GetMaterialName)を呼び出すC++のラッパー関数内で文字化けが起きていました。 ですので、C#の問題というよりは、C++の問題でした。 話をわかりづらくさせてしまって申し訳ありません。 C++で問題が簡単にわかるサンプルプログラムをつくりました。 下記のコードは、マルチバイト文字セットでビルドしたDXライブラリ&サンプルプログラムでは、マテリアル名が文字化けします。 DXライブラリはFBXが読み込めるように "#define DX_LOAD_FBX_MODEL" を有効にしてビルドしています。 読む込むFBXファイルのマテリアル名には、日本語が入っています。 それで、FBXファイルの日本語のマテリアル名などに対応していただきたいのですが……という状況です。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE); // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 3Dモデルの読み込み int ModelHandle = MV1LoadModel( _T("test.fbx")); // マテリアル名を表示 int mnum = MV1GetMaterialNum(ModelHandle); for (int i = 0; i < mnum; i++) { const TCHAR* pname = MV1GetMaterialName(ModelHandle, i); MessageBox(NULL, pname, _T("MV1GetMaterialName"), MB_OK); } DxLib_End() ; // ソフトの終了 return 0 ; }
メンテ
Re: FBXファイルの日本語名称 ( No.3 )
名前:管理人 日時:2016/11/10 00:59

ご返答ありがとうございます、状況が理解できました そして手元でマルチバイト文字セットのビルドで MV1GetMaterialName の戻り値が シフトJISではないことを確認しました( UTF-8 形式となっていました ) 少し大き目の変更をしないと修正ができないので、申し訳ありませんが数日程 お時間をください m(_ _;m
メンテ
Re: FBXファイルの日本語名称 ( No.4 )
名前:めんたいこ 日時:2016/11/10 03:33

対応していただけるようで、ありがとうございます。 修正を心よりお待ちしております。
メンテ
Re: FBXファイルの日本語名称 ( No.5 )
名前:めんたいこ(解決) 日時:2016/11/11 19:07

修正をお願いしたFBXファイルの日本語名称の対応ですが、 修正が大きい&時間がかかるようですので、直すのはやめにしていただきたいと思います。 自分のソフトのUnicode化で対応することして、DXライブラリ自体は直さなくてもよいようにしようと思います。 この件は解決で、よろしくお願いします。
メンテ
Re: FBXファイルの日本語名称 ( No.6 )
名前:管理人 日時:2016/11/13 17:34

機能の追加や強化でしたら保留することも考えるのですが、バグなので修正しないわけには… (・・; というわけで、マルチバイト文字セット版でもマテリアル名などを正常に取得できるように 修正しましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: FBXファイルの日本語名称 ( No.7 )
名前:めんたいこ(解決) 日時:2016/11/13 20:03

対応ありがとうございます! 実は私用で急いでいたのと、Unicodeの方が国際化&多言語に対応できますので、自分のプログラムはUnicode化してしまいました…。 忙しいところ無理をさせてしまったようで本当に感謝の言葉もございません。 余談ですが、C#版のDXライブラリはとても簡単にUnicode化できました。 DxDLL.cppの char を TCHAR に置換して、DxDLL.csの DllImport に"CharSet = CharSet.Unicode"を追加するだけで動いてくれました。 とくに問題もなく、かなり安定して動いています。 将来、C#版のDXライブラリをUnicode化するときのご参考にでもなればと思います。 今後ともよろしくお願いします。
メンテ
Re: FBXファイルの日本語名称 ( No.8 )
名前:管理人(解決) 日時:2016/11/15 01:08

そういえば今DXライブラリ内部は基本的に文字列は Unicode で扱っているんでした ご助言ありがとうございます、折を見て配布するC#版DXライブラリで使用する DxLib.dll を Unicode版にしようと思います と、ここまで書いて DxLib.dll を Unicode版にすると、C#で使用する用途以外で DxLib.dll を 使用されている方に影響があることに気づきました それを考慮する場合マルチバイト版とUnicode版を同梱する形に… とはいえそうなると「二つ dll があるけど、どっちも必要なの?」といった混乱を招きそう… うーん悩みます…
メンテ
Re: FBXファイルの日本語名称 ( No.9 )
名前:yumetodo 日時:2016/11/15 04:21

そこはdllの命名とドキュメントにしっかり書くことで責任放棄するしか無いのでは・・・。Unicode対応のほうが長期的には大事でしょう
メンテ
Re: FBXファイルの日本語名称 ( No.10 )
名前:管理人(解決) 日時:2016/11/16 01:24

うーんそうですね… 短時間で済みそうなら近いうちに、上手く纏められそうになければいずれ、ということで行こうかと思います (・・;;
メンテ

Page: 1 |

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

   クッキー保存