開発環境 Microsoft Visual Studio Express 2013 for Windows Desktop
実行環境 Microsoft Windows 8.1 (64bit)
プロジェクトの種類 Visual C#/WPF アプリケーション
プロジェクト名 WpfDirectX

参考

MainWindow.xaml
<Window x:Class="WpfDirectX.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="525" Width="525">
    <Grid>
        <Viewport3D>
            <Viewport3D.Camera>
                <PerspectiveCamera x:Name="Camera"
                                   Position="0,2.5,5"
                                   LookDirection="0,-2.5,-5"
                                   UpDirection="0,1,0" />
            </Viewport3D.Camera>
            <ModelVisual3D x:Name="testMesh">
                <ModelVisual3D.Content>
                    <Model3DGroup>
                        <GeometryModel3D>
                            <GeometryModel3D.Geometry>
                                <MeshGeometry3D
Positions="-1,-1,-1 1,-1,-1 1,1,-1 -1,1,-1 -1,-1,1 1,-1,1 1,1,1 -1,1,1"
TriangleIndices="0 1 3, 1 2 3, 0 4 3, 4 7 3, 4 6 7, 4 5 6, 0 4 1, 1 4 5, 1 2 6, 6 5 1, 2 3 7, 7 6 2"/>
                            </GeometryModel3D.Geometry>
                            <GeometryModel3D.Material>
                                <DiffuseMaterial Brush="#00ff00"/>
                            </GeometryModel3D.Material>
                        </GeometryModel3D>
                        <DirectionalLight Color="#ffffff" Direction="2.5,-2.5,-2.5"/>
                    </Model3DGroup>
                </ModelVisual3D.Content>
            </ModelVisual3D>
        </Viewport3D>
    </Grid>
</Window>
 

MainWindow.xaml.cs
using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media.Media3D;
using System.Windows.Threading;
 
namespace WpfDirectX
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        private DispatcherTimer intervalTimer = new DispatcherTimer();
        private Point3D pos = new Point3D(0, 2.5, 5);
 
        public MainWindow()
        {
            InitializeComponent();
 
            intervalTimer.Interval = TimeSpan.FromMilliseconds(30);
            intervalTimer.Tick += intervalTimer_Tick;
            intervalTimer.Start();
        }
 
        void intervalTimer_Tick(object sender, EventArgs e)
        {
            if (Keyboard.IsKeyDown(Key.Escape)) Application.Current.Shutdown();
            if (Keyboard.IsKeyDown(Key.Up)) pos.Z -= 0.1;
            if (Keyboard.IsKeyDown(Key.Down)) pos.Z += 0.1;
            if (Keyboard.IsKeyDown(Key.Left)) pos.X -= 0.1;
            if (Keyboard.IsKeyDown(Key.Right)) pos.X += 0.1;
            Camera.Position = pos;
        }
    }
}
 
最終更新:2014年05月29日 20:23