更改3DS模型的颜色和透明度



我想从3DS文件导入一个模型,然后更改颜色和透明度。导入操作没有问题,但如何更改模型的颜色和透明度?

我的代码与附件中的代码相似。我的3DS文件是Helix的Ferarri40.3DS。

Model3DGroup group = new Model3DGroup();
var hpVp3D = new HelixViewport3D();
ModelVisual3D visual3D = new ModelVisual3D();
var lights = new DefaultLights();
ModelImporter importer = new ModelImporter();
Model3D element;
element = importer.Load(@"Ferarri40.3ds")
group.Children.Add(element);
visual3D.Content = group;
hVp3D.Children.Add(visual3D);
hVp3D.Children.Add(lights);
this.AddChild(hVp3D);

我已经尝试过用以下代码更改颜色,但没有成功。

Material material = new DiffuseMaterial(new SolidColorBrush(Colors.Black));
importer.DefaultMaterial = material;

我做错了什么?

下面我描述了如何更改材料&不透明度,每次不加载文件。但我需要在内存中保留额外的对象(objects_3d(。

以下是如何在文件加载过程中更改材料的片段:

var mi = new HelixToolkit.Wpf.ModelImporter();
mi.DefaultMaterial = HelixToolkit.Wpf.MaterialHelper.CreateMaterial(Colors.Gray);
helix_model.Content = mi.Load(f_name);

在这里,我正在将文件加载到Model3DGroup中,稍后我将更改材料

var mi = new HelixToolkit.Wpf.ModelImporter();
Model3DGroup objects_3d = new System.Windows.Media.Media3D.Model3DGroup();
Model3DGroup grp_item = mi.Load(fname);
objects_3d.Children.Add(grp_item);
//model is imported, now we can change material and opacity:
ChangeMatrial(objects_3d, default_material, default_opacity);
helix_model.Content = objects_3d;
helix_vport.Viewport.UpdateLayout();

这里有一个简单的功能,可以在之后更改材料:

public void ChangeMatrial(Model3DGroup group, System.Windows.Media.Media3D.Material new_mat, double opacity=1)

{
foreach (object itm in group.Children)
{
if (itm is GeometryModel3D)
{
System.Windows.Media.Media3D.Material new_mat2 = new_mat.Clone();
HelixToolkit.Wpf.MaterialHelper.ChangeOpacity(new_mat2, opacity);
((GeometryModel3D)itm).Material = new_mat2;
((GeometryModel3D)itm).BackMaterial = new_mat2;

}
else if (itm is Model3DGroup)
{
ChangeMatrial((Model3DGroup)itm, new_mat, opacity);
}
}
}

相关内容

  • 没有找到相关文章

最新更新