视频: WPF helix-toolkit 官方SimpleDemo_哔哩哔哩_bilibili
源码: https://github.com/liugang198409/WpfDemo/tree/master/3DSimpleDemo
1. 环境
Visual Studio 2019 + .NET Framework 4.8.1
2. NuGet导入依赖
HelixToolkit
HelixToolkit.wpf
3. 创建类MainViewModel.cs
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="MainViewModel.cs" company="Helix Toolkit">
// Copyright (c) 2014 Helix Toolkit contributors
// </copyright>
// <summary>
// Provides a ViewModel for the Main window.
// </summary>
// --------------------------------------------------------------------------------------------------------------------
namespace _3DSimpleDemo
{
using System.Windows.Media;
using System.Windows.Media.Media3D;
using HelixToolkit.Wpf;
/// <summary>
/// Provides a ViewModel for the Main window.
/// </summary>
public class MainViewModel
{
/// <summary>
/// Initializes a new instance of the <see cref="MainViewModel"/> class.
/// </summary>
public MainViewModel()
{
// Create a model group
var modelGroup = new Model3DGroup();
// Create a mesh builder and add a box to it
var meshBuilder = new MeshBuilder(false, false);
meshBuilder.AddBox(new Point3D(0, 0, 1), 1, 2, 0.5);
meshBuilder.AddBox(new Rect3D(0, 0, 1.2, 0.5, 1, 0.4));
// Create a mesh from the builder (and freeze it)
var mesh = meshBuilder.ToMesh(true);
// Create some materials
var greenMaterial = MaterialHelper.CreateMaterial(Colors.Green);
var redMaterial = MaterialHelper.CreateMaterial(Colors.Red);
var blueMaterial = MaterialHelper.CreateMaterial(Colors.Blue);
var insideMaterial = MaterialHelper.CreateMaterial(Colors.Yellow);
// Add 3 models to the group (using the same mesh, that's why we had to freeze it)
modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Material = greenMaterial, BackMaterial = insideMaterial });
modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(-2, 0, 0), Material = redMaterial, BackMaterial = insideMaterial });
modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(2, 0, 0), Material = blueMaterial, BackMaterial = insideMaterial });
// Set the property, which will be bound to the Content property of the ModelVisual3D (see MainWindow.xaml)
this.Model = modelGroup;
}
/// <summary>
/// Gets or sets the model.
/// </summary>
/// <value>The model.</value>
public Model3D Model { get; set; }
}
}
4. 编辑MainWindow.xaml
<Window x:Class="_3DSimpleDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:HelixToolkit="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf"
xmlns:local="clr-namespace:_3DSimpleDemo"
Title="SimpleDemo"
Width="640"
Height="480">
<Window.DataContext>
<local:MainViewModel />
</Window.DataContext>
<Grid>
<Grid.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
<HelixToolkit:NotNullToVisibilityConverter x:Key="NotNullToVisibilityConverter" />
<Style TargetType="{x:Type HelixToolkit:HelixViewport3D}">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type HelixToolkit:HelixViewport3D}">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid FocusVisualStyle="{x:Null}">
<HelixToolkit:CameraController
x:Name="PART_CameraController"
CameraMode="{TemplateBinding CameraMode}"
CameraRotationMode="{TemplateBinding CameraRotationMode}"
ChangeFieldOfViewCursor="{TemplateBinding ChangeFieldOfViewCursor}"
DefaultCamera&