HelixToolkit是一个WPF下的3D开发框架;
VS2015;先新建一个WPF项目;
从NuGet里面安装;需要安装搜出来的前2项;

安装出现一些问题;把net版本改为4.0;HelixToolkit的最新稳定版本是23.0;

安装不了;

看一下HelixToolkit的描述的底部有一个.NetStandard=V2.0;这个应该不是说要把net版本改为2.0;

23.0可能是和VS2019搭配;使用一个HelixToolkit的早一些的版本,2.15.0,安装上了;

安装前面2项;

安装完后看一下引用;

然后写代码;
XAML里面需要加入 xmlns:hv="http://helix-toolkit.org/wpf" ,HelixToolkit的命名空间;
然后使用
XAML先从网上拷一点代码来,我还没细看;
C#后端,先需要加入2个命名空间,
using HelixToolkit.Wpf;
using System.Windows.Media.Media3D;
加载的代码大体如下;
string modelPath1 = "Z:\\test\\venusm.obj";
ModelImporter import = new ModelImporter();
var initGroup1 = import.Load(modelPath1);
ModelVisual3D modelVisual3d1 = new ModelVisual3D();
modelVisual3d1.Content = initGroup1;
viewPort3D.Children.Add(modelVisual3d1);
然后运行一下,加载了一个模型;如下图;

使用一个OBJ模型查看器,看一下原来的模型如下;

全部的代码;
- <Window x:Class="test1.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:test1"
- xmlns:hv="http://helix-toolkit.org/wpf"
- mc:Ignorable="d"
- Title="MainWindow" Height="350" Width="525">
- <Grid>
- <hv:HelixViewport3D Name="viewPort3D" ZoomExtentsWhenLoaded="True"
- ShowViewCube="false" ShowCoordinateSystem="True"
- CoordinateSystemLabelForeground="White"
- CoordinateSystemVerticalPosition="Center"
- CoordinateSystemHorizontalPosition="Right"
-
- CoordinateSystemHeight="50"
- CoordinateSystemWidth="50"
-
- RenderOptions.EdgeMode="Unspecified"
- BorderBrush="White"
- BorderThickness="0"
- ShowFrameRate="False"
- ShowCameraInfo="True"
- IsManipulationEnabled="True"
- Background="Transparent"
- >
-
- <hv:HelixViewport3D.DefaultCamera>
- <PerspectiveCamera LookDirection="-587.475,-330.619,-229.365" Position="587.475,330.619,256.278" UpDirection="-0.248,-0.139,0.959" FieldOfView="45" NearPlaneDistance="0.1"/>
- hv:HelixViewport3D.DefaultCamera>
- <hv:SunLight/>
-
- <hv:GridLinesVisual3D Width="1000" Length="1000" MinorDistance="50" MajorDistance="50" Thickness="1" Fill="#E5CFCECE"/>
- hv:HelixViewport3D>
-
- Grid>
- Window>
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- using HelixToolkit.Wpf;
- using System.Windows.Media.Media3D;
-
- namespace test1
- {
- ///
- /// MainWindow.xaml 的交互逻辑
- ///
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
-
- string modelPath1 = "Z:\\test\\venusm.obj";
- ModelImporter import = new ModelImporter();
- var initGroup1 = import.Load(modelPath1);
-
- ModelVisual3D modelVisual3d1 = new ModelVisual3D();
- modelVisual3d1.Content = initGroup1;
- viewPort3D.Children.Add(modelVisual3d1);
-
- }
- }
- }
下回继续;
它的模型加载以后有默认的操作;左键按下移动好像没反应,中键按下移动是拖放模型,右键按下移动是旋转和偏转模型;看一下这些操作会引起摄像机参数的什么改变;
添加
- private void HelixViewport3D_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
- {
- textBox1.Text = mycame1.Position.X.ToString();
- textBox2.Text = mycame1.Position.Y.ToString();
- textBox3.Text = mycame1.Position.Z.ToString();
-
- textBox4.Text = mycame1.LookDirection.X.ToString();
- textBox5.Text = mycame1.LookDirection.Y.ToString();
- textBox6.Text = mycame1.LookDirection.Z.ToString();
-
- textBox7.Text = mycame1.FieldOfView.ToString();
- }
-
- private void HelixViewport3D_MouseUp(object sender, MouseButtonEventArgs e)
- {
- textBox1.Text = mycame1.Position.X.ToString();
- textBox2.Text = mycame1.Position.Y.ToString();
- textBox3.Text = mycame1.Position.Z.ToString();
-
- textBox4.Text = mycame1.LookDirection.X.ToString();
- textBox5.Text = mycame1.LookDirection.Y.ToString();
- textBox6.Text = mycame1.LookDirection.Z.ToString();
-
- textBox7.Text = mycame1.FieldOfView.ToString();
- }
-
- private void HelixViewport3D_MouseWheel(object sender, MouseWheelEventArgs e)
- {
- textBox1.Text = mycame1.Position.X.ToString();
- textBox2.Text = mycame1.Position.Y.ToString();
- textBox3.Text = mycame1.Position.Z.ToString();
-
- textBox4.Text = mycame1.LookDirection.X.ToString();
- textBox5.Text = mycame1.LookDirection.Y.ToString();
- textBox6.Text = mycame1.LookDirection.Z.ToString();
-
- textBox7.Text = mycame1.FieldOfView.ToString();
- }

我初步试了一下;
按下中键拖放模型会改变摄像机的Position的X和Y参数,其他参数不会影响;对比上图和下图;
如果按下右键移动鼠标,Position和LookDirection参数的X、Y、Z值均会受影响,有时候某个值只会在小数点几位有微小改变;
有时间继续;