WPF 使用 HelixToolkit.Wpf包加载3D模型并且移动和旋转

前言

开发的过程中需要实时展示机器的形态,在网上找到了部分资料,现在将代码贴到这里,便于后期研究和使用。

整体代码

        ModelImporter import = new ModelImporter();//导入模型的类对象
        // 创建一个 3D 模型组
        Model3DGroup modelGroup = new Model3DGroup(); 

        // 创建一个3D模型显示对象
        ModelVisual3D visual3D;

        // 加载 3D 模型
        var modelImporter = new ModelImporter();
        modelGroup = modelImporter.Load(@"D:\var\csharp-3dDemon-main\csharp-3dDemon-main\import3D\bin\Debug\model\Astronaut.3ds");

        //显示灯光,否则模型都是显示为黑色,此处也可以直接在XAML中定义
        DirectionalLight light = new DirectionalLight(Colors.White, new Vector3D(-1, -1, -1));
        DirectionalLight light1 = new DirectionalLight(Colors.White, new Vector3D(1, 1, 1));

        // 将光加入到模型组中
        modelGroup.Children.Add(light);
        modelGroup.Children.Add(light1);

        // 创建一个绕 Y 轴的初始旋转变换
        var initialRotation = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), 10));

        // 创建一个平移变换
        var translation = new TranslateTransform3D(new Vector3D(3, 0, 0));

        // 创建 Transform3DGroup 实例,并将旋转变换添加到其中
        var transformGroup = new Transform3DGroup();
        transformGroup.Children.Add(initialRotation);

        // 将 Transform3DGroup 应用到模型的 Transform 属性中
        modelGroup.Transform = transformGroup;

        // 创建一个平移动画,并设置其起始值、结束值和持续时间,循环次数属性
        var translationAnimation = new DoubleAnimation();
        translationAnimation.From = 0;
        translationAnimation.To = 90;
        translationAnimation.Duration = TimeSpan.FromSeconds(5);
        translationAnimation.RepeatBehavior = RepeatBehavior.Forever;


        // 将动画应用到平移变换的 OffsetX 属性上
        translation.BeginAnimation(TranslateTransform3D.OffsetXProperty, translationAnimation);

        // 将平移变换添加到 Transform3DGroup 中
        transformGroup.Children.Add(translation);

        //3D显示对象中加上内容->模型组, 动作->动画,
        visual3D = new ModelVisual3D { Content = modelGroup, Transform = translation };
        // 创建 HelixViewport3D 控件,并将模型容器添加到其中
        viewport3D.Children.Add(visual3D);

思路总结

WPF 使用 HelixToolkit.Wpf包加载3D模型并且移动和旋转_第1张图片

其中灯光和模型需要模型组的子集合中.
旋转和平移既可以绑定在对象上也可以绑定到动画上
代码中的ModelVisual3D直接等于XAML中的ModelVisual3D对象时,我导入以后并没有看到带向,但是将代码中的对象添加到XAML中的ModelVisual3D对象时,却显示了出来,暂时不知道为什么,

结束语

其实我也并不是非常了解3D模型的运动,我也在摸索中,这篇文章只是做一个简单的记录

你可能感兴趣的:(wpf,3d,动画)