現在C#版DXライブラリを使っているのですが、
C++版に存在する
MV1GetReferenceMesh()などの、MV1LoadModel()で読み込んだ3Dモデルのポリゴン情報を取得できる「参照用メッシュ関数」がC#版には存在しないようです。
C#版にはこれに代わる関数は用意されていないのでしょうか?
なければどのようにしてMV1LoadModel()で読み込んだ3Dモデルのポリゴン情報を得れば良いでしょうか?
それも無理なら、ファイルから直接読み込むしかないのでしょうか?
【C#版DXライブラリ】3Dモデルのポリゴン情報を取得する方法
Re: 【C#版DXライブラリ】3Dモデルのポリゴン情報を取得する方法
こんばんはPCJ-600さん。Bulletの時の方ですね。ここhttp://csi.nisinippon.com/index.htmlがC#に関する私のホームページの1つです。(Niftyさんは最低でも50個のアドレスをくれるのでいろいろC#関連もあります。^^;)
C#の最新のDxLib(Ver3.17a)には次の様に書いてあります
----------------------------
概要
DXライブラリを VisualC# で使うための DLL
( 一応C#以外で使用する場合の為に DxDLL.h を同梱してあります、DxDLL.dll の中に含まれている
関数の一覧が載っています )
使い方
<準備>
DxLibDotNet.dll を使用する場合
1.C# のプロジェクトのフォルダの、実行ファイルが作成されるフォルダ
(通常は 「プロジェクトのフォルダ\bin\Debug」 か 「プロジェクトのフォルダ\bin\Release」)
に DxLib.dll と DxLibDotNet.dll をコピー
2.C# のプロジェクトを開いて
「プロジェクト」→「参照の追加」→「参照タブ」で、1でコピーした DxLibDotNet.dll を選択して「OK」ボタン。
DxDLL.cs を使用する場合
1.C# のプロジェクトのフォルダの、実行ファイルが作成されるフォルダ
(通常は 「プロジェクトのフォルダ\bin\Debug」 か 「プロジェクトのフォルダ\bin\Release」)
に DxLib.dll をコピー
2.C# のプロジェクトを開いて
「プロジェクト」→「既存項目の追加」で、DxDLL.cs を「追加」。
<プログラムで実際に使う>
DXライブラリを使用するソースに using DxLibDLL; を書く。
後は、基本的にC言語版のDXライブラリの関数名やマクロ定義の前に DX. を付けたものとなります。
(DX_BLENDMODE_ALPHA 等も DX が2回続いて変ですが、DX.DX_BLENDMODE_ALPHA となります)
例:
int GrHandle = DX.LoadGraph( "test1.bmp" );
DX.SetDrawBlendMode( DX.DX_BLENDMODE_ALPHA, 128 );
DX.DrawGraph( 0, 0, GrHandle, DX.TRUE );
LoadDivGraph 等の int 型のポインタを渡すものは、out int HandleBuf のように定義されています。
というか、文字列以外のポインタは全て out で渡すようになっています。
例:
int[] Handle = new int[25];
DX.LoadDivGraph( "test2.bmp", 25, 5, 5, 10, 10, out Handle[0] );
上記以外の文法上の違いはありませんので、基本的にはC言語版のDXライブラリのリファレンスを
ご参照ください。
<使えない関数>
基本的に「可変引数の関数」「void 型のポインタを引数で取る関数」「コールバック関数を
引数で取る関数」が使えません。(なので通信機能は使えません・・・)
また、ポインタを返す関数やポインタが含まれている構造体を扱う関数も使えませんので、
非公開関数はかなりの数が使えなくなっています。
(公開関数で使用できないもの)
モデルを扱う関数の一部
DrawFormatString
GetDrawFormatStringWidth
DrawFormatStringToHandle
GetDrawFormatStringWidthToHandle
SetDataToMask
DrawMaskToDirectData
DrawFillMaskToDirectData
printfDx
NetWorkSend
NetWorkRecv
NetWorkRecvToPeek
CreateGraphFromMem
LoadSoundMemByMemImage
GraphLock
GraphUnLock
<余談>
上記「使用できない関数」の内、プロジェクトの「条件付コンパイルシンボル」に「DX_USE_UNSAFE」を
定義して、且つ「アンセーフコードの許可」を有効にすると幾つか使える関数が増えます。
ご興味がありましたら DxDLL.cs の中を「unsafe」や「DX_USE_UNSAFE」で検索してみてください。
C#の最新のDxLib(Ver3.17a)には次の様に書いてあります
----------------------------
概要
DXライブラリを VisualC# で使うための DLL
( 一応C#以外で使用する場合の為に DxDLL.h を同梱してあります、DxDLL.dll の中に含まれている
関数の一覧が載っています )
使い方
<準備>
DxLibDotNet.dll を使用する場合
1.C# のプロジェクトのフォルダの、実行ファイルが作成されるフォルダ
(通常は 「プロジェクトのフォルダ\bin\Debug」 か 「プロジェクトのフォルダ\bin\Release」)
に DxLib.dll と DxLibDotNet.dll をコピー
2.C# のプロジェクトを開いて
「プロジェクト」→「参照の追加」→「参照タブ」で、1でコピーした DxLibDotNet.dll を選択して「OK」ボタン。
DxDLL.cs を使用する場合
1.C# のプロジェクトのフォルダの、実行ファイルが作成されるフォルダ
(通常は 「プロジェクトのフォルダ\bin\Debug」 か 「プロジェクトのフォルダ\bin\Release」)
に DxLib.dll をコピー
2.C# のプロジェクトを開いて
「プロジェクト」→「既存項目の追加」で、DxDLL.cs を「追加」。
<プログラムで実際に使う>
DXライブラリを使用するソースに using DxLibDLL; を書く。
後は、基本的にC言語版のDXライブラリの関数名やマクロ定義の前に DX. を付けたものとなります。
(DX_BLENDMODE_ALPHA 等も DX が2回続いて変ですが、DX.DX_BLENDMODE_ALPHA となります)
例:
int GrHandle = DX.LoadGraph( "test1.bmp" );
DX.SetDrawBlendMode( DX.DX_BLENDMODE_ALPHA, 128 );
DX.DrawGraph( 0, 0, GrHandle, DX.TRUE );
LoadDivGraph 等の int 型のポインタを渡すものは、out int HandleBuf のように定義されています。
というか、文字列以外のポインタは全て out で渡すようになっています。
例:
int[] Handle = new int[25];
DX.LoadDivGraph( "test2.bmp", 25, 5, 5, 10, 10, out Handle[0] );
上記以外の文法上の違いはありませんので、基本的にはC言語版のDXライブラリのリファレンスを
ご参照ください。
<使えない関数>
基本的に「可変引数の関数」「void 型のポインタを引数で取る関数」「コールバック関数を
引数で取る関数」が使えません。(なので通信機能は使えません・・・)
また、ポインタを返す関数やポインタが含まれている構造体を扱う関数も使えませんので、
非公開関数はかなりの数が使えなくなっています。
(公開関数で使用できないもの)
モデルを扱う関数の一部
DrawFormatString
GetDrawFormatStringWidth
DrawFormatStringToHandle
GetDrawFormatStringWidthToHandle
SetDataToMask
DrawMaskToDirectData
DrawFillMaskToDirectData
printfDx
NetWorkSend
NetWorkRecv
NetWorkRecvToPeek
CreateGraphFromMem
LoadSoundMemByMemImage
GraphLock
GraphUnLock
<余談>
上記「使用できない関数」の内、プロジェクトの「条件付コンパイルシンボル」に「DX_USE_UNSAFE」を
定義して、且つ「アンセーフコードの許可」を有効にすると幾つか使える関数が増えます。
ご興味がありましたら DxDLL.cs の中を「unsafe」や「DX_USE_UNSAFE」で検索してみてください。