概要

このページは、atrenasさんがプロジェクトの参加時にした事をメモとしてまとめたものである。
プロジェクトの参加時に何から手を打てばいいかわからない場合などに非常に参考になる。
なお、MMDDと書かれているものはMMFの旧名称です。

準備編

以下今まで行った手順まとめ:

 ●とりあえずソースコードを見てみよう:
  https://mmdd.codeplex.com/SourceControl/latest
  から左のツリーを展開することで見れます。

 ●ソースをDownloadしてみよう:
  https://mmdd.codeplex.com/SourceControl/latest
  のDownloadをクリックして取得できます。

 ●プログラムを動かしてみよう:
  1.プログラムを動かすにはVisualStudio 2012 が必要です。
     VisualStudio 2012 Express 2012 for Windows Desktopをダウンロードしましょう。
http://www.microsoft.com/visualstudio/jpn/downloads
   登録を行えば無償でずっと使えます。5GほどCドライブに空きが必要です。
   ここで登録したマイクロソフトIDはCodePlex上でも使用しますので忘れずに控えてください。
  2.プログラムを起動する
   DownloadしたソースファイルC:MMDD/MMDD.slnをクリック
   起動後メニューの「ビルド」、「ソリューションのビルド」をクリック
   ビルドが通りエラーが表示されていなければ「デバッグ」「デバック開始」で実行できます。
   ソリューションエクスプローラ(ファイルツリーが表示されているところ)にサンプルとして
   CGTest、PhysicsTest3、PhysicsTest4があります。
   ソリューションエクスプローラから左クリックで各サンプルを選択し、右クリックメニューから
   「スタートアッププロジェクトに設定」を行うことで各サンプルが切り替わります。
   開発途中のものですので動かない所、未実装の箇所もあります。

 *ファイル構成の説明資料や変更する場合のルールなどreadmeも必要かな

 ●プロジェクトに参加してみよう:
   https://mmdd.codeplex.com/wikipage?title=%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%E3%81%AE%E5%8B%9F%E9%9B%86
   を見て参加出来そうか検討する。
   CodePlexに登録する。https://www.codeplex.com/ にSign In
   https://mmdd.codeplex.com/team/view
   のJOIN USから登録、メール送信

 ●開発に参加する準備をしよう
  Git編:

 1.Gitの最新版を取得
   http://git-scm.com/ のDownloadsから対象物をダウンロード

 2.Gitを起動しソースを取得
   http://www8.atwiki.jp/gitjp/m/pages/34.html?guid=on#ida03f1854 を参考に
   
   1.git guiを起動
   2.「既存リポジトリを複製する」を選択
   3.
   https://mmdd.codeplex.com/SourceControl/latest
   のCloneをクリックしURLをコピー
   4.「ソースの位置」にコピーしたURLを指定
       「先ディレクトリ」に複製先のローカルパスを入れて「複製」ボタンを押す
       リポジトリが複製されるまでしばらく待つ。
     5.git guiの「編集」->「オプション」メニューにて名前とメールアドレスを登録
       名前はCodePlexで使用しているもの

  Gitに関する詳しい操作方法及びルール説明はプロジェクト参加時に別資料として配布かな。

実行編

atrenasさんのメモ

MMDDライブラリを使用してみよう。
ということでPhysicsTest4の内容を1から別プロジェクトとして
作ってみた


VisualStudio
 「ファイル」「新しいプロジェクト」「Windowフォームアプリケーション」を選択し
 任意の名前、場所を指定して「OK」を押す

エクスプローラ
 任意のフォルダ(先ほど指定した場所のbin/Debug又はRereas)に各種DLLを置く
 (MMDDをビルドして出来た成果物、MMDD,MMDFileParserフォルダのbin中身
 MMDD.dll MMDFileParser.dll SlimDX.dll等)



VisualStudio
 ソリューションエクスプローラーにて参照設定に先ほどのDLLへの参照設定を加える
  Fome1.csを選択し右クリック、コードの表示でFome1.csを表示する
 
 Dllへのusingを追加する
  using MMDD.CG;
  using MMDD.CG.Model.Sprite.D2D;
  using MMDD.CG.Model.Grid;
  using MMDD.CG.Camera.CameraMotion;
  using MMDFileParser.PMXModelParser;
  using SlimDX;
  using MMDD.CG.Model.MMD;
  using MMDD.CG.Motion;
 
    下記コードを追加する
  モデル・モーションへのファイルパスは変更のこと
  ここではForm1.csと同じ階層にresフォルダを作成しデータを置いている
 
    public partial class Form1 : Form
    {
        /// <summary>
        /// 描画パネルの生成
        /// </summary>
        D2DSupportedRenderPanel panel = new D2DSupportedRenderPanel();
 
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 描画パネルの初期化、座標軸の表示、モデルの表示を行う
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            // 描画パネルの初期化およびFormへ追加する
            panel.Initialize();
            panel.RenderContext.CameraMotionProvider = new BasicCameraControllerMotionProvider(panel, this);
            panel.Dock = DockStyle.Fill;
            Controls.Add(panel);
 
            // 標準座標軸を生成し描画パネルへ追加する
            var grid = new BasicGrid();
            grid.Visiblity = true;
            grid.Load(panel.RenderContext);
            panel.RenderContext.AddResource(grid);
 
            // モデル表示
            const string _modelFileName = "../../res/reimu.pmx";
            var model = MMDModelWithPhysics.OpenLoad(_modelFileName, panel.RenderContext);
            panel.RenderContext.AddResource(model);
 
            // モーション設定
            const string _motionFileName = "../../res/love&joy.vmd";
            var currentMotion = model.MotionManager.AddMotionFromFile(_motionFileName, false);
            model.MotionManager.ApplyMotion(currentMotion, 0, ActionAfterMotion.Replay);
 
        }
 
        /// <summary>
        /// 描画パネルの描画
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            if (panel.IsInitialized) panel.Render();
        }
        /// <summary>
        /// 指定時間ごとに再描画を行う
        /// Formにタイマーを追加しタイマーのプロパティにてEnabledをTrueにし
        /// Inteavalに再描画時間を指定すること
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer1_Tick(object sender, EventArgs e)
        {
            Invalidate();
        }
    }

 Fome1.csのデザインにツールボックスからタイマーを追加
 timer1のプロパティのEnabledをTrue Intervalを17にし
 Tickイベントを追加する
 Fome1にLoadイベントを追加する
 Fome1にPaintイベントを追加する
 
 ビルド、実行する

LimeStreemの返信

atrenasさんへ

実はそのやり方は非推奨なんです。推奨のやり方も記しておきますね。
①RenderFormを利用する方法(ゲームを作る際など、RenderPanelである必要性がないものに利用)
public class Form1:Form
{
~~~
}

public class Form1:MMDD.D2DSupportedRenderForm
{
~~~
}
もしくは
public class Form1:MMDD.RenderForm
{
~~~
}
に変更する。
Program.cs内
Application.Run(new Form1());

MMDD.MessagePump.Run(new Form1());
に変更する。
RenderFormにはInitializeなどは必要ないです。

②RenderPanelを利用する方法(ツールなど、ひとつの画面に複数のパネルが必要だったり、通常のボタンなどと共存させたりする際に利用する)
PhysicsTest4では、タイマーを利用して更新を行っていますがこれには以下の2つの問題が生じます。
1,タイマーのTickイベントは別スレッドで呼び出される
2,結構遅延が生じる

2については気にしなければいいのですが、1については稀にAccessViolationExceptionが発生することがあります。
MMDDのRenderPanelは、順次InvalidateでRenderで更新しても問題ないです。おそらくこうしてもビジー状態にはなりません。
つまり、
public override OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if(panel.isInitialized)panel.Render();
Invalidate();
}
としてタイマーの必要性がありません。

Last edited Apr 18, 2014 at 10:13 PM by DaikonTakuan, version 5

Comments

No comments yet.