WPFで3D
■ その1 はじめての3D 1 【2】
・3Dモデル
WPFにおける3Dモデルは、三角形の集合体です。MeshGeometry3Dクラスを使って作成します。
モデルの作成は、よほど単純な形状をのぞいて、手作業で作ることは困難です。また、Visual StudioやExpression Blendでは3Dモデルを作成するための機能がありません。そこで、3Dモデル作成用のツールに頼ることになります。いくつか方法がある中で、Crea Orreryの開発ではZAM3Dというツールを用いました。3Dモデルを作成し、XAML形式でそのままエクスポートできる優れものです。
サンプルでは、Viewport3D.Children要素にModelVisual3Dクラスを追加して3Dモデルを定義しています。もちろんこれでも3D表示が出来るのですが、ContainerUIElement3D、ModelUIElement3Dを使用して書き換えます。.NET Framework 3.5から追加されたクラスで、マウスダウンなどのイベントを扱えるようになりました。
・回転アニメーション
より3Dらしさを感じるため、回転するアニメーションを追加します。
今回は3Dモデル自体を回転させます。
アニメーション対象となる、AxisAngleRotation3Dにx:Nameディレクティブを付与します。
<RotateTransform3D> <RotateTransform3D.Rotation> <AxisAngleRotation3D x:Name="axisAngleRotation3D" Axis="0,0.5,0" Angle="0"/> </RotateTransform3D.Rotation> </Grid> |
DoubleAnimation型のアニメーションを設定します。今回はアニメーションをコードビハインドで定義しておきます。 3Dモデルの裏側は何も設定していないので、回転角度を-70~70の間でアニメーションさせます。
-- MainWindow.xaml.cs --DoubleAnimation animation = new DoubleAnimation(); animation.From = -70; animation.To = 70; animation.Duration = TimeSpan.FromSeconds(1); animation.AutoReverse = true; animation.RepeatBehavior = RepeatBehavior.Forever; this.axisAngleRotation3D.BeginAnimation(AxisAngleRotation3D.AngleProperty, animation); |
その1は以上となります。
WPFで3Dを扱うイメージを少しでも感じていただけましたでしょうか。
今回説明した内容も基礎を抑えるには不十分ですので、ご興味をお持ちの方はその他資料を参考にしていただければと思います。
次回からは応用的な内容に挑戦していきます。