初音ミク XAML化計画~ Trackball.cs を組み込んで、初音ミクをグリングリン回す


さて、クオータニオンの原理がわかったところで、Trackball.cs を組み込みます。MSDN の Cube Animation Demo の trackball.cs は、http://msdn2.microsoft.com/en-us/library/ms771572.aspxにありますので、ダウンロードしておきます。必要なファイルは、trackball.cs です。このファイルは、これまで書いたように、回転に関して示唆に富むソースコードです。3D が初めての人は、ぜひ一読して、理解することをお勧めします。わずか200行程度なのですが、ベクトルの外積、クオータニオンを凝縮したコードです。また、簡単に組み込むことも意識して作られており、参考になります。

  1. ZAM 3D から Export する。
  2. trackball.cs をプロジェクトに追加する。
  3. Form をロードした際のイベント Window_Loaded を追加する。
  4. Windows1.xaml.cs に以下の trackball をコールするコードを追加する。
    ——– ここから ——–
    Trackball _trackball;
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        // setup trackball for moving the model around
        _trackball = new Trackball();
        _trackball.Attach(this);
        _trackball.Slaves.Add(this.ZAM3DViewport3D);
        _trackball.Enabled = true;
    }
  5. trackball.cs の private void UpdateSlaves(Quaternion q, double s, Vector3D t)  を修正
    オリジナルコードだと、ZAM3Dが生成するコードとTransform3Dの相性が悪く、クラッシュします。
    また、オリジナルの trackball.cs では、カメラではなく ModelVisual3D を動かすコードになっています。オブジェクトを動かすのでも問題ありませんが、カメラを動かしたほうがスマートです。そこで、このメソッドを次のようにカメラを動かすように修正します。

private void UpdateSlaves(Quaternion q, double s, Vector3D t)
{   
    ////// カメラバージョン
    if (_slaves != null)
    {
        foreach (Viewport3D i in _slaves)
        {
            Transform3D t3dg = i.Camera.Transform;            ScaleTransform3D scaleTransform = new ScaleTransform3D();
            scaleTransform.ScaleX = s;
            scaleTransform.ScaleY = s;
            scaleTransform.ScaleZ = s;            Rotation3D rotation = new AxisAngleRotation3D(q.Axis, q.Angle);
            TranslateTransform3D trtf = new TranslateTransform3D(-t.X * 10, -t.Y * 10, -t.Z * 10);
            Transform3DGroup tg = new Transform3DGroup();
            tg.Children.Add(scaleTransform);
            tg.Children.Add(new RotateTransform3D(rotation));
            tg.Children.Add(trtf);            i.Camera.Transform = tg;
        }
    }
}

  • あと、trackball.cs のもともとのコードが、F1 や、Spaceキーを使っていますが、使いにくいので適当にキーを修正します。
  • コンパイル&実行
  • これで、次のように ミクをグリングリン回すことができるようになります。テスト用 ClickOnce操作方法

    • 右クリックでドラッグ→回転
    • 左シフトを押しながら右クリックでドラッグ→移動
    • ホィール→拡大縮小
    • 左コントロールを押して右クリック→回転、位置のリセット

    image 注意: 原点を中心に回転するようになっていますので、ミクを原点に配置しないとうまく回転してくれません。六角、ZAM3D、VS2008の パッケージ一式はこちら注意: キオ式 初音ミクの XAML 化データに関しては、本家 キオ式アニキャラ3D の “当方の3Dデータ、動画の使用条件について” を参照してください。注意: 今回使用したミクのデータは、V1.1-1.5 ぐらいで、少々古いです。また、ごみが混じっていたり、消し忘れの球が見えていたりしますが、ご愛嬌ということで w

    コメント / トラックバック6件 to “初音ミク XAML化計画~ Trackball.cs を組み込んで、初音ミクをグリングリン回す”

    1. Shigeru Says:

      おめでとうございます(笑クォータニオンやらオイラーやら、、、あのあたりは、とあるところの、とあるものをやると、自然に身についたり・・・(これ以上は秘密ミクミク、グリグリまわしてみました。

    2. 仮面 Says:

      えムナウさんからの情報 >クオータニオンXAMLでもサポートされているようです。Blendのアニメーションからは使えませんが・・・http://msdn2.microsoft.com/ja-jp/library/ms752083(VS.80).aspxhttp://msdn2.microsoft.com/ja-jp/library/ms742206(VS.80).aspxなんと・・・

    3. 仮面 Says:

      ・snumaさん・ おめでとうございます(笑ありがとうございます。w初音ミクでなければ、途中でめげたような w最初にクオータニオンでミクをグリングリン回したのえムナウさんです。どうも最近の c#関連はえムナウさんといい、青柳さんといい、やばいことになってますねw ・クォータニオンやらオイラーやら、、、あのあたりは、とあるところの、とあるものをやると、自然に身についたり・・・(これ以上は秘密あっ、こんなところに講師発見!勉強会希望w

    4. Unknown Says:

      いいなぁ、いいなぁ。そのうち時間ができたら試してみたいなぁ。

    コメントを残す

    以下に詳細を記入するか、アイコンをクリックしてログインしてください。

    WordPress.com ロゴ

    WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

    Twitter 画像

    Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

    Facebook の写真

    Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

    Google+ フォト

    Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

    %s と連携中


    %d人のブロガーが「いいね」をつけました。