我想更改從 .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;
}
uj5u.com熱心網友回復:
Model3DGroup包含一組GeometryModel3D. 材料屬性在GeometryModel3D. 你需要改變GeometryModel3D.Material。
uj5u.com熱心網友回復:
我找到了解決方案。我不知道為什么,但model.Children[0] 改為model.Children[1]解決問題。
現在顯示模型并更改材料顏色。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/337963.html
標籤:C# 小白 helix-3d-工具包
