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
|
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
うーんそうですね…
短時間で済みそうなら近いうちに、上手く纏められそうになければいずれ、ということで行こうかと思います (・・;;
|