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);

思路总结

在这里插入图片描述

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

结束语

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

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值