我想更改从。stl文件加载的3D模型的颜色。
问题是它被加载为Model3DGroup。Model3DGroup没有允许改变颜色的属性材质。我试图将Model3DGroup转换为GeometryModel3D(它具有材料属性)。转换后几何图形为空,视口没有显示任何内容。
我可以在这段代码中改进什么,以便能够从stl文件更改模型的颜色?也许还有别的办法?
我在这里发现了类似的问题,也没有解决方案,所以也许这次有人可以帮助。Helix 3d-toolkit显示。stl模型颜色变化
XAML:
<helix:HelixViewport3D x:Name="viewPort3d" ZoomExtentsWhenLoaded="True">
<helix:DefaultLights/>
<ModelVisual3D x:Name="ViewPortModel" Content="{Binding Actual3dModel}"/>
</helix:HelixViewport3D>
c#:
private Model3DGroup actual3dModel;
public Model3DGroup Actual3dModel
{
get {
return actual3dModel;
}
set
{
actual3dModel = value;
OnPropertyChanged("Actual3dModel");
}
}
private void LoadModel()
{
var importer = new HelixToolkit.Wpf.ModelImporter();
var model = importer.Load("Assets/Model.stl");
var m0 = (MeshGeometry3D)((GeometryModel3D)model.Children[0]).Geometry;
var outsideMaterial = MaterialHelper.CreateMaterial(Colors.Red, 0.1);
var insideMaterial = MaterialHelper.CreateMaterial(Colors.Blue);
var modelGroup = new Model3DGroup();
modelGroup.Children.Add(new GeometryModel3D { Geometry = m0, Material = outsideMaterial, BackMaterial = insideMaterial });
Actual3dModel = modelGroup;
}
也以这种方式尝试过(再次显示空模型)。
private void LoadModel2()
{
this.dispatcher = Dispatcher.CurrentDispatcher;
var loader = new ModelImporter();
var model = loader.Load("Assets/Model.stl", this.dispatcher);
GeometryModel3D gmodel = model.Children[0] as GeometryModel3D;
DiffuseMaterial material = new DiffuseMaterial(new SolidColorBrush(Colors.Red));
gmodel.Material = material;
gmodel.BackMaterial = material;
var modelGroup = new Model3DGroup();
modelGroup.Children.Add(gmodel);
Actual3dModel = modelGroup;
}
Model3DGroup
包含一组GeometryModel3D
。材料性能为GeometryModel3D
。您需要更改GeometryModel3D.Material
我找到解决办法了。我不知道为什么,但将model.Children[0]
更改为model.Children[1]
解决了问题。
现在模型显示,材质颜色改变。