API関数
API関数の例
APIは、Windows APIと同様の形式を取っており、ライブラリはダイナミックリンクライブラリ(DLL)として提供しておりますので、開発言語を制限しません。 例えば、 Visual C++、C#、C++Builder、Visual Basicなどがご利用いただけます。(本SDKには、これらの開発環境は含まれていません。) 以下は、ライブラリリファレンスの抜粋です。
形状の位置/大きさを設定する関数です。
EXTERN M_IAPI Mmi_SetShapeOffset(Mmt_Index modelindex,Mmt_No shapeno,Mmt_Point_ptr offsetLocate,Mmt_Rotate_ptr offsetRotate,Mmt_Scale_ptr offsetScale);
//----------------------------------------------------------------
// 機能
// 形状パラメータをセットする
// 引数
// Mmt_Index modelindex :(I)モデルのインデックス
// Mmt_Noshapeno :(I)形状の番号
// Mmt_Point_ptr offsetLocate :(I)形状の配置位置
// Mmt_Rotate_ptr offsetRotate :(I)形状の回転角
// Mmt_Scale_ptr offsetScalee :(I)形状のスケール
// 戻り値
// OK
// エラー:
// MMR_INVALID_INDEX : インデックスが不正
// MMR_INVALID_NUMBER : 形状番号が不正
//----------------------------------------------------------------
形状の色を変更する関数です。
EXTERN M_IAPI Mmi_SetShapeColor(Mmt_Index modelindex,Mmt_No shapeno,Mmt_Index color);
//----------------------------------------------------------------
// 機能
// 形状の色を設定する
// 引数
// Mmt_Index modelindex :(I)モデルのインデックス
// Mmt_No shapeno :(I)形状の番号
// Mmt_Index color :(I)形状の色インデックス
// 戻り値
// OK
// エラー:
// MMR_INVALID_INDEX : インデックスが不正
// MMR_INVALID_NUMBER : 形状番号が不正
//----------------------------------------------------------------
コーディング例
以下に簡単なコーディング例を挙げます。C(VisualC++)から利用することを前提として記述してあります。
1. DLLの初期化
DLLの初期化としてプログラムの初期化ルーティンに以下のコードを記述してください。
Mmi_Initialize(); // 初期化
Mmi_InitDraw(hWnd, 3); // 画面の初期化(パース図のみ)
Mmi_SetCurrentParts(0); // パーツ階層の初期化
Mmi_ViewInitialize(); // 視点位置の初期化
Mmi_SetClippingVolume(100,100,100,100,100,100,300,200);
// クリッピング領域の初期化 (ウィンドウのサイズ指定)
DLLの初期化のためにウィンドウのハンドルを渡す必要があります。
上の例ではhWndがウィンドウのハンドルです。
2. 形状作成
形状を作成します。ここでは球を1つ作成します。
Mmi_CreateChildParts(0); // パーツ作成
ret = Mmi_CreateModel(); // モデル作成
Mmi_AddModel(0, ret); // モデルをパーツに含める
Mmi_CreateShape(ret, 1); // 形状の作成(球)
CyberWalkerでは「パーツ」「モデル」「形状」によってモデルを管理します。
3. 描画処理
プログラムの再描画処理部分に以下のコードを記述してください。
2.で作成した形状が画面に表示されます。
Mmi_Draw(3);
4. 各種処理
マウスイベントにより視点位置を少しづつ移動させればウォークスルーができ、車などのパーツ位置を少しづつ動かせばアニメーションができます。
視点の移動やパーツの移動も関数を1つ呼び出し、視点やパーツの座標値をセットするだけです。
//視点位置、視点方向の設定関数
Mmi_SetView(0, 0, eye, dir, fovy, bank, dist, "現在の視点");
//パーツ位置の設定関数
Mmi_SetPartsOffset(PartsIndex , locate , rotate , scale);
5. DLLの終了処理
プログラムの終了部分に以下のコードを記述してください。
Mmi_Terminate();