WPFコンテンツの制作 3Dアプリケーション編 | デザインってオモシロイ -MdN Design Interactive-
【サイトリニューアル!】新サイトはこちらMdNについて


4.WPFコンテンツをつくってみよう 3Dアプリケーション編


3DデータをXAMLデータで書き出すツール「ZAM3D」と「Microsoft Expression Blend Beta1」を使って、表面に画像を貼りつけた立方体が回転する3Dアプリケーションをつくってみよう。

まずは「ZAM 3D」と「MicrosoftExpr ession Blend Beta1」をそれぞれインストールする。インストールが完了したらZAM 3Dを起動し、メニューの下に並んでいる立方体型のアイコン「CreateBox」を1回押す。すると立方体型のオブジェクトができる【14】。




【14】ZAM 3Dのメニューの下にある「CreateBox」のアイコンを押すと立方体ができる
Editメニュー→“Copy XAML”を実行すると、この立方体のXAMLデータがクリップボードにコピーされるので、Blendを起動して前項の「testXaml1. sln」を開いてXAMLビューに切り替える。

そして<Grid>タグの中にある<Button Width="86" Height="25" Content="Button" Click="Button_ ClickPa ge1"/>部分に上書きでペーストすると、ZAM 3Dで作成した立方体をBlendに取り込める。そして、ペーストしたソースから「Viewbox x:Name ="ZAM3DViewbox"」タグの属性である「ClipToBoun ds」の値を、「true」から「True」に変更し、「c:Ignor able」を削除する。
続いて「Viewport3Dx:Name ="ZAM3DViewport3D"」タグの属性である「Clip ToBounds」の値を、「true」から「True」に変更しておく【15】。これを忘れるとあとの工程でVisual Studioを使用する際に、プログラム上に警告が発生してしまうので注意。

<Viewbox x:Name="ZAM3DViewbox" ClipToBounds=
"True" xmlns="http://schemas.microsoft.com/winfx/2006/
xaml/presentation" xmlns:x="http://schemas.microsoft.com/
winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/
expression/interactivedesigner/2006" xmlns:c=
"http://schemas.openxmlformats.org/markup-compatibility/
2006" c:Ignorable="d"


<Viewport3D x:Name="ZAM3DViewport3D" ClipToBounds
="True" Width="400" Height="300">
【15】ZAM 3Dで作成した立方体のXAMLデータの一部。2カ所ある「true」を「True」に変更し、「c:Ignorable」を削除する
次にBlendを使って立方体に画像を貼り付けていこう。プロジェクトメニュー→“既存のアイテムの追加”を選択し、画像(SKY.JPG)を取り込む【16】。


【16】「SKY.JPG」をBlendに取り込む
3Dモデルに2D画像の貼り付け位置を指定するため、デザインビューに切り換えてリソースパネルを開くと、「Page1.xaml」のコードのZAM 3D View Port 3Dの中身がツリー型で要素ごとに表示されるので「Box01OR9GR10」を選び、その上で右クリック→“XAMLの表示”を選択【17】。XAMLビューを開くと「Box01OR9GR10」の該当部分が表示されるので、【17】のようにコードを修正する。



<MeshGeometry3D x:Key="Box01OR9GR10"
TriangleIndices="0,1,2,2,3,0,4,5,6,6,7,4,8,9,10,10,11,8,12,
13,14,14,15,12,16,17,18,18,19,16,20,21,22,22,23,20"
Normals="0,0,-1 0,0,-1 0,0,-1 0,0,-1 0,0,1 0,0,1 0,0,1 0,0,
1 0,-1,0 0,-1,0 0,-1,0 0,-1,0 1,0,0 1,0,0 1,0,0 1,0,0 0,1,0 0,
1,0 0,1,0 0,1,0 -1,0,0 -1,0,0 -1,0,0 -1,0,0"
"Positions="-0.5,-0.5,-0.5 -0.5,0.5,-0.5 0.5,0.5,-0.5 0.5,-0.5,
-0.5 -0.5,-0.5,0.5 0.5,-0.5,0.5 0.5,0.5,0.5 -0.5,0.5,0.5 -0.5,
-0.5,-0.5 0.5,-0.5,-0.5 0.5,-0.5,0.5 -0.5,-0.5,0.5 0.5,-0.5,
-0.5 0.5,0.5,-0.5 0.5,0.5,0.5 0.5,-0.5,0.5 0.5,0.5,-0.5 -0.5,
0.5,-0.5 -0.5,0.5,0.5 0.5,0.5,0.5 -0.5,0.5,-0.5 -0.5,-0.5,
-0.5 -0.5,-0.5,0.5 -0.5,0.5,0.5"
TextureCoordinates="1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,0,0,1,
0,1,1,0,1,1,0,1,1,0,1,0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,0,1,1"
/>
【17】リソースパネルから「Box01OR9GR10」を選び、該当するコード部分を表示、<TriangleIndices>タグ内の半角スペースをすべてカンマに変更し(上の赤枠部分)、<TextureCoodinates>を設定する(下の赤枠部分)
同じようにして今度は「ER_Defau lt_MaterialMR1」を表示し【18】、【18】のように「<Solid ColorBrush Color="#7F7F92" Opacity="1.000000"/>」を「<ImageBrush ImageSource="SKY.JPG" View portUnits="Absolute" />」と書き替えると、デザインビューで立方体に画像が貼りついた状態を確認できる【19】。



<MaterialGroup x:Key=“ER___Default_MaterialMR1”>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush ImageSource="SKY.JPG"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
(省略)
</MaterialGroup>
【18】【17】と同様に「ER_Default_MaterialMR1」の部分を表示し、<ImageBrush>に書き換える

【19】取り込んだ画像が立方体に貼り付いている
オブジェクトとタイムイラインパネルのツリーから「Box01OR9」を選択し、右クリック→“XAMLの表示”を選ぶと該当するコードが表示される。その「<Model3DGroup x:Name ="Box01O R9" Transform="{DynamicResource Box01OR9TR8}">」の中の「Transform="{Dynamic Resource Box01OR 9TR8}」を削除してから、代わりに<Model3D Group>タグの中に【20】のように記述して、X軸とY軸の回転軸を定義する。

<Model3DGroup x:Name="Box01OR9"
Transform="{DynamicResource Box010R9TR8}"
<!-- Box01 (XAML Path = (Viewport3D.Children)[0].(ModelVisual3D.
Content).(Model3DGroup.Children)[3]) -->
<GeometryModel3D x:Name="Box01OR9GR10" (省略) ER___Default_MaterialMR1}"/>
<!-- Cubeを回転させるための変換指定 -->
<Model3DGroup.Transform>
<Transform3DGroup>
<TranslateTransform3D OffsetX="0" OffsetY="0" OffsetZ="0"/>
<ScaleTransform3D ScaleX="1" ScaleY="1" ScaleZ="1"/>
<!-- Cubeを回転させる軸の指定(X軸)-->
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D x:Name="RotateX" Angle="0" Axis="1,0,0"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
<!-- Cubeを回転させる軸の指定(Y軸)-->
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D x:Name="RotateY" Angle="0" Axis="0,1,0"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Transform3DGroup>
</Model3DGroup.Transform>

</ModelVisual3DGroup>


【20】オブジェクトとタイムラインパネルのから「Box01OR9」を選択、右クリックで「ZAMLの表示」を選ぶ。「Transform=" {DynamicResource Box01OR9TR8}」を削除してから、<Model3D Group>タグの中に赤枠部分を記述する









さらにそれぞれの軸に対して、0~360°繰り返し回転するアニメーションを設定する。これは<Grid>タグの前に【21】をそのまま記述すればよい。

<!--Cubeを回転させるアニメーションの設定-->
<Page.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="RotateX"
Storyboard.TargetProperty="Angle" From="0" To="360"
Duration="0:0:5" RepeatBehavior="Forever" />
<DoubleAnimation Storyboard.TargetName="RotateY"
Storyboard.TargetProperty="Angle" From="0" To="360"
Duration="0:0:5" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Page.Triggers>
【21】<Grid>タグの前にこれを記述する。回転アニメーションが実行するように設定する
ここまでできたら、再度Visual Studioでプロジェクトを開き、ビルドメニュー→“ソリューションのリビルド”を実行して再ビルドする。そして、前節の【12】と同様の手順でPublishを行う。作成した配信用のXBAPファイルをInternet Explorerで実行し、アニメーションを付加したオブジェクトの確認ができれば完成だ【22】。


【22】Internet Explorerの中でオブジェクトが回転する
twitter facebook このエントリーをはてなブックマークに追加 RSS
【サイトリニューアル!】新サイトはこちらMdNについて

この連載のすべての記事

アクセスランキング

8.30-9.5

MdN BOOKS|デザインの本

Pick upコンテンツ

現在