さて、クオータニオンの原理がわかったところで、Trackball.cs を組み込みます。MSDN の Cube Animation Demo の trackball.cs は、http://msdn2.microsoft.com/en-us/library/ms771572.aspxにありますので、ダウンロードしておきます。必要なファイルは、trackball.cs です。このファイルは、これまで書いたように、回転に関して示唆に富むソースコードです。3D が初めての人は、ぜひ一読して、理解することをお勧めします。わずか200行程度なのですが、ベクトルの外積、クオータニオンを凝縮したコードです。また、簡単に組み込むことも意識して作られており、参考になります。
- ZAM 3D から Export する。
- trackball.cs をプロジェクトに追加する。
- Form をロードした際のイベント Window_Loaded を追加する。
- 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;
} - 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;
}
}
}
これで、次のように ミクをグリングリン回すことができるようになります。テスト用 ClickOnce操作方法
- 右クリックでドラッグ→回転
- 左シフトを押しながら右クリックでドラッグ→移動
- ホィール→拡大縮小
- 左コントロールを押して右クリック→回転、位置のリセット
注意: 原点を中心に回転するようになっていますので、ミクを原点に配置しないとうまく回転してくれません。六角、ZAM3D、VS2008の パッケージ一式はこちら注意: キオ式 初音ミクの XAML 化データに関しては、本家 キオ式アニキャラ3D の “当方の3Dデータ、動画の使用条件について” を参照してください。注意: 今回使用したミクのデータは、V1.1-1.5 ぐらいで、少々古いです。また、ごみが混じっていたり、消し忘れの球が見えていたりしますが、ご愛嬌ということで w
おめでとうございます(笑クォータニオンやらオイラーやら、、、あのあたりは、とあるところの、とあるものをやると、自然に身についたり・・・(これ以上は秘密ミクミク、グリグリまわしてみました。
えムナウさんからの情報 >クオータニオンXAMLでもサポートされているようです。Blendのアニメーションからは使えませんが・・・http://msdn2.microsoft.com/ja-jp/library/ms752083(VS.80).aspxhttp://msdn2.microsoft.com/ja-jp/library/ms742206(VS.80).aspxなんと・・・
・snumaさん・ おめでとうございます(笑ありがとうございます。w初音ミクでなければ、途中でめげたような w最初にクオータニオンでミクをグリングリン回したのえムナウさんです。どうも最近の c#関連はえムナウさんといい、青柳さんといい、やばいことになってますねw ・クォータニオンやらオイラーやら、、、あのあたりは、とあるところの、とあるものをやると、自然に身についたり・・・(これ以上は秘密あっ、こんなところに講師発見!勉強会希望w
いいなぁ、いいなぁ。そのうち時間ができたら試してみたいなぁ。