前言
开发的过程中需要实时展示机器的形态,在网上找到了部分资料,现在将代码贴到这里,便于后期研究和使用。
整体代码
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模型的运动,我也在摸索中,这篇文章只是做一个简单的记录