いろいろ試してみたが、マテリアルの色がうまく乗らない。たとえば、髪飾りのピンクと目の色が同じマテリアルにマップされており、髪飾りをピンクにすると、白眼もピンクになってしまう。しょうがないので、六角上でさらに細かく分割しました。あまり細かくすると、ZAM 3D へのインポートが大変になるので、顔(目、上の歯、下の歯、口の中)、ヘッドセットや、髪飾りは、各1つにグループ化しました。ようやくこれで ZAM 3D上で色が重ならずに、着色ができた。ということで、現在のデータ(六角、ZAM 3D、Visual Studio 2005) をまとめてアップしておきます。http://uchukamen.com/WPF/MikuData/Miku%20Kio%20V5.zipあとは、ZAM 3D でアニメーション機能があるので、下の図のように時間ごとにパーツを動かして、アニメーションを作成する。アニメーションが作成できたところで、Export to XAML で Visual Studio 20005 のプロジェクトに書き出す。このときに、アニメーションは、OnLoaded の ストーリーボードとして作成されます。したがって、このままVS 2005 でコンパイル&実行してあげると、そのまま踊りだします。ZAM 3Dでは、左下にある球体でトラックボールのようにオブジェクトの方向を変更することができ、かなり簡単にアニメーションを作成することができます。ただし、ZAM 3D の制限として、1つのアニメーションしか作成できないので、ちょっと不便です。複数のアニメーションを設定できると楽なんですけど・・・それから、ちょっとまえのデータですが、MikuMikuDance のスクリーンショットと実行ファイルをさらしておきますw。なお、うしろのビデオは、WMV を WPF でリアルタイムに変形&再生するように、Expression Blend で追加したものです。WPFすげー。それから、これはカメラのパン、ズーム、それから回転を行うデモ。http://uchukamen.com/WPF/MikuData/KioVS.exeコード的には、ズームはとても簡単。FieldOfView の値を変更してあげればよい。private void sliderZoom_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
this.Target_CameraOR20.FieldOfView = this.slider.Value;
}
マウスホィールを使うのであれば、マイナスとか大きすぎる場合のリミッターを入れて、たとえば次のようにすればよい。
private void ZAM3DViewport3D_MouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
{
this.Target_CameraOR63.FieldOfView += e.Delta / 100;
if (this.Target_CameraOR63.FieldOfView < 10)
this.Target_CameraOR63.FieldOfView = 10;
else if (this.Target_CameraOR63.FieldOfView > 100)
this.Target_CameraOR63.FieldOfView = 100;
}
カメラの方向を変更するのは、こんな感じ。
private void SliderH_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Transform3DGroup tg = new Transform3DGroup();
tg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), this.SliderH.Value)));
tg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), this.SliderV.Value))); this.Target_CameraOR20.Transform = tg;
}
private void SliderV_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Transform3DGroup tg = new Transform3DGroup();
tg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), this.SliderH.Value)));
tg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), this.SliderV.Value))); this.Target_CameraOR20.Transform = tg;
}もう少しスマートにするには、ZAM 3D のトラックボールのようなインターフェースがよいでしょう。これはもう一人のオヤジから展開されると思いますw
トラックバックが送信できてなさげなのでコメントで失礼します。
http://shinichiaoyagi.blog25.fc2.com/blog-entry-23.html
↑でこのエントリを紹介させてもらいました。
コメントありがとうございます。
内容が内容だけにちょっと恥ずかしいですね w