Wpf-3d-graphics

提供:Dev Guides
移動先:案内検索

WPF-3Dグラフィックス

Windows Presentation Foundation(WPF)は、アプリケーションの要件に応じて、3Dグラフィックスを描画、変換、およびアニメーション化する機能を提供します。 本格的な3Dゲーム開発をサポートしていませんが、ある程度は3Dグラフィックを作成できます。

2Dグラフィックスと3Dグラフィックスを組み合わせることで、豊富なコントロールを作成したり、データの複雑なイラストを提供したり、アプリケーションのインターフェイスのユーザーエクスペリエンスを強化したりすることもできます。 Viewport3D要素は、3DモデルをWPFアプリケーションにホストします。

3Dグラフィックスの使用方法を理解するために簡単な例を見てみましょう。

  • WPF3DGraphics という名前の新しいWPFプロジェクトを作成します。
  • 次のXAMLコードは、3Dジオメトリを使用して2Dオブジェクトを作成する方法を示しています。
<Window x:Class = "WPF3DGraphics.MainWindow"
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
   xmlns:local = "clr-namespace:WPF3DGraphics"
   mc:Ignorable = "d" Title = "MainWindow" Height = "500" Width = "604">

   <Grid>
      <Viewport3D>

         <Viewport3D.Camera>
            <PerspectiveCamera Position = "2,0,10" LookDirection = "0.2,0.4,-1"
               FieldOfView = "65" UpDirection = "0,1,0"/>
         </Viewport3D.Camera>

         <ModelVisual3D>
            <ModelVisual3D.Content>
               <Model3DGroup>
                  <AmbientLight Color = "Bisque"/>

                  <GeometryModel3D>
                     <GeometryModel3D.Geometry>
                        <MeshGeometry3D Positions = "0,0,0 0,8,0 10,0,0 8,8,0"
                           Normals = "0,0,1 0,0,1 0,0,1 0,0,1" TriangleIndices = "0,2,1 1,2,3"/>
                     </GeometryModel3D.Geometry>

                     <GeometryModel3D.Material>
                        <DiffuseMaterial Brush = "Bisque"/>
                     </GeometryModel3D.Material>
                  </GeometryModel3D>

               </Model3DGroup>
            </ModelVisual3D.Content>
         </ModelVisual3D>

      </Viewport3D>
   </Grid>

</Window>

上記のコードをコンパイルして実行すると、2Dオブジェクトが3Dで生成されます。

3d_output1

3Dオブジェクトを示す別の例を見てみましょう。

  • WPF3DGraphics1 という名前の新しいWPFプロジェクトを作成します
  • 次のXAMLコードは、3Dオブジェクトとスライダーを作成します。 スライダーを使用して、この3Dオブジェクトを回転できます。
<Window x:Class = "WPF3DGraphics1.MainWindow"
   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/blend/2008"
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
   xmlns:local = "clr-namespace:WPF3DGraphics1"
   mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "525">

   <Grid>
      <Viewport3D Name="viewport3D1">

         <Viewport3D.Camera>
            <PerspectiveCamera x:Name = "camMain" Position = "6 5 4" LookDirection = "-6 -5 -4">
            </PerspectiveCamera>
         </Viewport3D.Camera>

         <ModelVisual3D>
            <ModelVisual3D.Content>
               <DirectionalLight x:Name = "dirLightMain" Direction = "-1,-1,-1">
               </DirectionalLight>
            </ModelVisual3D.Content>
         </ModelVisual3D>

         <ModelVisual3D x:Name = "MyModel">
            <ModelVisual3D.Content>
               <GeometryModel3D>

                  <GeometryModel3D.Geometry>
                     <MeshGeometry3D x:Name = "meshMain"
                        Positions = "0 0 0  1 0 0  0 1 0  1 1 0  0 0 1  1 0 1  0 1 1  0 1 1"
                        TriangleIndices = "2 3 1  3 1 0  7 1 3  7 5 1  6 5 7  6 4 5  6 2 0
                        2 0 4  2 7 3  2 6 7  0 1 5  0 5 4">
                     </MeshGeometry3D>
                  </GeometryModel3D.Geometry>

                  <GeometryModel3D.Material>
                     <DiffuseMaterial x:Name = "matDiffuseMain">
                        <DiffuseMaterial.Brush>
                           <SolidColorBrush Color = "Bisque"/>
                        </DiffuseMaterial.Brush>
                     </DiffuseMaterial>
                  </GeometryModel3D.Material>

               </GeometryModel3D>
            </ModelVisual3D.Content>

            <ModelVisual3D.Transform>
               <RotateTransform3D>
                  <RotateTransform3D.Rotation>
                     <AxisAngleRotation3D x:Name = "rotate" Axis = "1 2 1"/>
                  </RotateTransform3D.Rotation>
               </RotateTransform3D>
            </ModelVisual3D.Transform>

         </ModelVisual3D>
      </Viewport3D>

      <Slider Height = "23" HorizontalAlignment = "Left"
         Margin = "145,271,0,0" Name = "slider1"
         VerticalAlignment = "Top" Width = "269"
         Maximum = "360"
         Value = "{Binding ElementName = rotate, Path=Angle}"/>

   </Grid>

</Window>

アプリケーションを実行すると、ウィンドウに3Dオブジェクトとスライダーが生成されます。

3d Output1

スライダーをスライドすると、ウィンドウ上のオブジェクトも回転します。

3d Output2

上記のコードを実行して、さらに3Dジオメトリを試すことをお勧めします。