基本技術 - (2012/02/03 (金) 10:21:07) の編集履歴(バックアップ)
技術指南/基本技術
ここでは、MMD系のゲームを作るための基本的な技術について紹介します。
ここで紹介している関数はDXライブラリのごく一部の関数です。
必ず、DXライブラリ置き場のDXライブラリの関数リファレンスマニュアル&サンプルプログラムもあわせて確認してください。
ここで紹介している関数はDXライブラリのごく一部の関数です。
必ず、DXライブラリ置き場のDXライブラリの関数リファレンスマニュアル&サンプルプログラムもあわせて確認してください。
モデルの表示
MMDゲーム化計画の第一歩である、モデルの表示方法を紹介します。
今回は、アールビットさんの十六夜咲夜モデルを使用させて頂きました。
ダウンロード>モデルから配布ページのリンクがありますので、興味のある方は是非ダウンロードしてください。
今回は、アールビットさんの十六夜咲夜モデルを使用させて頂きました。
ダウンロード>モデルから配布ページのリンクがありますので、興味のある方は是非ダウンロードしてください。
DXライブラリでは、3Dモデルを表示する際、まずモデルデータをメモリ上に読み込まなければなりません。
モデルのロードにはMV1LoadModel関数または、MV1DuplicateModel関数を使います。
モデルのロードにはMV1LoadModel関数または、MV1DuplicateModel関数を使います。
int MV1LoadModel( char *FileName ) ;
int MV1DuplicateModel( int SrcMHandle ) ;
MV1LoadModel関数は、ファイル名を指定して3Dモデルをメモリ上にロードします。
読み込むことのできるモデルファイル形式は x, mqo, mv1, pmd( + vmd ) の3種類です。
pmxファイルは使用できないので注意してください。
読み込むことのできるモデルファイル形式は x, mqo, mv1, pmd( + vmd ) の3種類です。
pmxファイルは使用できないので注意してください。
返り値がメモリ上に読み込んだ3Dモデルファイルの識別番号で int 型の数値となっていて、
この値を使って、モデルの表示や位置の調整、向きの調整などを行います。
この値を使って、モデルの表示や位置の調整、向きの調整などを行います。
MV1DuplicateModel関数は、1度メモリ上に読み込んだ3Dモデルデータと同じデータを複製します。
弾やモブのように同じモデルを幾つも使うときにはこちらを使ったほうが、読み込み時間が少なくなります。
弾やモブのように同じモデルを幾つも使うときにはこちらを使ったほうが、読み込み時間が少なくなります。
モデルの表示にはMV1LoadModel関数を使います。
int MV1DrawModel( int MHandle ) ;
では、実際に表示してみましょう。
- ソース
+ | ... |
- 実行結果
左下にほんの僅かですが、モデルが表示されていますね。
2Dゲームとは違い、3Dゲームでは3Dモデルの位置とカメラの位置、向きの関係で見え方が異なります。
そのため、画面の中心にモデルを表示したいときは、カメラを表示したいモデルの近くに移動させて、表示したいモデルの方向に向けるか、
カメラが映している範囲に表示したい3Dモデルの位置を移動させる必要があります。
そのため、画面の中心にモデルを表示したいときは、カメラを表示したいモデルの近くに移動させて、表示したいモデルの方向に向けるか、
カメラが映している範囲に表示したい3Dモデルの位置を移動させる必要があります。
カメラの操作は次の項目で紹介するので、今回は3Dモデルをカメラの映している範囲に3Dモデルを移動させます。
3Dモデルの位置座標を設定するにはMV1SetPosition関数を使います。
3Dモデルの位置座標を設定するにはMV1SetPosition関数を使います。
int MV1SetPosition( int MHandle, VECTOR Position ) ;
モデルをロードした後に、この関数でモデルの位置座標を設定します。
- ソース
+ | ... |
- 実行結果
モデルのスケーリング、向きの変更、不透明度の変更
次にモデルを複製してスケールの変更、向きの変更、不透明度の変更を変更してみましょう。
それぞれ、MV1SetScale,MVSetRotationXYZ,MV1SetOpacityRate関数を使います。
それぞれ、MV1SetScale,MVSetRotationXYZ,MV1SetOpacityRate関数を使います。
int MV1SetScale( int MHandle, VECTOR Scale ) ;
int MV1SetRotationXYZ( int MHandle, VECTOR Rotate ) ;
int MV1SetOpacityRate( int MHandle, float Rate ) ;
回転に関しては、他に回転地ではなくモデルの方向ベクトルで指定するMV1SetRotationZYAxis関数や
int MV1SetRotationZYAxis( int MHandle, VECTOR ZAxis, VECTOR YAxis, float ZTwist ) ;
位置、回転、スケーリングなどを行列で指定する
int MV1SetMatrix( int MHandle, MATRIX Matrix ) ;
などもあります。
詳しくはDXライブラリ関数のリファレンスをみてください。
- ソース
+ | ... |
- 実行結果
左から順にそのまま、スケール変更、向き変更、不透明度変更したモデルです。
半透明にしたモデルは、このように服が透けてしまうので、
透明度を操作してキャラをフェードイン、フェードアウトさせたい場合などは、ある程度工夫が必要です。
半透明にしたモデルは、このように服が透けてしまうので、
透明度を操作してキャラをフェードイン、フェードアウトさせたい場合などは、ある程度工夫が必要です。
詳しくはミニテクニックの3Dモデルの半透明化を参考にしてください。
また、これら以外にもモデルの表示設定、ディフューズカラー、エミッシブカラー、アンビエントカラー、
Zバッファ使用の設定、物理演算の設定などを行うことができます。
これらについては自分で必要なときに確認してください。
Zバッファ使用の設定、物理演算の設定などを行うことができます。
これらについては自分で必要なときに確認してください。