gpt4 book ai didi

c# - 如何更改 3D 对象的不透明度值

转载 作者:行者123 更新时间:2023-11-30 21:22:26 26 4
gpt4 key购买 nike

我使用 VS 2008 C# Express。我想在有很多 3D 对象的窗口中更改 3D 对象的不透明度值。更改过程将由代码隐藏完成。

你能解释一下它是如何完成的吗。

谢谢

B.乔

最佳答案

假设您的 3D 对象是 ModelVisual3DModelUIElement3D 中的 Model3DGroupGeometryModel3D,更改不透明度是迭代其中的各个 GeometryModel3D 并更新每个 MaterialBackMaterial 的问题,大致如下:

public void SetOpacity(Model3D model, double opacity)
{
var modelGroup = model as Model3DGroup;
var geoModel = model as GeometryModel3D;

if(modelGroup!=null)
foreach(var submodel in modelGroup.Children)
SetOpacity(submodel, opacity);

if(geoModel!=null)
{
geoModel.Material = SetOpacity(geoModel.Material, opacity);
geoModel.BackMaterial = SetOpacity(geoModel.BackMaterial, opacity);
}
}

public Brush SetOpacity(Brush brush, double opacity)
{
if(!GetIsOpacityControlBrush(brush)) // Use attached property to mark brush
{
brush = new VisualBrush
{
Visual = new Rectangle { Fill = brush, ... };
};
SetIsOpacityControlBrush(brush, true);
}
((Rectangle)((VisualBrush)brush).Visual).Opacity = opacity;
}

您需要遍历对象中的所有 GeometryModel3D 和 ViewPort2DVisual3D。对于每个 GeometryModel3D,将 Material 更新为新的不透明度,必要时使用 VisualBrush。对于每个 ViewPort2DVisual3D,只需设置不透明度

如果您的 3D 对象是 Visual3D,例如 ContainerUIElement3D,那么您必须首先向下迭代到单独的 ModelVisual3D 和 ModelUIElement3D 以获取包含它的模型。此外,如果您遇到 ViewPort2DVisual3D,您可以直接在包含的 Visual 上设置不透明度。

关于c# - 如何更改 3D 对象的不透明度值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2321994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com