最高级网站建设,黄海军事最新消息,网站做app开发,郑州防疫新闻背景#xff1a;wpf本身有提供3D的绘制#xff0c;但是自己通过代码描绘出3D是比较困难的。3D库helix-toolkit支持调用第三方生成的模型#xff0c;比如Blender这些#xff0c;所以在wpf上使用3D就变得非常简单。这里是一个通过helix-toolkit库调用第三方生成的3d模型的样例…背景wpf本身有提供3D的绘制但是自己通过代码描绘出3D是比较困难的。3D库helix-toolkit支持调用第三方生成的模型比如Blender这些所以在wpf上使用3D就变得非常简单。这里是一个通过helix-toolkit库调用第三方生成的3d模型的样例 1、安装NuGet包HelixToolkit.Wpf 2、xaml界面中设置相机和光源等参数 引入helix-toolkit命名空间xmlns:hthttp://helix-toolkit.org/wpf
ht:HelixViewport3DNameviewportDefaultCamera{Binding ElementNameviewport, PathCamera}MouseDownViewport_MouseDownShowCoordinateSystemTrueht:HelixViewport3D.CameraPerspectiveCameraFieldOfView80LookDirection-100,-100,-100Position100,100,100UpDirection0,0,1!--PerspectiveCamera.TransformRotateTransform3D CenterX0 CenterY0 CenterZ0RotateTransform3D.RotationAxisAngleRotation3D Axis0,0,1 Angle0//RotateTransform3D.Rotation/RotateTransform3D
/PerspectiveCamera.Transform--/PerspectiveCamera/ht:HelixViewport3D.Cameraht:HelixViewport3D.RotateGestureMouseGesture MouseActionLeftClick //ht:HelixViewport3D.RotateGestureht:HelixViewport3D.PanGestureMouseGesture MouseActionRightClick //ht:HelixViewport3D.PanGesture!-- 光源 --ModelVisual3DModelVisual3D.ContentModel3DGroup!-- 环境光提亮整体的环境亮度 --AmbientLight Color#999 /!-- 点光源光影层次感 --PointLight Position100,0,100 Color#DDD //Model3DGroup/ModelVisual3D.Content/ModelVisual3D/ht:HelixViewport3D 3、Code_behind设置点开页面就选择3d模型
public partial class My3D : UserControl
{public My3D(){InitializeComponent();// 加载外部3D模型文件Model3DGroup modelGroup null;var openFileDialog new Microsoft.Win32.OpenFileDialog(){Filter 3D模型文件 (*.obj, *.stl, *.ply)|*.obj;*.stl;*.ply};if (openFileDialog.ShowDialog() true){var importer new ModelImporter();modelGroup importer.Load(openFileDialog.FileName);}// 将加载的模型添加到Viewport3D中if (modelGroup ! null){var modelVisual new ModelVisual3D();modelVisual.Content modelGroup;viewport.Children.Add(modelVisual);}}private void Viewport_MouseDown(object sender, MouseButtonEventArgs e){Point mousePos e.GetPosition(viewport);// 执行拾取操作HitTestResult hitTestResult VisualTreeHelper.HitTest(viewport, mousePos);if (hitTestResult ! null hitTestResult.VisualHit is ModelVisual3D){// 获取点击到的ModelVisual3D对象ModelVisual3D clickedVisual (ModelVisual3D)hitTestResult.VisualHit;// 进一步处理点击到的物体// 例如获取其名称、执行相应的操作等MessageBox.Show(点击到了物体);}else{MessageBox.Show(没有点击到什么啊);}}
}
--方法Viewport_MouseDown中判断有没有点击中了我们自己导入的模型